From f32d4c9cd1f45beb65979f66bc498ca21e8c061e Mon Sep 17 00:00:00 2001 From: Micksha Date: Sat, 21 Jul 2018 21:05:51 +0200 Subject: add all the items required for hurns --- db/re/item_db.conf | 650 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 627 insertions(+), 23 deletions(-) diff --git a/db/re/item_db.conf b/db/re/item_db.conf index de337b46..e3041119 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -2905,6 +2905,33 @@ item_db: ( bonus bAgi, 1; "> }, +{ + Id: 1308 + AegisName: "WarlordPlate" + Name: "Warlord Plate" + Type: "IT_ARMOR" + Buy: 200000 + Sell: 18000 + Weight: 1500 + Atk: 0 + Matk: -200 + Def: 450 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_MID" + WeaponLv: 0 + EquipLv: 20 + Refine: false + ViewSprite: 1308 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, { Id: 1800 AegisName: "LousyMoccasins" @@ -2932,6 +2959,55 @@ item_db: ( Delay: 0 Sprite: 0 }, +{ + Id: 1801 + AegisName: "CottonBoots" + Name: "Cotton Boots" + Type: "IT_ARMOR" + Buy: 2600 + Sell: 420 + Weight: 35 + Atk: 0 + Matk: 0 + Def: 120 + Range: 0 + Slots: 1 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_SHOES" + WeaponLv: 0 + EquipLv: 12 + Refine: false + ViewSprite: 1801 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 + AllowCards: { + id5003: 1 + id5004: 1 + id5005: 1 + id5006: 1 + id5007: 1 + id5008: 1 + id5009: 1 + id5010: 1 + id5011: 1 + id5012: 1 + id5013: 1 + id5014: 1 + id5015: 1 + id5016: 1 + id5017: 1 + id5018: 1 + id5019: 1 + id5020: 1 + id5021: 1 + } +}, + { Id: 2000 AegisName: "Armbands" @@ -3013,6 +3089,81 @@ item_db: ( Delay: 0 Sprite: 0 }, +{ + Id: 2003 + AegisName: "CottonGloves" + Name: "Cotton Gloves" + Type: "IT_ARMOR" + Buy: 400 + Sell: 250 + Weight: 60 + Atk: 0 + Matk: 0 + Def: 10 + Range: 0 + Slots: 1 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_GARMENT" + WeaponLv: 0 + EquipLv: 10 + Refine: false + ViewSprite: 2003 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 + AllowCards: { + id5003: 1 + id5004: 1 + id5005: 1 + id5006: 1 + id5007: 1 + id5008: 1 + id5009: 1 + id5010: 1 + id5011: 1 + id5012: 1 + id5013: 1 + id5014: 1 + id5015: 1 + id5016: 1 + id5017: 1 + id5018: 1 + id5019: 1 + id5020: 1 + id5021: 1 + } +}, +{ + Id: 2004 + AegisName: "LeatherGloves" + Name: "Leather Gloves" + Type: "IT_ARMOR" + Buy: 3500 + Sell: 500 + Weight: 140 + Atk: 0 + Matk: 0 + Def: 20 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_GARMENT" + WeaponLv: 0 + EquipLv: 20 + Refine: false + ViewSprite: 2004 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, { Id: 2200 AegisName: "CreasedShorts" @@ -3067,6 +3218,140 @@ item_db: ( Delay: 0 Sprite: 0 }, +{ + Id: 2202 + AegisName: "JeansChaps" + Name: "Jeans Chaps" + Type: "IT_ARMOR" + Buy: 2500 + Sell: 500 + Weight: 360 + Atk: 0 + Matk: -100 + Def: 240 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_LOW" + WeaponLv: 0 + EquipLv: 12 + Refine: false + ViewSprite: 2202 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, +{ + Id: 2203 + AegisName: "SilkPants" + Name: "Silk Pants" + Type: "IT_ARMOR" + Buy: 5000 + Sell: 1000 + Weight: 20 + Atk: 0 + Matk: 0 + Def: 80 + Range: 0 + Slots: 1 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_LOW" + WeaponLv: 0 + EquipLv: 17 + Refine: false + ViewSprite: 2203 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 + AllowCards: { + id5000: 1 + id5001: 1 + id5002: 1 + } +}, +{ + Id: 2204 + AegisName: "CottonSkirt" + Name: "Cotton Skirt" + Type: "IT_ARMOR" + Buy: 3000 + Sell: 600 + Weight: 15 + Atk: 0 + Matk: 0 + Def: 20 + Range: 0 + Slots: 1 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_LOW" + WeaponLv: 0 + EquipLv: 5 + Refine: false + ViewSprite: 2204 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 + AllowCards: { + id5003: 1 + id5004: 1 + id5005: 1 + id5006: 1 + id5007: 1 + id5008: 1 + id5009: 1 + id5010: 1 + id5011: 1 + id5012: 1 + id5013: 1 + id5014: 1 + id5015: 1 + id5016: 1 + id5017: 1 + id5018: 1 + id5019: 1 + id5020: 1 + id5021: 1 + } +}, +{ + Id: 2205 + AegisName: "LeatherTrousers" + Name: "Leather Trousers" + Type: "IT_ARMOR" + Buy: 9500 + Sell: 2100 + Weight: 280 + Atk: 0 + Matk: 0 + Def: 160 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_LOW" + WeaponLv: 0 + EquipLv: 15 + Refine: false + ViewSprite: 2205 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, { Id: 2700 AegisName: "Barrel" @@ -3122,6 +3407,53 @@ item_db: ( bonus bAtkRange, -1; "> }, +{ + Id: 2702 + AegisName: "WoodenShield" + Name: "Wooden Shield" + Type: "IT_ARMOR" + Buy: 5000 + Sell: 750 + Weight: 2450 + Def: 72 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HAND_L" + EquipLv: 12 + Refine: false + ViewSprite: 0 + BindOnEquip: false + BuyingStore: true + OnEquipScript: <" + bonus bAtkRange, -1; + "> +}, +{ + Id: 2703 + AegisName: "SteelShield" + Name: "Steel Shield" + Type: "IT_ARMOR" + Buy: 25000 + Sell: 2630 + Weight: 5500 + Def: 200 + Matk: -200 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HAND_L" + EquipLv: 20 + Refine: false + ViewSprite: 2701 + BindOnEquip: false + BuyingStore: true + OnEquipScript: <" + bonus bAtkRange, -1; + "> +}, { Id: 2900 AegisName: "Bandana" @@ -3284,6 +3616,222 @@ item_db: ( Delay: 0 Sprite: 0 }, +{ + Id: 2906 + AegisName: "InfantryHelmet" + Name: "Infantry Helmet" + Type: "IT_ARMOR" + Buy: 1600 + Sell: 300 + Weight: 400 + Atk: 0 + Matk: -50 + Def: 160 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 12 + Refine: false + ViewSprite: 2906 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, +{ + Id: 2907 + AegisName: "CandleHelmet" + Name: "Candle Helmet" + Type: "IT_ARMOR" + Buy: 4500 + Sell: 650 + Weight: 500 + Atk: 0 + Matk: -25 + Def: 180 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 16 + Refine: false + ViewSprite: 2907 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, +{ + Id: 2908 + AegisName: "WarlordHelmet" + Name: "Warlord Helmet" + Type: "IT_ARMOR" + Buy: 13500 + Sell: 3200 + Weight: 1000 + Atk: 0 + Matk: -300 + Def: 340 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 24 + Refine: false + ViewSprite: 2908 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, +{ + Id: 2909 + AegisName: "AxeHat" + Name: "Axe Hat" + Type: "IT_ARMOR" + Buy: 3500 + Sell: 750 + Weight: 50 + Atk: 0 + Matk: 25 + Def: 12 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 5 + Refine: false + ViewSprite: 2909 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, +{ + Id: 2910 + AegisName: "PinkieHat" + Name: "Pinkie Hat" + Type: "IT_ARMOR" + Buy: 12600 + Sell: 3500 + Weight: 5 + Atk: 0 + Matk: 7 + Def: 7 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 10 + Refine: false + ViewSprite: 2910 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, +{ + Id: 2911 + AegisName: "TopHat" + Name: "Top Hat" + Type: "IT_ARMOR" + Buy: 50000 + Sell: 12500 + Weight: 40 + Atk: 0 + Matk: 0 + Def: 50 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 17 + Refine: false + ViewSprite: 2911 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, +{ + Id: 2912 + AegisName: "BowlerHat" + Name: "Bowler Hat" + Type: "IT_ARMOR" + Buy: 17355 + Sell: 4300 + Weight: 30 + Atk: 0 + Matk: 0 + Def: 40 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 15 + Refine: false + ViewSprite: 2912 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, +{ + Id: 2913 + AegisName: "FairyHat" + Name: "Fairy Hat" + Type: "IT_ARMOR" + Buy: 6300 + Sell: 1200 + Weight: 5 + Atk: 0 + Matk: 0 + Def: 25 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 10 + Refine: false + ViewSprite: 2913 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, { Id: 3200 AegisName: "Shemagh" @@ -3529,6 +4077,62 @@ item_db: ( Delay: 0 Sprite: 0 }, +{ + Id: 3508 + AegisName: "Dagger" + Name: "Dagger" + Type: "IT_WEAPON" + Buy: 2500 + Sell: 500 + Weight: 350 + Atk: 100 + Matk: 0 + Def: 0 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HAND_R" + WeaponLv: 1 + EquipLv: 1 + Refine: false + Subtype: "W_DAGGER" + ViewSprite: 1 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, +{ + Id: 3509 + AegisName: "Setzer" + Name: "Setzer" + Type: "IT_WEAPON" + Buy: 25000 + Sell: 5000 + Weight: 250 + Atk: 600 + Matk: 0 + Def: 0 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HAND_R" + WeaponLv: 1 + EquipLv: 1 + Refine: false + Subtype: "W_DAGGER" + ViewSprite: 1 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, { Id: 3510 AegisName: "Pickaxe" @@ -3546,7 +4150,7 @@ item_db: ( All: true } Gender: "SEX_ANY" - Loc: ["EQP_HAND_R", "EQP_HAND_L"] + Loc: ["EQP_HAND_R","EQP_HAND_L"] WeaponLv: 1 EquipLv: 15 Refine: false @@ -3575,7 +4179,7 @@ item_db: ( Type: "IT_CARD" Buy: 2000 Sell: 80 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_HEAD_LOW"] }, { Id: 5001 @@ -3584,7 +4188,7 @@ item_db: ( Type: "IT_CARD" Buy: 2000 Sell: 80 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_HEAD_LOW"] }, { Id: 5002 @@ -3593,7 +4197,7 @@ item_db: ( Type: "IT_CARD" Buy: 2000 Sell: 80 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_HEAD_LOW"] }, { Id: 5003 @@ -3602,7 +4206,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5004 @@ -3611,7 +4215,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5005 @@ -3620,7 +4224,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5006 @@ -3629,7 +4233,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5007 @@ -3638,7 +4242,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5008 @@ -3647,7 +4251,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5009 @@ -3656,7 +4260,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5010 @@ -3665,7 +4269,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5011 @@ -3674,7 +4278,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5012 @@ -3683,7 +4287,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5013 @@ -3692,7 +4296,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5014 @@ -3701,7 +4305,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5015 @@ -3710,7 +4314,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5016 @@ -3719,7 +4323,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5017 @@ -3728,7 +4332,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5018 @@ -3737,7 +4341,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5019 @@ -3746,7 +4350,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5020 @@ -3755,7 +4359,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5021 @@ -3764,7 +4368,7 @@ item_db: ( Type: "IT_CARD" Buy: 1200 Sell: 70 - Loc: "EQP_HEAD_MID" + Loc: ["EQP_HEAD_MID","EQP_SHOES","EQP_GARMENT","EQP_HEAD_LOW"] }, { Id: 5022 -- cgit v1.2.3-60-g2f50 From b211002ddd7333b5604f15d4025061e089f4ade7 Mon Sep 17 00:00:00 2001 From: Micksha Date: Wed, 1 Aug 2018 10:13:52 +0200 Subject: add missing bows to item_db --- db/re/item_db.conf | 40 +++++++++++++++++++++++++++++++++++++++- maps/re/008-1-1.mcache | Bin 358 -> 2001 bytes npc/008-1-1/_import.txt | 1 + npc/008-1/_warps.txt | 1 + 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/db/re/item_db.conf b/db/re/item_db.conf index e3041119..ce88eeec 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -4517,7 +4517,7 @@ item_db: ( Sell: 52 Weight: 12 Atk: 150 - Range: 7 + Range: 4 MinRange: 3 Loc: ["EQP_HAND_R", "EQP_HAND_L"] WeaponLv: 1 @@ -4527,6 +4527,44 @@ item_db: ( Id6500: 1 } }, +{ + Id: 6001 + AegisName: "ShortBow" + Name: "Short Bow" + Type: "IT_WEAPON" + Buy: 1200 + Sell: 250 + Weight: 260 + Atk: 100 + Range: 5 + MinRange: 3 + Loc: ["EQP_HAND_R", "EQP_HAND_L"] + WeaponLv: 1 + EquipLv: 15 + Subtype: "W_BOW" + AllowAmmo: { + Id6500: 1 + } +}, +{ + Id: 6002 + AegisName: "ForestBow" + Name: "Forest Bow" + Type: "IT_WEAPON" + Buy: 7500 + Sell: 1250 + Weight: 480 + Atk: 150 + Range: 6 + MinRange: 3 + Loc: ["EQP_HAND_R", "EQP_HAND_L"] + WeaponLv: 1 + EquipLv: 20 + Subtype: "W_BOW" + AllowAmmo: { + Id6500: 1 + } +}, { Id: 6500 AegisName: "TrainingArrow" diff --git a/maps/re/008-1-1.mcache b/maps/re/008-1-1.mcache index 6365fa18..757d18ee 100644 Binary files a/maps/re/008-1-1.mcache and b/maps/re/008-1-1.mcache differ diff --git a/npc/008-1-1/_import.txt b/npc/008-1-1/_import.txt index 7063c99e..ea6fd468 100644 --- a/npc/008-1-1/_import.txt +++ b/npc/008-1-1/_import.txt @@ -1,2 +1,3 @@ // Map 008-1-1: Woodland // This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/008-1-1/_warps.txt", diff --git a/npc/008-1/_warps.txt b/npc/008-1/_warps.txt index ab1728ed..46e9891d 100644 --- a/npc/008-1/_warps.txt +++ b/npc/008-1/_warps.txt @@ -24,3 +24,4 @@ 008-1,257,130,0 warp #008-1_257_130 0,0,008-2-28,25,31 008-1,233,131,0 warp #008-1_233_131 0,0,008-2-29,36,24 008-1,287,133,0 warp #008-1_287_133 0,0,008-2-30,52,39 +008-1,20,85,0 warp #008-1_20_85 0,1,008-1-1,246,85 -- cgit v1.2.3-60-g2f50 From 92a997b403ab8a8443ce2179f3a2c1d1ad11a17e Mon Sep 17 00:00:00 2001 From: Micksha Date: Wed, 1 Aug 2018 10:16:06 +0200 Subject: add the make maps results, because I am stupid --- npc/008-1-1/_warps.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 npc/008-1-1/_warps.txt diff --git a/npc/008-1-1/_warps.txt b/npc/008-1-1/_warps.txt new file mode 100644 index 00000000..8dc1e0b5 --- /dev/null +++ b/npc/008-1-1/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-1-1: Woodland warps +008-1-1,247,85,0 warp #008-1-1_247_85 0,1,008-1,21,85 -- cgit v1.2.3-60-g2f50 From b50aac0d27f0155d3710dde59b1fb3fb239b33c6 Mon Sep 17 00:00:00 2001 From: Micksha Date: Wed, 1 Aug 2018 11:37:44 +0200 Subject: fix zeny exploit error --- db/re/item_db.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/re/item_db.conf b/db/re/item_db.conf index ce88eeec..a0bd9ce3 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -3094,7 +3094,7 @@ item_db: ( AegisName: "CottonGloves" Name: "Cotton Gloves" Type: "IT_ARMOR" - Buy: 400 + Buy: 3000 Sell: 250 Weight: 60 Atk: 0 -- cgit v1.2.3-60-g2f50 From 58a443694ccd1f5330f0c9893f3ffae5ce1f1e63 Mon Sep 17 00:00:00 2001 From: Micksha Date: Sun, 21 Oct 2018 20:03:28 +0200 Subject: Add Items for Melinda: Fine Dress (dyeable), beer --- db/re/item_db.conf | 66 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 9 deletions(-) diff --git a/db/re/item_db.conf b/db/re/item_db.conf index a0bd9ce3..6d722276 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -1271,6 +1271,33 @@ item_db: ( doevent "#001-2-4-Book2::OnUse"; "> }, +{ + Id: 563 + AegisName: "Beer" + Name: "Beer" + Type: "IT_HEALING" + Buy: 250 + Sell: 50 + Weight: 50 + Job: { + All: true + } + Gender: "SEX_ANY" + Refine: false + ViewSprite: 563 + BindOnEquip: false + BuyingStore: true + Delay: 750 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + @min = 250; + @max = 450; + @delay = 8; + @type = 1; + doevent "rand_sc_heal::OnUse"; + "> +}, { Id: 700 AegisName: "SmallTentacles" @@ -2907,30 +2934,51 @@ item_db: ( }, { Id: 1308 - AegisName: "WarlordPlate" - Name: "Warlord Plate" + AegisName: "FineDress" + Name: "Fine Dress" Type: "IT_ARMOR" - Buy: 200000 - Sell: 18000 - Weight: 1500 + Buy: 12000 + Sell: 2600 + Weight: 240 Atk: 0 - Matk: -200 - Def: 450 + Matk: 170 + Def: 250 Range: 0 - Slots: 0 + Slots: 1 Job: { All: true } Gender: "SEX_ANY" Loc: "EQP_HEAD_MID" WeaponLv: 0 - EquipLv: 20 + EquipLv: 15 Refine: false ViewSprite: 1308 BindOnEquip: false BuyingStore: true Delay: 0 Sprite: 0 + AllowCards: { + id5003: 1 + id5004: 1 + id5005: 1 + id5006: 1 + id5007: 1 + id5008: 1 + id5009: 1 + id5010: 1 + id5011: 1 + id5012: 1 + id5013: 1 + id5014: 1 + id5015: 1 + id5016: 1 + id5017: 1 + id5018: 1 + id5019: 1 + id5020: 1 + id5021: 1 + } }, { Id: 1800 -- cgit v1.2.3-60-g2f50 From e0ed5b936ab01ab08babe8582586cb5a6a3bc656 Mon Sep 17 00:00:00 2001 From: Micksha Date: Mon, 22 Oct 2018 11:44:27 +0200 Subject: Add Melinda NPC, fix some issues on dying the Fine Dress, fix of Necklace pending --- db/constants.conf | 1 + db/re/item_db.conf | 18 +++++++++--------- maps/re/008-1-1.mcache | Bin 2001 -> 358 bytes npc/008-1-1/_import.txt | 1 - npc/008-1-1/_warps.txt | 3 --- npc/008-1/_warps.txt | 1 - npc/008-2-2/_import.txt | 1 + npc/008-2-2/melinda.txt | 22 ++++++++++++++++++++++ 8 files changed, 33 insertions(+), 14 deletions(-) delete mode 100644 npc/008-1-1/_warps.txt create mode 100644 npc/008-2-2/melinda.txt diff --git a/db/constants.conf b/db/constants.conf index c29903db..7b38651b 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -4078,6 +4078,7 @@ constants_db: { NPC_DEVIS_ARTIS: 448 NPC_MOUBOO: 449 NPC_MONA: 450 + NPC_MELINDA: 451 NPC_TEST1: 800 NPC_PLAYER: 801 diff --git a/db/re/item_db.conf b/db/re/item_db.conf index 6d722276..7428287d 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -2656,8 +2656,8 @@ item_db: ( Buy: 10000 Sell: 400 Weight: 50 - Atk: 0 - Matk: 0 + Atk: 5 + Matk: 25 Def: 0 Range: 0 Slots: 1 @@ -2667,7 +2667,7 @@ item_db: ( Gender: "SEX_ANY" Loc: "EQP_ACC_L" WeaponLv: 0 - EquipLv: 1 + EquipLv: 10 Refine: false ViewSprite: 1000 BindOnEquip: false @@ -4484,7 +4484,7 @@ item_db: ( bonus bLuk, 2; bonus bDex, -1; "> - Loc: "EQP_ACC" + Loc: ["EQP_ACC_L"] }, { Id: 5029 @@ -4498,7 +4498,7 @@ item_db: ( bonus bStr, 2; bonus bAgi, -1; "> - Loc: "EQP_ACC" + Loc: ["EQP_ACC_L"] }, { Id: 5030 @@ -4512,7 +4512,7 @@ item_db: ( bonus bDex, 2; bonus bVit, -1; "> - Loc: "EQP_ACC" + Loc: ["EQP_ACC_L"] }, { Id: 5031 @@ -4526,7 +4526,7 @@ item_db: ( bonus bInt, 2; bonus bVit, -1; "> - Loc: "EQP_ACC" + Loc: ["EQP_ACC_L"] }, { Id: 5032 @@ -4540,7 +4540,7 @@ item_db: ( bonus bVit, 2; bonus bLuk, -1; "> - Loc: "EQP_ACC" + Loc: ["EQP_ACC_L"] }, { Id: 5033 @@ -4554,7 +4554,7 @@ item_db: ( bonus bAgi, 2; bonus bStr, -1; "> - Loc: "EQP_ACC" + Loc: ["EQP_ACC_L"] }, { Id: 6000 diff --git a/maps/re/008-1-1.mcache b/maps/re/008-1-1.mcache index 757d18ee..6365fa18 100644 Binary files a/maps/re/008-1-1.mcache and b/maps/re/008-1-1.mcache differ diff --git a/npc/008-1-1/_import.txt b/npc/008-1-1/_import.txt index ea6fd468..7063c99e 100644 --- a/npc/008-1-1/_import.txt +++ b/npc/008-1-1/_import.txt @@ -1,3 +1,2 @@ // Map 008-1-1: Woodland // This file is generated automatically. All manually added changes will be removed when running the Converter. -"npc/008-1-1/_warps.txt", diff --git a/npc/008-1-1/_warps.txt b/npc/008-1-1/_warps.txt deleted file mode 100644 index 8dc1e0b5..00000000 --- a/npc/008-1-1/_warps.txt +++ /dev/null @@ -1,3 +0,0 @@ -// This file is generated automatically. All manually added changes will be removed when running the Converter. -// Map 008-1-1: Woodland warps -008-1-1,247,85,0 warp #008-1-1_247_85 0,1,008-1,21,85 diff --git a/npc/008-1/_warps.txt b/npc/008-1/_warps.txt index 46e9891d..ab1728ed 100644 --- a/npc/008-1/_warps.txt +++ b/npc/008-1/_warps.txt @@ -24,4 +24,3 @@ 008-1,257,130,0 warp #008-1_257_130 0,0,008-2-28,25,31 008-1,233,131,0 warp #008-1_233_131 0,0,008-2-29,36,24 008-1,287,133,0 warp #008-1_287_133 0,0,008-2-30,52,39 -008-1,20,85,0 warp #008-1_20_85 0,1,008-1-1,246,85 diff --git a/npc/008-2-2/_import.txt b/npc/008-2-2/_import.txt index 5a896da0..f93e2ae3 100644 --- a/npc/008-2-2/_import.txt +++ b/npc/008-2-2/_import.txt @@ -2,3 +2,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-2/_warps.txt", "npc/008-2-2/mapflags.txt", +"npc/008-2-2/melinda.txt", diff --git a/npc/008-2-2/melinda.txt b/npc/008-2-2/melinda.txt new file mode 100644 index 00000000..445cfeae --- /dev/null +++ b/npc/008-2-2/melinda.txt @@ -0,0 +1,22 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Melinda, waitress in Hurns` Rusty Pick. + +008-2-2,40,29,0 script Melinda#008-2-2 NPC_MELINDA,1,1,{ + + speech + l("Oh hey!"), + l("I would like to serve you a beer or a sandwich, or even a shot (alcohol is bad, remember)."), + l("But I am afraid we need Tomminator to teach me this."), + lg("So, see you later."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} + -- cgit v1.2.3-60-g2f50 From 4edcc1650b45bd6287af5d94048273d65dd4ff99 Mon Sep 17 00:00:00 2001 From: Micksha Date: Fri, 5 Oct 2018 22:15:07 +0200 Subject: Trying to add some NPCs for Hurns --- db/constants.conf | 30 ++++ npc/001-2-33/_warps.txt | 4 +- npc/001-2-36/_warps.txt | 2 +- npc/001-2-4/_warps.txt | 2 +- npc/008-1/_import.txt | 2 + npc/008-1/hinnak.txt | 354 +++++++++++++++++++++++++++++++++++++++++++ npc/008-1/lumberjack.txt | 19 +++ npc/008-2-0/_import.txt | 1 + npc/008-2-0/celestia.txt | 20 +++ npc/008-2-1/_import.txt | 4 + npc/008-2-1/generalstore.txt | 20 +++ npc/008-2-1/inspector.txt | 20 +++ npc/008-2-1/richard.txt | 20 +++ npc/008-2-1/selim.txt | 19 +++ npc/008-2-10/_import.txt | 1 + npc/008-2-10/airlia.txt | 20 +++ 16 files changed, 534 insertions(+), 4 deletions(-) create mode 100644 npc/008-1/hinnak.txt create mode 100644 npc/008-1/lumberjack.txt create mode 100644 npc/008-2-0/celestia.txt create mode 100644 npc/008-2-1/generalstore.txt create mode 100644 npc/008-2-1/inspector.txt create mode 100644 npc/008-2-1/richard.txt create mode 100644 npc/008-2-1/selim.txt create mode 100644 npc/008-2-10/airlia.txt diff --git a/db/constants.conf b/db/constants.conf index 7b38651b..f7f4feaf 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -4028,6 +4028,33 @@ constants_db: { NPC_OSCAR: 145 NPC_SHOP_BAG_TEST: 146 NPC_RED: 147 + NPC_KOGA: 148 + NPC_OLD_LADY: 149 + NPC_ARKIM: 150 + NPC_YOUNG_MAN_APPRENTICE: 151 + NPC_YOUNG_MAN_KFAHR: 152 + NPC_INSPECTOR: 153 + NPC_SUSPICIOUS_TRADER: 154 + NPC_GENERAL STORE: 155 + NPC_TRAVELLER_DRUID: 156 + NPC_DARK_DRUID: 157 + NPC_AIRLIA: 158 + NPC_NICHOLAS: 159 + NPC_BLONDE_APPRENTICE: 160 + NPC_GIRL_MILLY: 161 + NPC_OLANA: 162 + NPC_DESERT_HAT_MAN 163 + NPC_YOUNG_MAN_IN_PINK: 164 + NPC_WAITRESS_LEGACY: 165 + NPC_WIZARD: 166 + NPC_LORA_TAY: 167 + NPC_DOCTOR_LEGACY: 168 + NPC_BOY_MIKE: 169 + NPC_CELESTIA: 170 + NPC_GUMI_THE_DYER: 171 + NPC_DIMOND: 172 + NPC_CHEF_LEGACY: 173 + NPC_DIMONDS_WAITRESS: 174 NPC_CONFUSED_TREE: 400 NPC_ALIGE: 401 @@ -4079,6 +4106,9 @@ constants_db: { NPC_MOUBOO: 449 NPC_MONA: 450 NPC_MELINDA: 451 + NPC_LUMBERJACK: 452 + NPC_HINNAK: 453 + NPC_RICHARD_LEGACY: 454 NPC_TEST1: 800 NPC_PLAYER: 801 diff --git a/npc/001-2-33/_warps.txt b/npc/001-2-33/_warps.txt index 73adf059..2b27d09e 100644 --- a/npc/001-2-33/_warps.txt +++ b/npc/001-2-33/_warps.txt @@ -46,8 +46,8 @@ OnInit: doorInit; } -001-2-33,45,30,0 warp #001-2-33_45_30 0,0,001-2-38,24,28 -001-2-33,23,30,0 warp #001-2-33_23_30 0,0,001-2-37,36,28 +001-2-33,45,28,0 warp #001-2-33_45_28 0,0,001-2-38,24,28 +001-2-33,23,28,0 warp #001-2-33_23_28 0,0,001-2-37,36,28 001-2-33,25,40,0 warp #001-2-33_25_40 2,0,001-2-40,27,46 001-2-33,43,40,0 warp #001-2-33_43_40 2,0,001-2-40,45,46 001-2-33,34,46,0 warp #001-2-33_34_46 0,0,001-1,57,42 diff --git a/npc/001-2-36/_warps.txt b/npc/001-2-36/_warps.txt index 530050a7..389a06e4 100644 --- a/npc/001-2-36/_warps.txt +++ b/npc/001-2-36/_warps.txt @@ -1,3 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 001-2-36: unnamed warps -001-2-36,37,30,0 warp #001-2-36_37_30 0,0,001-2-34,24,29 +001-2-36,37,29,0 warp #001-2-36_37_29 0,0,001-2-34,24,29 diff --git a/npc/001-2-4/_warps.txt b/npc/001-2-4/_warps.txt index 73e39877..af130c27 100644 --- a/npc/001-2-4/_warps.txt +++ b/npc/001-2-4/_warps.txt @@ -1,7 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 001-2-4: Library warps 001-2-4,48,41,0 warp #001-2-4_48_41 0,0,001-1,51,81 -001-2-4,57,27,0 warp #001-2-4_57_27 3,0,001-2-6,57,36 +001-2-4,57,26,0 warp #001-2-4_57_26 3,0,001-2-6,57,36 001-2-4,52,27,0 script #001-2-4_52_27_h NPC_HIDDEN,0,0,{ OnTouch: warp "001-2-5", 28, 37; diff --git a/npc/008-1/_import.txt b/npc/008-1/_import.txt index b7797bf0..444d8d9f 100644 --- a/npc/008-1/_import.txt +++ b/npc/008-1/_import.txt @@ -4,5 +4,7 @@ "npc/008-1/_warps.txt", "npc/008-1/confused-tree.txt", "npc/008-1/doors.txt", +"npc/008-1/hinnak.txt", +"npc/008-1/lumberjack.txt", "npc/008-1/mapflags.txt", "npc/008-1/wateranimation.txt", diff --git a/npc/008-1/hinnak.txt b/npc/008-1/hinnak.txt new file mode 100644 index 00000000..9fbcb959 --- /dev/null +++ b/npc/008-1/hinnak.txt @@ -0,0 +1,354 @@ +// Evol scripts. +// Author: +// gumi, Micksha +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - hinnak asked for help +// [1] 3 - helped hinnak +// [2] kill counter +// Description: + +// Hinnak needs help to get rid of the same stuff than ever. + +008-1,270,74,0 script Hinnak#008-1 NPC_HINNAK,{ + + if (BaseLevel < .min_level) + { + npctalk3 generic(1 | 16 | 64); + end; + } + + function hinn_new_player + { + if(getequipid(EQI_HEAD_TOP) == .bad_hat) + { + narrator 4, + l("The farmer lunges at you with a farming implement."); + heal -50, 0; + + selectd + l("I'm out of here."), + l("Whoa, what are you doing?"); + + if (@menu == 1) + { + return; + } + + speech 4 | 1, + l("Sorry, you look like a pinkie."), + l("They've been destroying my fields, and I guess I got a bit worked up."); + } + + else + { + speech 4, + l("Argh!"), + l("I hate them!"), + l("I @#$% hate them!"), + l("I @#$% hate these @#$% pinkies!"); + + selectd + l("You need some anger control therapy."), + l("Why do you hate them?"); + + if (@menu == 1) + { + return; + } + + speech 4 | 1, + l("These @#$% beasts are jumping around in my fields destroying all my harvest."), + l("But they are too fast."), + l("I can't catch them."); + } + + selectd + l("Want me to help you?"); + + speech 4 | 1, + l("Yes, you look quite fast."), + l("Maybe you can catch some of them."), + l("That will pay them a lesson."), + l("Slay some of them and bring me %d of their antennae.", .drop_count); + + setq .quest, 2, 0; + + selectd + l("How much is this worth to you?"); + + speech 1, + l("Well, I can't offer you much."), + l("But I got an old scythe laying around."), + l("Maybe you can use it as a weapon."); + + close; + } + + function hinn_help + { + if (getequipid(EQI_HEAD_TOP) == .bad_hat) + { + narrator 4, + l("The farmer glares at your hat."); + } + + speech 4, + l("Have you got the %d antennae?", .drop_count); + + selectd + l("Not yet, but I am working on it."), + rif(countitem(.monster_drop) >= .drop_count, l("Sure, here they are!")); + + if (@menu == 1) + { + return; + } + + if (getq2(.quest) < .kill_count) + { + speech 1, + l("Don't try to fool me!"), + l("I know you didn't kill them yourself!"), + l("Kill at least %d pinkies and come back.", .kill_count); + close; + } + + speech 1, + l("Thank you very much"), + l("As promised, here's my old scythe."), + l("Maybe you can use it as a weapon."), + l("It is a bit cumbersome but its strikes are deadly."); + + if (countitem(.monster_drop) >= .drop_count) + { + delitem .monster_drop, .drop_count; + getitem .reward_item, 1; + Zeny += .reward_money; + //getexp .reward_exp, 0; + setq .quest, 3; + } + close; + } + + function hinn_thanks + { + if (getequipid(EQI_HEAD_TOP) == .bad_hat) + { + speech 4, + l("That better be a trophy on your head."); + + selectd + l("It is."); + + speech 4 | 1, + l("Good then."), + l("Thanks for your help with the pinkies."); + } + + else + { + speech 4, + l("Good to see you again."), + l("Thanks again for helping me with the pinkies!"); + } + + selectd + l("Sure, any time!"), + l("Anything else you want me to do?"), + l("You're welcome. Bye!"); + + if (@menu == 3) + { + return; + } + + speech 4 | 1, + l("Actually, it's been a long day."), + l("If it's no trouble, could you get me a %s?", + getitemlink(.drink_item)); + + selectd + rif(countitem(.drink_item) >= 1, l("Here you are.")), + l("Sure, I'll go get one. Bye!"), + l("You shouldn't drink while working!"); + + do + { + switch (@menu) + { + case 2: return; + case 3: + speech 1, + l("Well, I'm done for the day, and I'm quite old enough to decide when I can have a %s, thank you!", + getitemname(.drink_item)); + selectd + rif(countitem(.drink_item) >= 1, l("Sorry... here you are.")), + l("I don't have any."); + break; + default: + if (countitem(.drink_item) < 1) + { + return; + } + delitem .drink_item, 1; + + narrator 4 | 8 | 2 | 1, + l("%s takes a sip.", .name$); + + speech 4, + l("Aaah!"), + l("Nothing like a well-deserved %s after a long day of tending the crops!", + getitemname(.drink_item)), + l("Thanks, that was very kind of you!"); + + narrator 4 | 8 | 1 | 2, + l("He takes another sip."); + + speech 4, + l("Thanks!"), + l("You know, I had the strangest thing happen to me."), + l("I had this patch of ground that was really clumpy; lots of clay, you see."), + l("Right over there."), + // TODO: move cam to the spot + l("Looks much better now, doesn't it?"), + // TODO: restore cam + l("But how I got there is kind of scary..."), + l("I'd been trying to break it up for a while, but that kind of work is a pain."), + l("So my wife said that I should go and see the witch, just in case she knows something."), + l("And sure enough I ask the witch, and she has a look at it."), + l("“Nothing I can do”, she says, “but I can ask a friend”."), + l("So the next day another witch shows up."), + l("Gorgeous woman, but when she looked at me, the scares went scuttling down my spine..."), + l("First thing she asked was if I'm a farmer."), + l("Said her friend had told her that I needed help."), + l("I show her what the problem is, and she tells me to go inside and wait."); + + narrator 4 | 8 | 1 | 2, + l("%s drains his mug in one long sip, then hesitates.", .name$); + + speech 4, + l("So I go inside."), + l("I'm barely in when it starts raining outside, pouring cats and mouboos!"), + l("Not so weird, perhaps, except that it was been bright and sunny just a second before!"), + l("So I rush out, my wife telling me to leave the witch alone, and I see her standing there in the middle of the rain..."), + l("None of the raindrops touched her, as if they were afraid!"), + l("Then she yells out some gobbledygook word, and out of the ground there comes a swarm of maggots, crawling and digging and climbing over each other's backs..."), + // XXX: maybe here insert a reference to SUSAN? + l("And then she turns to me!"), + l("Seeing her gaze, for a moment there I thought she would turn me into a pinkie, for sure..."), + l("But all she says is, “had you stayed inside, you wouldn't be wet now”."); + + selectd + l("Hahaha!"), + l("Whoah, scary..."), + l("What was that gobbledygook word?"), + l("I better go now. Bye."); + + switch (@menu) + { + case 1: + speech 1, + l("Yeah, funny now..."), + l("But you should've seen that gaze!"), + l("Ah, well, never mind."); + close; + case 2: + speech 1, + l("Yeah, you could say that..."); + close; + case 3: + speech 1, + l("Oh, I can't be sure..."), + l("But something like “Nanaj princino”, I think."); // this is "Dwarven Princess" translated to Esperanto + close; + } + return; + } + } while(true); + } + + // OnTalk: + + if (getq(.quest_inspector) == 11) + { + selectd + l("Did you see anyone in a mask come by here at night?"), + l("Did you see anyone with a large satchel come by here at night?"), + l("Hello."); + + switch (@menu) + { + case 1: + speech + l("No."), + l("It tends to be too dark to see a mask."); + close; + + case 2: + speech + l("Yes, I saw someone with a large sack on their back go to the mining camp."); + close; + } + } + + switch (getq(.quest)) + { + case 0: + case 1: hinn_new_player; break; + case 2: hinn_help; break; + default: hinn_thanks; + } + + closeclientdialog(); + close; + +OnNPCKillEvent: + // XXX: maybe have a OnTakeScript on the pinky antena item so we count pickups instead of kills + if (killedrid == .monster_id && getq(.quest) == 2 && + getq2(.quest) < .kill_count && strcharinfo(PC_MAP) == .map$) + { + setq .quest, 2, getq2(.quest) + 1; + } + end; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq .quest, 1; // allow the player to do the quest + dispbottom l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 15; // min level to do the quest + .monster_id = Fluffy; // monster to kill // FIXME: change this when we have pinkies + .monster_drop = FluffyFur; // monster drop to collect // FIXME: change this when we have pinkies + .drop_count = 10; // amount of that drop needed + .kill_count = 10; // min number of kills + .reward_item = WoodenSword; // reward item // FIXME: change this when we have he Scythe + .reward_money = 0; // reward money + .reward_exp = 0; // reward exp + .bad_hat = BrimmedFlowerHat; // hinnak attacks you when you wear this hat // FIXME: make this pinky hat when we get it + .drink_item = PumpkishJuice; // the item hinnak asks to drink // FIXME: make this beer when we have it + + .quest = HurnscaldQuests_Hinnak; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} + diff --git a/npc/008-1/lumberjack.txt b/npc/008-1/lumberjack.txt new file mode 100644 index 00000000..46039968 --- /dev/null +++ b/npc/008-1/lumberjack.txt @@ -0,0 +1,19 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The Legendary Lumberjack. + +001-1,241,116,0 script Lumberjack NPC_LUMBERJACK,{ + speech + l("Oh hey!"), + lg("If you feel bored or anxious, you can always pixel an axe. Wait, what does that even mean?"); + l("Anyhow, it's better than running around in circles doing nothing."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-0/_import.txt b/npc/008-2-0/_import.txt index f2ecc3b8..2cd1023b 100644 --- a/npc/008-2-0/_import.txt +++ b/npc/008-2-0/_import.txt @@ -2,4 +2,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-0/_savepoints.txt", "npc/008-2-0/_warps.txt", +"npc/008-2-0/celestia.txt", "npc/008-2-0/mapflags.txt", diff --git a/npc/008-2-0/celestia.txt b/npc/008-2-0/celestia.txt new file mode 100644 index 00000000..50d189a7 --- /dev/null +++ b/npc/008-2-0/celestia.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Our beloved Princess Celestia. +// THIS IS A PLACEHOLDER! + +008-2-0,38,35,0 script Celestia NPC_CELESTIA,{ + speech + l("Hi!"), + lg("You may remember me, I am Celestia."); + l("Take a cup of tea until something happens here."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-2-1/_import.txt b/npc/008-2-1/_import.txt index 1e5137a7..06ba6d3b 100644 --- a/npc/008-2-1/_import.txt +++ b/npc/008-2-1/_import.txt @@ -2,4 +2,8 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-1/_savepoints.txt", "npc/008-2-1/_warps.txt", +"npc/008-2-1/generalstore.txt", +"npc/008-2-1/inspector.txt", "npc/008-2-1/mapflags.txt", +"npc/008-2-1/richard.txt", +"npc/008-2-1/selim.txt", diff --git a/npc/008-2-1/generalstore.txt b/npc/008-2-1/generalstore.txt new file mode 100644 index 00000000..ac409800 --- /dev/null +++ b/npc/008-2-1/generalstore.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// General Store. +// THIS IS A PLACEHOLDER! + +008-1,38,35,0 script Generalstore#008-1 NPC_GENERAL_STORE,{ + speech + l("Hi!"), + lg("My name is General Store, they still call me this although I left the army a few years ago."); + l("I have nothing to sell, come back later."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-1/inspector.txt b/npc/008-2-1/inspector.txt new file mode 100644 index 00000000..62157207 --- /dev/null +++ b/npc/008-2-1/inspector.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The Inspector not willing to do his job. +// THIS IS A PLACEHOLDER! + +008-1,30,34,0 script Inspector#008-1 NPC_INSPECTOR,{ + speech + l("Oh hey!"), + lg("Got a beer for me? No? Then I am too busy for your stupid problems."); + l("Go away, and bring a beer next time you pass by."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-1/richard.txt b/npc/008-2-1/richard.txt new file mode 100644 index 00000000..f71f52d0 --- /dev/null +++ b/npc/008-2-1/richard.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Richard the Hurns storage guy. +// THIS IS A PLACEHOLDER! + +008-1,26,35,0 script Richard#008-1 NPC_RICHARD_LEGACY,{ + speech + l("Oh hey!"), + lg("I was supposed to act as storagekeeper, but I forgot my key."); + l("Come back later, perhaps I can find it."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-1/selim.txt b/npc/008-2-1/selim.txt new file mode 100644 index 00000000..c578f6cd --- /dev/null +++ b/npc/008-2-1/selim.txt @@ -0,0 +1,19 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Selim the Dyer. +// THIS IS A PLACEHOLDER! + +008-1,38,40,0 script Selim#008-1 NPC_GUMI_THE_DYER,{ + speech + l("Oh hey!"), + lg("Good you are here, you could be handy for me right now."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-10/_import.txt b/npc/008-2-10/_import.txt index 994726eb..2dd9ec77 100644 --- a/npc/008-2-10/_import.txt +++ b/npc/008-2-10/_import.txt @@ -1,4 +1,5 @@ // Map 008-2-10: Hurnscald City Hall // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-10/_warps.txt", +"npc/008-2-10/airlia.txt", "npc/008-2-10/mapflags.txt", diff --git a/npc/008-2-10/airlia.txt b/npc/008-2-10/airlia.txt new file mode 100644 index 00000000..d300b52a --- /dev/null +++ b/npc/008-2-10/airlia.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Airlia, the girl in the townhall. +// THIS IS A PLACEHOLDER! + +008-2-10,41,29,0 script Airlia NPC_AIRLIA,{ + speech + l("Hi!"), + lg("Did you visit the graveyard already? I havent met people coming back alive for ages."); + l("There must be cruel things going on."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} -- cgit v1.2.3-60-g2f50 From 499f90d26c284343d3af13922d06e1a6942e4c4a Mon Sep 17 00:00:00 2001 From: Micksha Date: Fri, 5 Oct 2018 22:49:18 +0200 Subject: fix synthax issues --- db/constants.conf | 4 ++-- npc/008-2-10/airlia.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/db/constants.conf b/db/constants.conf index f7f4feaf..b851ccf8 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -4035,7 +4035,7 @@ constants_db: { NPC_YOUNG_MAN_KFAHR: 152 NPC_INSPECTOR: 153 NPC_SUSPICIOUS_TRADER: 154 - NPC_GENERAL STORE: 155 + NPC_GENERAL_STORE: 155 NPC_TRAVELLER_DRUID: 156 NPC_DARK_DRUID: 157 NPC_AIRLIA: 158 @@ -4043,7 +4043,7 @@ constants_db: { NPC_BLONDE_APPRENTICE: 160 NPC_GIRL_MILLY: 161 NPC_OLANA: 162 - NPC_DESERT_HAT_MAN 163 + NPC_DESERT_HAT_MAN: 163 NPC_YOUNG_MAN_IN_PINK: 164 NPC_WAITRESS_LEGACY: 165 NPC_WIZARD: 166 diff --git a/npc/008-2-10/airlia.txt b/npc/008-2-10/airlia.txt index d300b52a..fa16659b 100644 --- a/npc/008-2-10/airlia.txt +++ b/npc/008-2-10/airlia.txt @@ -5,8 +5,8 @@ // Airlia, the girl in the townhall. // THIS IS A PLACEHOLDER! -008-2-10,41,29,0 script Airlia NPC_AIRLIA,{ - speech +008-2-10,41,29,0 script Airlia NPC_AIRLIA,{ + speech l("Hi!"), lg("Did you visit the graveyard already? I havent met people coming back alive for ages."); l("There must be cruel things going on."); -- cgit v1.2.3-60-g2f50 From 1438777d399697ae91cb139b21f1d6888e45d9f2 Mon Sep 17 00:00:00 2001 From: gumi Date: Thu, 13 Apr 2017 13:02:59 -0400 Subject: Hurnscald mega-commit --- db/quest_db.conf | 20 ++ npc/001-2-33/_mobs.txt | 0 npc/001-2-33/_savepoints.txt | 0 npc/008-1/doors.txt | 6 - npc/008-1/wateranimation.txt | 4 +- npc/commands/debug-quest.txt | 31 +- npc/functions/generic-text.txt | 120 +++++++ .../quest-debug/036-HurnscaldQuests_Hinnak.txt | 32 ++ .../quest-debug/037-HurnscaldQuests_Soup.txt | 32 ++ .../quest-debug/038-HurnscaldQuests_Inspector.txt | 41 +++ .../quest-debug/039-HurnscaldQuests_ForestBow.txt | 42 +++ .../040-HurnscaldQuests_WoodenShield.txt | 37 +++ npc/placeholder/alan.txt | 323 +++++++++++++++++++ npc/placeholder/bernard.txt | 230 ++++++++++++++ npc/placeholder/books.txt | 60 ++++ npc/placeholder/doctor.txt | 80 +++++ npc/placeholder/hinnak.txt | 352 +++++++++++++++++++++ npc/placeholder/inspector.txt | 190 +++++++++++ npc/placeholder/jack.txt | 313 ++++++++++++++++++ npc/placeholder/ledmitz.txt | 55 ++++ npc/placeholder/macgowan.txt | 21 ++ npc/placeholder/malek.txt | 65 ++++ npc/placeholder/mikhail.txt | 131 ++++++++ npc/placeholder/milly.txt | 109 +++++++ npc/placeholder/nicholas.txt | 26 ++ npc/placeholder/note.txt | 28 ++ npc/placeholder/nurse.txt | 101 ++++++ npc/placeholder/old-man.txt | 90 ++++++ npc/placeholder/old-woman.txt | 137 ++++++++ npc/placeholder/sabine.txt | 64 ++++ npc/placeholder/soul-menhir.txt | 58 ++++ npc/placeholder/troupe-leader.txt | 119 +++++++ npc/scripts.conf | 38 ++- 33 files changed, 2943 insertions(+), 12 deletions(-) create mode 100644 npc/001-2-33/_mobs.txt create mode 100644 npc/001-2-33/_savepoints.txt delete mode 100644 npc/008-1/doors.txt create mode 100644 npc/functions/generic-text.txt create mode 100644 npc/functions/quest-debug/036-HurnscaldQuests_Hinnak.txt create mode 100644 npc/functions/quest-debug/037-HurnscaldQuests_Soup.txt create mode 100644 npc/functions/quest-debug/038-HurnscaldQuests_Inspector.txt create mode 100644 npc/functions/quest-debug/039-HurnscaldQuests_ForestBow.txt create mode 100644 npc/functions/quest-debug/040-HurnscaldQuests_WoodenShield.txt create mode 100644 npc/placeholder/alan.txt create mode 100644 npc/placeholder/bernard.txt create mode 100644 npc/placeholder/books.txt create mode 100644 npc/placeholder/doctor.txt create mode 100644 npc/placeholder/hinnak.txt create mode 100644 npc/placeholder/inspector.txt create mode 100644 npc/placeholder/jack.txt create mode 100644 npc/placeholder/ledmitz.txt create mode 100644 npc/placeholder/macgowan.txt create mode 100644 npc/placeholder/malek.txt create mode 100644 npc/placeholder/mikhail.txt create mode 100644 npc/placeholder/milly.txt create mode 100644 npc/placeholder/nicholas.txt create mode 100644 npc/placeholder/note.txt create mode 100644 npc/placeholder/nurse.txt create mode 100644 npc/placeholder/old-man.txt create mode 100644 npc/placeholder/old-woman.txt create mode 100644 npc/placeholder/sabine.txt create mode 100644 npc/placeholder/soul-menhir.txt create mode 100644 npc/placeholder/troupe-leader.txt diff --git a/db/quest_db.conf b/db/quest_db.conf index 48d4129a..bc8acb82 100644 --- a/db/quest_db.conf +++ b/db/quest_db.conf @@ -161,6 +161,26 @@ quest_db: ( Id: 33 Name: "Artis_Legion_Progress" }, +{ + Id: 36 + Name: "HurnscaldQuests_Hinnak" +}, +{ + Id: 37 + Name: "HurnscaldQuests_Soup" +}, +{ + Id: 38 + Name: "HurnscaldQuests_Inspector" +}, +{ + Id: 39 + Name: "HurnscaldQuests_ForestBow" +}, +{ + Id: 40 + Name: "HurnscaldQuests_WoodenShield" +}, { Id: 1000 Name: "Test_testing1" diff --git a/npc/001-2-33/_mobs.txt b/npc/001-2-33/_mobs.txt new file mode 100644 index 00000000..e69de29b diff --git a/npc/001-2-33/_savepoints.txt b/npc/001-2-33/_savepoints.txt new file mode 100644 index 00000000..e69de29b diff --git a/npc/008-1/doors.txt b/npc/008-1/doors.txt deleted file mode 100644 index de8ed1d8..00000000 --- a/npc/008-1/doors.txt +++ /dev/null @@ -1,6 +0,0 @@ -008-1,104,27,0 script CottageDoor NPC_WARP,0,0,{ - end; - -OnTouch: - dispbottom(l("Locked.")); -} diff --git a/npc/008-1/wateranimation.txt b/npc/008-1/wateranimation.txt index 8b66f637..74ff5fd9 100644 --- a/npc/008-1/wateranimation.txt +++ b/npc/008-1/wateranimation.txt @@ -5,5 +5,5 @@ // Description: // Water animations, splash, fishes, etc... -008-1,139,32,0 duplicate(#water_animation0) #water_animation16 NPC_WATER_SPLASH -008-1,140,40,0 duplicate(#water_animation0) #water_animation17 NPC_WATER_SPLASH +008-1,311,97,0 duplicate(#water_animation0) #water_animation16 NPC_WATER_SPLASH +008-1,314,139,0 duplicate(#water_animation0) #water_animation17 NPC_WATER_SPLASH diff --git a/npc/commands/debug-quest.txt b/npc/commands/debug-quest.txt index 2c590a2d..468e5af2 100644 --- a/npc/commands/debug-quest.txt +++ b/npc/commands/debug-quest.txt @@ -90,6 +90,31 @@ function script GlobalQuestDebug { } while (1); } + function qDebugHurnscald { + do + { + clear; + setnpcdialogtitle l("Quest debug") + " - Hurnscald"; + mes l("This menu gives access to quest debug menus for @@ quests.", "Hurnscald"); + next; + mes l("Please select a quest:"); + + menuint + menuimage("actions/back", l("Go back")), -1, + "Hinnak", HurnscaldQuests_Hinnak, + l("Maggot soup"), HurnscaldQuests_Soup, + l("Inspector"), HurnscaldQuests_Inspector, + l("Forest bow"), HurnscaldQuests_ForestBow, + l("Wooden shield"), HurnscaldQuests_WoodenShield; + + switch (@menuret) + { + case -1: return; + default: callfunc "QuestDebug" + @menuret; + } + } while (1); + } + function qDebugGeneral { do { @@ -125,6 +150,7 @@ function script GlobalQuestDebug { select l("Prologue"), "Artis", + "Hurnscald", l("Other"), rif(getarg(0,0), menuimage("actions/back", l("Return to Debug menu"))); @@ -132,8 +158,9 @@ function script GlobalQuestDebug { { case 1: qDebugShip; break; case 2: qDebugArtis; break; - case 3: qDebugGeneral; break; - case 4: return; + case 3: qDebugHurnscald; break; + case 4: qDebugGeneral; break; + case 5: return; } } while (1); } diff --git a/npc/functions/generic-text.txt b/npc/functions/generic-text.txt new file mode 100644 index 00000000..ede6e954 --- /dev/null +++ b/npc/functions/generic-text.txt @@ -0,0 +1,120 @@ +// Evol functions. +// Authors: +// gumi +// Description: +// text register + +function script generic { + .@flags = getarg(0, 1); + + .@villager = (1 << 0); + .@old = (1 << 1); + .@kid = (1 << 2); + .@sailor = (1 << 3); + .@busy = (1 << 4); + .@tired = (1 << 5); + .@angry = (1 << 6); + .@legion = (1 << 7); + .@crazy = (1 << 8); + + if (.@flags == 0) + return l("I'm sorry, I can't talk right now."); + + if (.@flags & .@villager) + { + setarray(.@array$[.@count], + l("It is a sunny day, don't you think?"), + l("I just want to live my life in peace."), + l("Isn't this place pretty? I love hanging out here!")); + + .@count += 3; + } + + if (.@flags & .@old) + { + setarray(.@array$[.@count], + l("Come closer dear, I can't hear you."), + l("Hmm... where did I put it again?"), + l("I miss the good old days.")); + + .@count += 3; + } + + if (.@flags & .@kid) + { + setarray(.@array$[.@count], + l("Mommy doesn't want me to talk to strangers.")); + + .@count += 1; + } + + if (.@flags & .@sailor) + { + setarray(.@array$[.@count], + l("So finally someone has came to visit me?"), + l("A-hoy matey!")); + + .@count += 2; + } + + if (.@flags & .@busy) + { + setarray(.@array$[.@count], + l("Can't talk right now."), + l("Can't you see I'm busy?"), + l("Come back later."), + l("I'm a little busy right now.")); + + .@count += 4; + } + + if (.@flags & .@tired) + { + setarray(.@array$[.@count], + l("I had a long day, come back tomorrow."), + l("I need to rest."), + l("*snores*")); + + .@count += 3; + } + + if (.@flags & .@angry) + { + setarray(.@array$[.@count], + l("Go pester someone else."), + l("I don't feel like talking to you."), + l("Stop wasting my time."), + l("Go fly a kite"), + l("Not in the mood to chat."), + l("Give me some space."), + l("Can you please go away?")); + + .@count += 7; + } + + if (.@flags & .@legion) + { + setarray(.@array$[.@count], + l("My breath smells bad."), + l("Don't distract me, I have to stay alert."), + l("Can't talk right now, I'm on patrol duty."), + l("I can't stay here and talk all day. I have a job to do."), + l("Keep moving."), + l("So you think you're tough? A warrior must also be loyal and patient."), + l("Practice! There are no secrets to becoming a warrior."), + l("There is no honor in fighting a weak opponent.")); + + .@count += 8; + } + + if (.@flags & .@crazy) + { + setarray(.@array$[.@count], + l("Do I look like a tree? I feel like one."), + l("What're you looking at?!")); + + .@count += 2; + } + + return .@array$[rand(.@count)]; +} diff --git a/npc/functions/quest-debug/036-HurnscaldQuests_Hinnak.txt b/npc/functions/quest-debug/036-HurnscaldQuests_Hinnak.txt new file mode 100644 index 00000000..61dc294e --- /dev/null +++ b/npc/functions/quest-debug/036-HurnscaldQuests_Hinnak.txt @@ -0,0 +1,32 @@ +// Hinnak quest debug +// Author: +// gumi + +function script QuestDebug36 { + do + { + clear; + setnpcdialogtitle l("Quest debug"); + mes "HurnscaldQuests_Hinnak"; + mes "---"; + mes l("Quest state: @@, @@", + getq(HurnscaldQuests_Hinnak), + getq2(HurnscaldQuests_Hinnak)); + next; + + GenericQuestDebug HurnscaldQuests_Hinnak, + l("Cannot do the quest"), 0, + l("Can do the quest"), 1, + l("Hinnak asked for help"), 2, + l("Helped Hinnak"), 3; + + switch (@menuret) + { + case 0: + case 1: + case 2: setq HurnscaldQuests_Hinnak, getq(HurnscaldQuests_Hinnak), 0; break; + default: if (@menuret < 0) return; + } + + } while (1); +} diff --git a/npc/functions/quest-debug/037-HurnscaldQuests_Soup.txt b/npc/functions/quest-debug/037-HurnscaldQuests_Soup.txt new file mode 100644 index 00000000..43eba0d6 --- /dev/null +++ b/npc/functions/quest-debug/037-HurnscaldQuests_Soup.txt @@ -0,0 +1,32 @@ +// Mikhail & Bernard quest debug +// Author: +// gumi + +function script QuestDebug37 { + do + { + clear; + setnpcdialogtitle l("Quest debug"); + mes "HurnscaldQuests_Soup"; + mes "---"; + mes l("Quest state: @@", + getq(HurnscaldQuests_Soup)); + next; + + GenericQuestDebug HurnscaldQuests_Soup, + l("Cannot do the quest"), 0, + l("Can do the quest"), 1, + l("Bernard wants roasted maggot"), 2, + l("brought maggot"), 3, + l("Bernard wants maggot slime"), 4, + l("brought maggot slime"), 5, + l("Mikhail needs maggot slime"), 6, + l("brought maggot slime"), 7; + + if (@menuret < 0) + { + return; + } + + } while (1); +} diff --git a/npc/functions/quest-debug/038-HurnscaldQuests_Inspector.txt b/npc/functions/quest-debug/038-HurnscaldQuests_Inspector.txt new file mode 100644 index 00000000..053f085e --- /dev/null +++ b/npc/functions/quest-debug/038-HurnscaldQuests_Inspector.txt @@ -0,0 +1,41 @@ +// Inspector quest debug +// Author: +// gumi + +function script QuestDebug38 { + do + { + clear; + setnpcdialogtitle l("Quest debug"); + mes "HurnscaldQuests_Inspector"; + mes "---"; + mes l("Quest state: @@", + getq(HurnscaldQuests_Inspector)); + next; + + GenericQuestDebug HurnscaldQuests_Inspector, + l("Cannot do the quest"), 0, + l("Can do the quest"), 1, + l("Talked to Inspector (1)"), 2, + l("Talked to Old Woman (1)"), 3, + l("Talked to Old Woman (2)"), 4, + l("Talked to Inspector (2)"), 5, + l("Talked to Troupe Leader (1)"), 6, + l("Talked to Inspector (3)"), 7, + l("Talked to Old Man"), 8, + l("Talked to Old Woman (3)"), 9, + l("Talked to Inspector (4)"), 10, + l("Talked to Old Woman (4)"), 11, + l("Talked to Malek"), 12, + l("Searched the bookcase"), 13, + l("Talked to Inspector (5)"), 14, + l("Talked to Troupe Leader (2)"), 15, + l("Talked to Inspector (6)"), 16; + + if (@menuret < 0) + { + return; + } + + } while (1); +} diff --git a/npc/functions/quest-debug/039-HurnscaldQuests_ForestBow.txt b/npc/functions/quest-debug/039-HurnscaldQuests_ForestBow.txt new file mode 100644 index 00000000..c6a61a1b --- /dev/null +++ b/npc/functions/quest-debug/039-HurnscaldQuests_ForestBow.txt @@ -0,0 +1,42 @@ +// Jack Lumber quest debug +// Author: +// gumi + +function script QuestDebug39 { + do + { + clear; + setnpcdialogtitle l("Quest debug"); + mes "HurnscaldQuests_ForestBow"; + mes "---"; + mes l("Quest state: @@", getq(HurnscaldQuests_ForestBow)); + mes "---"; + mes l("Related quests:"); + mes "HurnscaldQuests_WoodenShield: " + getq(HurnscaldQuests_WoodenShield); + next; + + GenericQuestDebug HurnscaldQuests_ForestBow, + menuimage("actions/manage", l("Debug Wooden Shield")), -1, + l("Cannot do the quest"), 0, + l("Can do the quest"), 1, + l("Alan wants to ask Jack"), 2, + l("Jack explained problem"), 3, + l("Alan asks to find wood"), 4, + l("Found perfect wood"), 5, + l("Got the bow"), 6; + + switch (@menuret) + { + case -1: callfunc "QuestDebug40"; break; + case 0: + case 1: + case 2: + case 3: + case 4: setq(HurnscaldQuests_WoodenShield, 0); break; + case 5: + case 6: setq(HurnscaldQuests_WoodenShield, max(1, getq(HurnscaldQuests_WoodenShield))); break; + default: if (@menuret < 0) return; + } + + } while (1); +} diff --git a/npc/functions/quest-debug/040-HurnscaldQuests_WoodenShield.txt b/npc/functions/quest-debug/040-HurnscaldQuests_WoodenShield.txt new file mode 100644 index 00000000..05d08130 --- /dev/null +++ b/npc/functions/quest-debug/040-HurnscaldQuests_WoodenShield.txt @@ -0,0 +1,37 @@ +// Jack Lumber quest debug +// Author: +// gumi + +function script QuestDebug40 { + do + { + clear; + setnpcdialogtitle l("Quest debug"); + mes "HurnscaldQuests_WoodenShield"; + mes "---"; + mes l("Quest state: @@", getq(HurnscaldQuests_WoodenShield)); + mes "---"; + mes l("Related quests:"); + mes "HurnscaldQuests_ForestBow: " + getq(HurnscaldQuests_ForestBow); + next; + + GenericQuestDebug HurnscaldQuests_WoodenShield, + menuimage("actions/manage", l("Debug Forest Bow")), -1, + l("Cannot do the quest"), 0, + l("Can do the quest"), 1, + l("Jack proposes shield"), 2, + l("Accepted the quest"), 3, + l("Got the shield"), 4; + + switch (@menuret) + { + case -1: callfunc "QuestDebug39"; break; + case 1: + case 2: + case 3: + case 4: setq(HurnscaldQuests_ForestBow, max(5, getq(HurnscaldQuests_ForestBow))); break; + default: if (@menuret < 0) return; + } + + } while (1); +} diff --git a/npc/placeholder/alan.txt b/npc/placeholder/alan.txt new file mode 100644 index 00000000..8e8e42b7 --- /dev/null +++ b/npc/placeholder/alan.txt @@ -0,0 +1,323 @@ +// Evol scripts. +// Author: +// gumi +// Quest states (forest bow): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - alan wants to ask jack +// [1] 3 - jack explained problem +// [1] 4 - alan asks to find wood +// [1] 5 - found perfect wood +// [1] 6 - got the bow +// [2] unused +// [3] unused +// [t] unused +// Quest states (wooden shield): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - jack proposes shield +// [1] 3 - player accepted quest +// [1] 4 - got the shield +// [2] unused +// [3] unused +// [t] unused +// Description: +// Jack Lumber, the handsome lumberjack + +008-2-6,31,26,0 script Alan NPC_HUMAN_M_ARTIS,{ + + function bow_intro { + speech(4, + l("When you want to buy something then please speak to my apprentice."), + l("I am only doing special requests.")); + + selectd( + l("OK, thanks."), + rif(BaseLevel >= .min_level, l("Can you make me a really good bow?")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 3: speech(l("No.")); close; + } + + speech(4, + l("You mean like one of my legendary forest bows?")); + + selectd( + l("Yes, that would be nice.")); + + speech(4, + l("Sorry, I am not making these anymore.")); + + selectd( + l("Oh, too bad."), + l("What? Why not?")); + + if (@menu == 1) { + closeclientdialog(); + close; + } + + speech(4, + l("The problem is that I am short of material."), + l("My forestbows are not made of regular wood, you know."), + l("They are made of special living wood."), + l("And only the best logs of living wood are good enough for them."), + l("I used to get these logs from Jack, the handsome lumberjack."), + l("But the last time I asked him for a new delivery he said that he would never again get any for me.")); + + selectd( + l("Too bad."), + l("Did you ask him why?")); + + if (@menu == 1) { + closeclientdialog(); + close; + } + + speech(4, + l("Sure I did."), + l("But he just told me to leave him alone."), + l("Maybe you could ask him what's wrong?")); + + selectd( + l("OK, I'll ask him."), + l("I am sure he got his reasons.")); + + setq(.quest_bow, 2); + closeclientdialog(); + close; + } + + function bow_reminder { + if (getq(.quest_inspector) == 2) + { + speech(4, + l("Did you already ask Jack why he won't deliver me any more living wood?")); + + selectd( + l("Have you seen anything strange recently that might be connected to the robberies?")); + + speech(l("No.")); + close; + } + + npctalk3(l("Did you already ask Jack why he won't deliver me any more living wood?")); + end; + } + + function bow_explain { + speech(4, + l("Did you already ask Jack why he won't deliver me any more living wood?")); + + selectd( + l("Yes, I did. He said that the trees turned into dangerous monsters."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + if (@menu != 1) + { + speech(l("No.")); + close; + } + + speech( + l("Oh, that's really bad news."), + l("Maybe you can do his job?"), + l("If you kill some of these tree monsters and bring me their wood I could take a look at them."), + l("Maybe you will find a piece of wood that is strong enough to become one of my forest bows.")); + + close2; + setq(.quest_bow, 4); + end; + } + + function bow_make { + speech(4, + l("I can make you a really nice forest bow out of this."), + l("I just need %s E for material and work time.", + format_number(.req_esp))); + + selectd( + l("%s??? What a ripoff!", format_number(.req_esp)), + rif(Zeny >= .req_esp, l("Sure, here you go!")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: speech(l("Fine, I'll just hold on to this log should you ever change your mind.")); close; + case 3: speech(l("No.")); close; + } + + // XXX: maybe here we could make the player wait real-world hours for Alan to finish? + + if (checkweight(.reward_item, 1) != true) + { + speech( + l("It seems you can't carry the bow right now."), + l("Go clean up your inventory and come back.")); + close; + } + + if (Zeny < .req_esp) + close; // double-check + + setq(.quest_bow, 6); + Zeny -= .req_esp; + getitem(.reward_item, 1); + getexp(.reward_exp, 0); + + speech( + l("Here you go - have fun with it.")); + close; + } + + function bow_check_wood { + speech(4, + l("How is the hunt going?"), + l("Did you bring me any wood?")); + + selectd( + l("No, sorry."), + rif(countitem(.req_item) >= 1, l("Here, take a look!")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 3: speech(l("No.")); close; + } + + .@first = true; + + do { + if (countitem(.req_item) < 1) + break; + + if (.@first == false) + { + narrator(4, + l("You hand him another log.")); + } + + delitem(.req_item, 1); + .@first = false; + + speech(4, + l("Hmmm... looks ok, but is it strong enough?")); + + narrator(4, + l("Alan bends the log over his knee.")); + + if (rand(.success_rate) == 0) + { + narrator(4 | 8, + l("Alan tries as hard as he can but the log won't bend.")); + + speech(4, + l("Aaah!"), + l("Yes!"), + l("That is a really fine piece of wood you brought me."), + l("It will make an excellent bow!")); + + setq(.quest_bow, 5); + setq(.quest_shield, 1); + + narrator(4, + l("He proceeds to further scrutinize the log.")); + + bow_make; + end; + } + + narrator(4 | 8, + l("The log breaks with a loud crack.")); + + speech(4, + l("Sorry, this log was too weak for one of my forest bows."), + l("Now it is junk."), + l("Do you wish to try again?")); + + selectd( + l("Sure, here you go."), + l("Hey! Stop breaking my stuff!")); + + if (@menu != 1) { + closeclientdialog(); + close; + } + + } while (true); + + speech(l("It seems you have no wood left.")); + close; + } + + function bow_done { + speech(4, + l("I hope you are satisfied with your forest bow."), + l("It is one of my best works.")); + + selectd( + l("I am!"), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 2: speech(l("No.")); close; + default: closeclientdialog(); close; + } + } + + // OnTalk: + switch (getq(.quest_bow)) + { + case 0: + case 1: bow_intro; break; + case 2: bow_reminder; break; + case 3: bow_explain; break; + case 4: bow_check_wood; break; + case 5: bow_make; break; + default: bow_done; break; + } + + closeclientdialog(); + close; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest_bow) < 1) + { + setq(.quest_bow, 1); // allow the player to do the quest + dispbottom(l("New quest available: %s (level %d+)", + getquestlink(.quest_bow), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 25; // min level to do the quest + + .req_item = RawLog; // item required to make the bow + .req_esp = 10000; // amount of Esperin required to make the bow + .reward_item = ForestBow; // quest reward (item) + .reward_exp = 0; // quest reward (exp) + .success_rate = 20; // one in X chances to get a perfect log + + .quest_bow = HurnscaldQuests_ForestBow; + .quest_shield = HurnscaldQuests_WoodenShield; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_bow; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/bernard.txt b/npc/placeholder/bernard.txt new file mode 100644 index 00000000..5c3f25ff --- /dev/null +++ b/npc/placeholder/bernard.txt @@ -0,0 +1,230 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - bernard wants roasted maggot +// [1] 3 - brought maggot +// [1] 4 - bernard wants maggot slime +// [1] 5 - brought maggot slime +// [1] 6 - mikhail needs maggot slime +// [1] 7 - brought maggot slime +// [2] unused +// [3] unused +// [t] unused +// Description: +// Bernard wants to make a maggot slime soup + +008-2-4,34,29,0 script Bernard NPC_HUMAN_M_ARTIS,{ + + if (BaseLevel < .min_level) + { + npctalk3 generic(16 | 32); + end; + } + + function soup_intro { + if (rand(2) == 1) + { + speech 4, + l("The fields are crawling with maggots."), + l("Where is Mikhail?"), + l("What is taking them so long?"), + l("Could I ask a favor of you?"); + } + else + { + speech 4, + l("The taste of maggots in soup is... unforgettable."), + l("They taste simply divine!"), + l("I sent someone to kill me some maggots and they have yet to return."), + l("Would you help me kill some?"); + } + + if (selectd(l("Yes."), l("No.")) == 2) + { + return; + } + + if (rand(2) == 1) + { + speech 4, + l("Great!"), + l("I need a %s for my soup.", getitemlink(.first_item)); + } + else + { + speech 4, + l("Bring me a %s.", getitemlink(.first_item)), + l("I'll give you something if you do."); + } + + speech 8, + l("Please bring it to me!"); + + setq .quest, 2; + close; + } + + function soup_reminder_roasted { + speech + l("Oh, please hurry and bring me a %s.", getitemlink(.first_item)), + l("I'm yearning for maggot soup!"); + close; + } + + function soup_no_room { + speech 1 | 8, + "...", + l("It seems you don't have room for my reward."), + l("I'll wait until you do."); + close; + } + + function soup_reward_roasted { + speech 4, + l("Oooh, perfect! It's perfect!"), + l("You brought me my %s!", getitemlink(.first_item)), + l("Here, have some %s for your troubles.", + getitemlink(.first_reward_item)); + + if (checkweight(.first_reward_item, .first_reward_amount) != true) + soup_no_room; + + if (countitem(.first_item) < 1) + close; + + delitem .first_item, 1; + getitem .first_reward_item, .first_reward_amount; + getexp .first_reward_exp, 0; + setq .quest, 3; + + speech 8, + l("Now let's see..."); + close; + } + + function soup_ask_slime { + speech + l("Thank you so much!"), + l("But... something is missing to make the soup creamy."), + l("I need %d %s for that.", + .second_item_qty, getitemlink(.second_item)), + l("Bring them to me, and I'll give you something nice."); + + setq .quest, 4; + close; + } + + function soup_reminder_slime { + speech + l("Please do hurry and bring me %d %s, so I can finish my soup!", + .second_item_qty, getitemlink(.second_item)); + close; + } + + function soup_reward_slime { + speech + l("Nice!"), + l("They're perfect, just perfect!"), + l("You brought me the %d %s!", + .second_item_qty, getitemlink(.second_item)), + l("Here, have some %s as reward.", + getitemlink(.second_reward_item)); + + if (checkweight(.second_reward_item, .second_reward_amount) != true) + soup_no_room; + + if (countitem(.second_item) < .second_item_qty) + close; + + delitem .second_item, .second_item_qty; + getitem .second_reward_item, .second_reward_amount; + getexp .second_reward_exp, 0; + setq .quest, 5; + + close; + } + + function soup_thanks_slime { + speech + l("I didn't mention it before, but I also put beer in my soup."), + l("I hope you like beer as much as I do, because, you see..."), + l("Beer is life!"); + close; + } + + function soup_thanks_mikhail { + speech + l("My help, Mikhail, finally returned with the slimes I needed."), + l("I wonder what took him so long?"); + close; + } + + + // OnTalk: + switch (getq(.quest)) + { + case 0: + case 1: soup_intro; break; + case 2: + if (countitem(.first_item) < 1) + soup_reminder_roasted; + else + soup_reward_roasted; + break; + case 3: soup_ask_slime; break; + case 4: + if (countitem(.second_item) < .second_item_qty) + soup_reminder_slime; + else + soup_reward_slime; + break; + case 5: + case 6: soup_thanks_slime; break; + default: soup_thanks_mikhail; + } + + closeclientdialog(); + close; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq .quest, 1; // allow the player to do the quest + dispbottom l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 10; // min level to do the quest + + .first_item = Aquada; // FIXE: change this when we have RoastedMaggot + .first_reward_item = Aquada; // reward item // FIXME: change this when we have CherryCake + .first_reward_amount = 5; + .first_reward_exp = 100; + + .second_item = Aquada; // FIXE: change this when we have MaggotSlime + .second_item_qty = 3; + .second_reward_item = Aquada; // reward item // FIXME: change this when we have Beer + .second_reward_amount = 3; + .second_reward_exp = 100; + + .quest = HurnscaldQuests_Soup; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/books.txt b/npc/placeholder/books.txt new file mode 100644 index 00000000..3407e0cd --- /dev/null +++ b/npc/placeholder/books.txt @@ -0,0 +1,60 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,247,40,0 script bookcase NPC_HUMAN_M_ARTIS,{ + + if (getq(.quest_inspector) != 12) + { + dispbottom(l("You see an ordinary bookcase.")); + end; + } + + narrator( + l("You see an ordinary bookcase."), + l("Looking over closely, you find a book that is upside down."), + l("The book has been hollowed out."), + l("Inside is a theater mask and a note that you cannot even begin to read.")); + + close2; + setq(.quest_inspector, 13); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .distance = 1; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/doctor.txt b/npc/placeholder/doctor.txt new file mode 100644 index 00000000..af36d1e2 --- /dev/null +++ b/npc/placeholder/doctor.txt @@ -0,0 +1,80 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-2-14,29,30,0 script Doctor NPC_HUMAN_M_ARTIS,{ + + speech(4, + l("Hello, can I help you?")); + + // TODO: check for AxeHat when we get it + // TODO: check for EyePatch when we get it + + selectd( + l("I think I am sick!"), + l("No, I feel fine."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange in town? Anything that might have to do with the robberies?"))); + + switch (@menu) + { + case 1: + narrator(4, + l("The doctor examines you briefly.")); + // TODO: check for poison or other status conditions currently in use + speech( + l("Nonsense!"), + l("You look fine and dandy to me."), + l("All you need is a bit more exercise and fresh fruit in your diet!")); + close; + case 2: + speech( + l("Then please stop wasting my precious time.")); + close; + case 3: + speech( + l("No, I haven't seen anything.")); + close; + } + + + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/hinnak.txt b/npc/placeholder/hinnak.txt new file mode 100644 index 00000000..f4937f4b --- /dev/null +++ b/npc/placeholder/hinnak.txt @@ -0,0 +1,352 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - hinnak asked for help +// [1] 3 - helped hinnak +// [2] kill counter +// Description: +// Hinnak needs help to get rid of {mobname} + +008-1,270,77,0 script Hinnak NPC_HUMAN_M_ARTIS,{ + + if (BaseLevel < .min_level) + { + npctalk3 generic(1 | 16 | 64); + end; + } + + function hinn_new_player + { + if(getequipid(EQI_HEAD_TOP) == .bad_hat) + { + narrator 4, + l("The farmer lunges at you with a farming implement."); + heal -50, 0; + + selectd + l("I'm out of here."), + l("Whoa, what are you doing?"); + + if (@menu == 1) + { + return; + } + + speech 4 | 1, + l("Sorry, you look like a pinkie."), + l("They've been destroying my fields, and I guess I got a bit worked up."); + } + + else + { + speech 4, + l("Argh!"), + l("I hate them!"), + l("I @#$% hate them!"), + l("I @#$% hate these @#$% pinkies!"); + + selectd + l("You need some anger control therapy."), + l("Why do you hate them?"); + + if (@menu == 1) + { + return; + } + + speech 4 | 1, + l("These @#$% beasts are jumping around in my fields destroying all my harvest."), + l("But they are too fast."), + l("I can't catch them."); + } + + selectd + l("Want me to help you?"); + + speech 4 | 1, + l("Yes, you look quite fast."), + l("Maybe you can catch some of them."), + l("That will pay them a lesson."), + l("Slay some of them and bring me %d of their antennae.", .drop_count); + + setq .quest, 2, 0; + + selectd + l("How much is this worth to you?"); + + speech 1, + l("Well, I can't offer you much."), + l("But I got an old scythe laying around."), + l("Maybe you can use it as a weapon."); + + close; + } + + function hinn_help + { + if (getequipid(EQI_HEAD_TOP) == .bad_hat) + { + narrator 4, + l("The farmer glares at your hat."); + } + + speech 4, + l("Have you got the %d antennae?", .drop_count); + + selectd + l("Not yet, but I am working on it."), + rif(countitem(.monster_drop) >= .drop_count, l("Sure, here they are!")); + + if (@menu == 1) + { + return; + } + + if (getq2(.quest) < .kill_count) + { + speech 1, + l("Don't try to fool me!"), + l("I know you didn't kill them yourself!"), + l("Kill at least %d pinkies and come back.", .kill_count); + close; + } + + speech 1, + l("Thank you very much"), + l("As promised, here's my old scythe."), + l("Maybe you can use it as a weapon."), + l("It is a bit cumbersome but its strikes are deadly."); + + if (countitem(.monster_drop) >= .drop_count) + { + delitem .monster_drop, .drop_count; + getitem .reward_item, 1; + Zeny += .reward_money; + //getexp .reward_exp, 0; + setq .quest, 3; + } + close; + } + + function hinn_thanks + { + if (getequipid(EQI_HEAD_TOP) == .bad_hat) + { + speech 4, + l("That better be a trophy on your head."); + + selectd + l("It is."); + + speech 4 | 1, + l("Good then."), + l("Thanks for your help with the pinkies."); + } + + else + { + speech 4, + l("Good to see you again."), + l("Thanks again for helping me with the pinkies!"); + } + + selectd + l("Sure, any time!"), + l("Anything else you want me to do?"), + l("You're welcome. Bye!"); + + if (@menu == 3) + { + return; + } + + speech 4 | 1, + l("Actually, it's been a long day."), + l("If it's no trouble, could you get me a %s?", + getitemlink(.drink_item)); + + selectd + rif(countitem(.drink_item) >= 1, l("Here you are.")), + l("Sure, I'll go get one. Bye!"), + l("You shouldn't drink while working!"); + + do + { + switch (@menu) + { + case 2: return; + case 3: + speech 1, + l("Well, I'm done for the day, and I'm quite old enough to decide when I can have a %s, thank you!", + getitemname(.drink_item)); + selectd + rif(countitem(.drink_item) >= 1, l("Sorry... here you are.")), + l("I don't have any."); + break; + default: + if (countitem(.drink_item) < 1) + { + return; + } + delitem .drink_item, 1; + + narrator 4 | 8 | 2 | 1, + l("%s takes a sip.", .name$); + + speech 4, + l("Aaah!"), + l("Nothing like a well-deserved %s after a long day of tending the crops!", + getitemname(.drink_item)), + l("Thanks, that was very kind of you!"); + + narrator 4 | 8 | 1 | 2, + l("He takes another sip."); + + speech 4, + l("Thanks!"), + l("You know, I had the strangest thing happen to me."), + l("I had this patch of ground that was really clumpy; lots of clay, you see."), + l("Right over there."), + // TODO: move cam to the spot + l("Looks much better now, doesn't it?"), + // TODO: restore cam + l("But how I got there is kind of scary..."), + l("I'd been trying to break it up for a while, but that kind of work is a pain."), + l("So my wife said that I should go and see the witch, just in case she knows something."), + l("And sure enough I ask the witch, and she has a look at it."), + l("“Nothing I can do”, she says, “but I can ask a friend”."), + l("So the next day another witch shows up."), + l("Gorgeous woman, but when she looked at me, the scares went scuttling down my spine..."), + l("First thing she asked was if I'm a farmer."), + l("Said her friend had told her that I needed help."), + l("I show her what the problem is, and she tells me to go inside and wait."); + + narrator 4 | 8 | 1 | 2, + l("%s drains his mug in one long sip, then hesitates.", .name$); + + speech 4, + l("So I go inside."), + l("I'm barely in when it starts raining outside, pouring cats and mouboos!"), + l("Not so weird, perhaps, except that it was been bright and sunny just a second before!"), + l("So I rush out, my wife telling me to leave the witch alone, and I see her standing there in the middle of the rain..."), + l("None of the raindrops touched her, as if they were afraid!"), + l("Then she yells out some gobbledygook word, and out of the ground there comes a swarm of maggots, crawling and digging and climbing over each other's backs..."), + // XXX: maybe here insert a reference to SUSAN? + l("And then she turns to me!"), + l("Seeing her gaze, for a moment there I thought she would turn me into a pinkie, for sure..."), + l("But all she says is, “had you stayed inside, you wouldn't be wet now”."); + + selectd + l("Hahaha!"), + l("Whoah, scary..."), + l("What was that gobbledygook word?"), + l("I better go now. Bye."); + + switch (@menu) + { + case 1: + speech 1, + l("Yeah, funny now..."), + l("But you should've seen that gaze!"), + l("Ah, well, never mind."); + close; + case 2: + speech 1, + l("Yeah, you could say that..."); + close; + case 3: + speech 1, + l("Oh, I can't be sure..."), + l("But something like “Nanaj princino”, I think."); // this is "Dwarven Princess" translated to Esperanto + close; + } + return; + } + } while(true); + } + + // OnTalk: + + if (getq(.quest_inspector) == 11) + { + selectd + l("Did you see anyone in a mask come by here at night?"), + l("Did you see anyone with a large satchel come by here at night?"), + l("Hello."); + + switch (@menu) + { + case 1: + speech + l("No."), + l("It tends to be too dark to see a mask."); + close; + + case 2: + speech + l("Yes, I saw someone with a large sack on their back go to the mining camp."); + close; + } + } + + switch (getq(.quest)) + { + case 0: + case 1: hinn_new_player; break; + case 2: hinn_help; break; + default: hinn_thanks; + } + + closeclientdialog(); + close; + +OnNPCKillEvent: + // XXX: maybe have a OnTakeScript on the pinky antena item so we count pickups instead of kills + if (killedrid == .monster_id && getq(.quest) == 2 && + getq2(.quest) < .kill_count && strcharinfo(PC_MAP) == .map$) + { + setq .quest, 2, getq2(.quest) + 1; + } + end; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq .quest, 1; // allow the player to do the quest + dispbottom l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 15; // min level to do the quest + .monster_id = Fluffy; // monster to kill // FIXME: change this when we have pinkies + .monster_drop = FluffyFur; // monster drop to collect // FIXME: change this when we have pinkies + .drop_count = 10; // amount of that drop needed + .kill_count = 10; // min number of kills + .reward_item = WoodenSword; // reward item // FIXME: change this when we have he Scythe + .reward_money = 0; // reward money + .reward_exp = 0; // reward exp + .bad_hat = BrimmedFlowerHat; // hinnak attacks you when you wear this hat // FIXME: make this pinky hat when we get it + .drink_item = PumpkishJuice; // the item hinnak asks to drink // FIXME: make this beer when we have it + + .quest = HurnscaldQuests_Hinnak; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/inspector.txt b/npc/placeholder/inspector.txt new file mode 100644 index 00000000..f25ef1dd --- /dev/null +++ b/npc/placeholder/inspector.txt @@ -0,0 +1,190 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-2-1,30,35,0 script Inspector NPC_HUMAN_M_ARTIS,{ + + if (BaseLevel < .min_level) + { + npctalk3(l("I'm sorry, but I'm busy looking into this string of robberies.")); + end; + } + + // OnTalk: + switch (getq(.quest)) + { + case 0: + case 1: + speech(4, + l("Hmm... what to do.")); + narrator(4, + l("He looks up and into your face.")); + speech(4, + l("You look capable, will you help me solve these robberies?"), + l("I would go myself, but for some reason I'm a non-walking NPC.")); + + if (selectd("Yes", "No") == 2) { + closeclientdialog(); + close; + } + + speech( + l("Ok then."), + l("I'd like you to ask the villagers about the recent string of robberies.")); + + close2; + setq(.quest, 2); + end; + + case 2: + npctalk3(l("Please continue talking to the villagers.")); + end; + + case 3: + speech( + l("Hm..."), + l("I don't know if I trust her eyesight or memory."), + l("See if someone else knows anything.")); + close; + + case 4: + speech( + l("Someone in a theater mask, eh?"), + l("There was a traveling theater troupe in town recently, but they've moved on to Tulimshar."), + l("Please go talk to their leader about this.")); + + close2; + setq(.quest, 5); + end; + + case 5: + npctalk3(l("Please go talk to the leader of the traveling troupe about the theater mask.")); + end; + + case 6: + speech( + l("Hm... an old man?"), + l("Could you interrogate him for me?")); + + close2; + setq(.quest, 7); + end; + + case 7: + npctalk3(l("Have you talked with the old man yet?")); + end; + + case 8: + npctalk3(l("Can you verify that with his wife?")); + end; + + case 9: + speech( + l("Hm... then it couldn't be him."), + l("I'm not sure where to go from here, maybe you can find something else."), + l("Try talking to everyone again.")); + + close2; + setq(.quest, 10); + end; + + case 10: + npctalk3(l("Made any progress yet?")); + end; + + case 11: + npctalk3(l("Then go north and investigate!")); + end; + + case 12: + npctalk3(l("Did you look over the basement?")); + end; + + case 13: + speech( + l("What a strange note."), + l("I'll keep track of this, while you return the mask to the troupe."), + l("I would go myself, but the developers were too lazy to make me walk."), + "...", + l("By the way, stay sharp! I may call upon you again.")); + + close2; + setq(.quest, 14); + end; + + case 14: + npctalk3(l("Please return the mask to the traveling troupe.")); + end; + + case 15: + speech( + l("My men have found all of the stolen items."), + l("They were all in the mining camp."), + l("We still don't know who did it.")); // XXX: feel free to extend this quest beyond this point + + close2; + setq(.quest, 16); + getexp(.reward_exp, 0); + end; + + case 16: + npctalk3(l("Remember to stay sharp. I might need your help on another case.")); + end; + } + + closeclientdialog(); + close; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq(.quest, 1); // allow the player to do the quest + dispbottom(l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 30; // min level to do the quest + + .reward_exp = 2500; + + .quest = HurnscaldQuests_Inspector; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/jack.txt b/npc/placeholder/jack.txt new file mode 100644 index 00000000..1f205a59 --- /dev/null +++ b/npc/placeholder/jack.txt @@ -0,0 +1,313 @@ +// Evol scripts. +// Author: +// gumi +// Quest states (forest bow): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - alan wants to ask jack +// [1] 3 - jack explained problem +// [1] 4 - alan asks to find wood +// [1] 5 - found perfect wood +// [1] 6 - got the bow +// [2] unused +// [3] unused +// [t] unused +// Quest states (wooden shield): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - jack proposes shield +// [1] 3 - player accepted quest +// [1] 4 - got the shield +// [2] unused +// [3] unused +// [t] unused +// Description: +// Jack Lumber, the handsome lumberjack + +008-1,242,117,0 script Jack NPC_HUMAN_M_ARTIS,{ + + function bow_intro { + speech(4, + l("Why not?!"), + l("I value my life, that's why!")); + + selectd(l("What do you mean?")); + + speech(4, + l("A week ago, I was going to chop down one of those twigleaf trees in the forest to the southwest."), + l("These twigleafs are the trees that give me the living wood you speak of."), // XXX: were Log Heads named "Twigleaf" at some point in the past? + l("I was just chopping away with my axe, and guess what happened?"), + l("One of its branches hit me!"), + l("At first, I thought it fell down or the wind blew it, but it hurt!"), + l("After I shook it off and struck the tree again with my axe, another branch hit me!"), + l("I got angry and started to chop off all the low-hanging branches so this couldn't happen anymore."), + l("Even after all that though, I still can't believe what happened next.")); + + selectd(l("What happened?")); + + speech(4, + l("You'll think I'm insane if I tell you...")); + + selectd(l("I won't. I promise.")); + + speech(4, + l("Alright, well..."), + l("After I chopped off a few branches, the whole tree started to move!"), + l("Its roots tore out of the earth, all the branches started to wave around, and a face appeared on the trunk."), + l("The whole tree CAME TO LIFE! It was mad!")); + + selectd(l("Did you run away?"), l("Did you fight it?")); + + speech(4, + l("I fought it, of course!"), + l("I took my axe and attacked the beast!"), + l("It hit me here *points at a bruise on his shoulder*, here *lifts his trouser leg to show another bruise*, and here *lifts his shirt and reveals even worse bruises*."), // XXX: that's kinda dirty imho... maybe we could use the narrator? + l("But I didn't give up!"), + l("I chopped away at it, branch after branch, and in the end I chopped off its roots, and it fell to the ground, motionless.")); + + selectd(l("So you beat the monster? Then why are you so scared?")); + + speech(4, + l("Well, I was exhausted and had to rest."), + l("A few minutes passed, and suddenly I was practically surrounded by a dozen or more of these living trees!")); + + selectd(l("Did you fight them too?")); + + speech(4, + l("Are you crazy?"), + l("I barely destroyed one of those beasts."), + l("I was in no shape to fight again!"), + l("I ran away as fast as I could, and lucky for me the monsters aren't that fast on their tiny root legs, Ha!")); + + selectd(l("So, I guess you aren't chopping down trees anymore?")); + + speech(4, + l("I still do; it's my job."), + l("But I'll no longer chop those twigleafs, I'll tell you that."), + l("I know the bow master wants some twigleaf wood, but I don't care."), + l("I won't risk MY life for a few gold pieces!"), + l("If you really want to, just go to the southwest, but I can't help you."), + l("I won't go there ever again.")); + + selectd(l("Southwest you say? OK, thank you.")); + + speech(l("Don't say I didn't warn you!")); + + // What a huge text wall, I feel sorry for the players + + close2; + setq(.quest_bow, 3); + end; + } + + function bow_good_luck { + if (getq(.quest_inspector) == 2) + { + speech(4, + l("Good luck hunting those tree monsters – you'll need it.")); + + selectd(l("Have you seen anything that might be connected to the recent robberies in town?")); + + speech(l("Sorry, no.")); + close; + } + + npctalk3(l("Good luck hunting those tree monsters – you'll need it.")); + end; + } + + function shield_intro { + speech(4, + l("I have an idea."), + l("What would you say about a new shield?")); + + setq(.quest_shield, 2); + + selectd( + l("No thanks."), + l("Yes, please!"), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 2: + speech( + l("All I need is %d %s.", .logs_amount, getitemlink(.logs_item)), + l("This needn't be high quality wood; pretty much any log you can find should work."), + l("Oh, and I'll also need %s E for other materials.", format_number(.shield_cost))); + + close2; + setq(.quest_shield, 3); + end; + case 3: speech(l("Sorry, no.")); close; + } + } + + function bow_congrats { + speech(4, + l("You've finally found that perfect piece of living wood that Alan needs to make a Forest Bow, haven't you?")); + + selectd( + l("I couldn't afford the bow, though..."), + l("No, I'm still looking."), + l("Yes, I've got the Forest bow now."), + l("I'm a melee warrior, I don't need bows."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 3: + if (getq(.quest_bow) <= 5) + { + speech(4, + l("Hrmph."), + l("I'm someone who respects those speaking the truth.")); + } + // fallthrough + case 1: + case 4: + speech(4, + l("You no doubt remember how I struggled with those beasts, fighting for my life."), + l("Scared me, those seven-branched little stumps did!"), + l("Never since that day have I strayed near them, and yet there you are, cutting them down one by one."), + l("I'm proud of you – to dare to fight those trunks is admirable indeed."), + l("You're as strong as if you were my own child!")); + + shield_intro; + break; + case 2: speech(l("You should go talk to Alan again.")); close; + case 5: speech(l("Sorry, no.")); close; + } + } + + function shield_make { + speech(4, + l("Do you have the %d %s and %s E for the shield?", + .logs_amount, getitemlink(.logs_item), format_number(.shield_cost))); + + selectd( + rif(countitem(.logs_item) >= .logs_amount && Zeny >= .shield_cost, + l("Here it is.")), + l("I'll come back later.")); + + if (@menu != 1) { + closeclientdialog(); + close; + } + + speech(4, + l("Have a seat.")); + + narrator(4, + l("Jack saws the logs into pieces and then sands them until they are smooth to the touch."), + l("Applying some strong-smelling liquid, he tans them to a darker hue."), + l("Grabbing one of two leftover pieces, he begins to carve it into a round shape, then repeats this with the second piece – shield handles from what you can tell."), + l("Meanwhile, the sun has dried the other pieces."), + l("Jack places them next to each other, adds a frame, and nails everything together."), + l("The resulting shield looks usable already, but Jack applies another liquid to it and leaves it to dry for a few moments."), + l("Finally, he hands the shield to you.")); + + if (checkweight(.shield_item, 1) != true) + { + speech( + l("It seems you can't carry the %s.", getitemlink(.shield_item)), + l("Come back when you do.")); + close; + } + + if (Zeny < .shield_cost || countitem(.logs_item) < .logs_amount) + close; // double-check + + setq(.quest_shield, 4); + delitem(.logs_item, .logs_amount); + getitem(.shield_item, 1); + Zeny -= .shield_cost; + getexp(.shield_exp, 0); + + speech( + l("Enjoy your new shield!")); + + close; + } + + function wood_daily { + speech(4, + l("I hope that my shield will serve you well!")); + + selectd( + l("Me too."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 2: speech(l("Sorry, no.")); close; + } + + closeclientdialog(); // TODO: daily quest (needs the generic daily quest script) + close; + } + + // OnTalk: + switch (getq(.quest_shield)) + { + case 2: shield_intro; break; + case 3: shield_make; break; + case 4: wood_daily; break; + } + + switch (getq(.quest_bow)) + { + case 3: + case 4: bow_good_luck; break; + case 5: + case 6: bow_congrats; break; + } + + // initial intro + { + speech(4, + l("Hello there!"), + l("My name is Jack Lumber, the enemy of all trees."), + l("If you need some firewood, just let me know.")); + + selectd( + l("I'll keep that in mind."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?")), + rif(getq(.quest_bow) == 2, l("I heard you aren't delivering any more living wood. Why not?"))); + + switch (@menu) + { + case 2: speech(l("Sorry, no.")); close; + case 3: bow_intro; break; + } + + } + + closeclientdialog(); + close; + +OnInit: + .logs_item = Aquada; // FIXME: change this when we get RawLog + .logs_amount = 40; // XXX: maybe nlogn? + .shield_cost = 5000; // XXX: maybe nlogn? + .shield_exp = 2500; + .shield_item = Aquada; // FIXME: change this when we get WoodenShield + + .quest_bow = HurnscaldQuests_ForestBow; + .quest_shield = HurnscaldQuests_WoodenShield; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_bow; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/ledmitz.txt b/npc/placeholder/ledmitz.txt new file mode 100644 index 00000000..df7b8d8e --- /dev/null +++ b/npc/placeholder/ledmitz.txt @@ -0,0 +1,55 @@ +// Evol scripts. +// Author: +// gumi + +008-2-2,43,34,0 script Ledd NPC_HUMAN_M_ARTIS,{ + // XXX: ^ I know it should be Led and Mitz but 4144 made names + // shorter than 4 characters illegal + + deltimer("Mitz::OnTalk"); + addtimer(rand(500, 900), "Mitz::OnTalk"); +OnTalk: + npctalk3(l("Ha! I'll drink muuuch mo.. more than you! Im not ooone biiit dr...dr..unk!")); + // TODO: add more sentences + // XXX: maybe instead of making them respond to a click they should just + // shout at each other at regular intervals? + end; + +OnInit: + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} + +008-2-2,46,34,0 script Mitz NPC_HUMAN_M_ARTIS,{ + + deltimer("Ledd::OnTalk"); + addtimer(rand(500, 900), "Ledd::OnTalk"); +OnTalk: + npctalk3(l("I can still drink more! Better give up you... you... teelotaler! MORE BEER MELINDA!")); + // TODO: add more sentences + end; + +OnInit: + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/macgowan.txt b/npc/placeholder/macgowan.txt new file mode 100644 index 00000000..2f65b9fe --- /dev/null +++ b/npc/placeholder/macgowan.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// gumi + +008-2-8,38,29,0 script Macgowan NPC_HUMAN_M_ARTIS,{ + npctalk3(l("Hello, I am Macgowan, apprentice to Nicholas.")); + end; + +OnInit: + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/malek.txt b/npc/placeholder/malek.txt new file mode 100644 index 00000000..219a059a --- /dev/null +++ b/npc/placeholder/malek.txt @@ -0,0 +1,65 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,233,42,0 script Malek NPC_HUMAN_M_ARTIS,{ + + if (getq(.quest_inspector) == 11) + { + speech(4, + l("Hi, can I help you at all?")); + + selectd( + l("The inspector sent me here to investigate.")); + + speech(4, + l("Yeah, we did hear a commotion."), + l("We thought we heard someone go down to the basement, but we checked the whole place over and didn't see anything out of the ordinary.")); + + close2; + setq(.quest_inspector, 12); + end; + } + + npctalk3(generic(32 | 256)); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/mikhail.txt b/npc/placeholder/mikhail.txt new file mode 100644 index 00000000..e071e914 --- /dev/null +++ b/npc/placeholder/mikhail.txt @@ -0,0 +1,131 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - bernard wants roasted maggot +// [1] 3 - brought maggot +// [1] 4 - bernard wants maggot slime +// [1] 5 - brought maggot slime +// [1] 6 - mikhail needs maggot slime +// [1] 7 - brought maggot slime +// [2] unused +// [3] unused +// [t] unused +// Description: +// takes part in the slime soup quest (Bernard) + +008-1,308,72,0 script Mikhail NPC_HUMAN_M_ARTIS,{ + + function soup_scared { + speech 4, + l("Hello..."), + l("I'm supposed to be helping Bernard from the Inn but..."); + + narrator 4, + l("His eyes grow wide"); + + speech 4, + l("Eeekkk another one."); + + narrator + l("It seems that the boy would like to say more, but seems too terrified at the moment."), + l("Maybe you should help someone else first, so that he sees your intentions are good."); + + close; + } + + function soup_intro2 { + speech 4, + l("Bernard sent me to get %d %s from the %s in the fields, but they scare me so bad!", + .third_item_qty, getitemlink(.third_item), getmonsterlink(.third_item_mob)), + l("You look like a nice person."), + l("Would you go get them for me?"); + + selectd + l("Of course, I'll go get them for you."); + + speech + l("Thank you so much!"), + l("I'll wait for you here."); + + setq .quest, 6; + close; + } + + function soup_reminder_slime2 { + speech + l("Did you bring me the %d %s I need?", + .third_item_qty, getitemlink(.third_item)), + l("It doesn't look like you have them all..."); + close; + } + + function soup_reward_slime2 { + speech + l("Did you bring me the %d %s I need?", + .third_item_qty, getitemlink(.third_item)), + l("Ooh!"), + l("Thank you so much!"), + l("I can get back to Bernard now!"); + + if (countitem(.third_item) < .third_item_qty) + close; // double-check + + delitem .third_item, .third_item_qty; + setq .quest, 7; + getexp .third_reward_exp, 0; + close; + } + + function soup_thanks_slime2 { + speech + l("Thanks again for helping me!") + " %%Q"; + + close; + } + + switch(getq(.quest)) + { + + case 0: + case 1: + case 2: + case 3: + case 4: soup_scared; break; + case 5: soup_intro2; break; + case 6: + if (countitem(.third_item) < .third_item_qty) + soup_reminder_slime2; + else + soup_reward_slime2; + break; + default: soup_thanks_slime2; + } + + closeclientdialog(); + close; + +OnInit: + .third_item = Aquada; // FIXME: change this when we have MaggotSlime + .third_item_qty = 5; + .third_item_mob = Fluffy; // FIXME: change this when we have Maggot + + .third_reward_exp = 100; + + .quest = HurnscaldQuests_Soup; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/milly.txt b/npc/placeholder/milly.txt new file mode 100644 index 00000000..03c39d42 --- /dev/null +++ b/npc/placeholder/milly.txt @@ -0,0 +1,109 @@ +// Evol scripts. +// Author: +// gumi +// Quest states (inspector): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,282,112,0 script Milly NPC_HUMAN_M_ARTIS,{ + + // TODO: make the actual beanie copter quest after those are finished: + // [X] Inspector quest + // [ ] Bone knife quest + // [ ] Setzer quest + // [ ] Rossy quest + // [ ] Cindy quest + + .@q_inspector = getq(.quest_inspector); + + speech(4, + l("Hello traveler, welcome to Hurnscald."), + l("Have you met Kfahr yet?"), + l("He is the greatest hero that ever walked the land of Hurnscald!")); + + selectd( + l("Hi! No, I haven't seen him yet."), + l("Where can I find him?"), + l("Mh, I don't care for heroes."), + l("Hello, yes I have met him."), + rif(.@q_inspector == 2, l("Have you seen anything strange lately?")), + rif(.@q_inspector == 2, l("Do you know anything about the recent robberies?"))); + + switch (@menu) + { + case 3: + speech(4, + l("What?"), + l("Surely you do not appreciate what a hero he is!"), + l("Mh, or perhaps honor is dead in you; for you to be so slow to comprehend the good that his exploits have wrought for us."), // XXX: this sentence seems too complicated to come from a child's mouth + l("Put on your thinking cap and be propelled into high adventure!"), + l("Go to Kfahr, and listen to his stories."), + l("You can't have met him."), + l("No one who has met him would say such silly things.")); + // fallthrough + + case 1: + speech(4, + l("I highly recommend you seek him out!")); + // fallthrough + + case 2: + speech( + l("He is a regular at the inn, located in the north-west part of town."), + l("If you are lucky he might tell you a story about his adventures.")); + break; + + case 4: + speech( + l("Oh, I hope you stayed and listened to his stories about his adventures.")); + break; + + case 5: + speech( + l("I haven't seen anything strange.")); + break; + + case 6: + speech( + l("No, sorry.")); + break; + } + + close; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; // TODO: change this to the milly quest debug when it exists + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/nicholas.txt b/npc/placeholder/nicholas.txt new file mode 100644 index 00000000..17f44d19 --- /dev/null +++ b/npc/placeholder/nicholas.txt @@ -0,0 +1,26 @@ +// Evol scripts. +// Author: +// gumi + +008-2-8,40,27,0 script Nicholas NPC_HUMAN_M_ARTIS,{ + speech( + l("Hello, there!"), + l("I'm an expert blacksmith."), + l("If you get me some Coal and Iron Ingots, I could make you a very valuable shield or helmet.")); + + // TODO: setzer quest + close; + +OnInit: + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/note.txt b/npc/placeholder/note.txt new file mode 100644 index 00000000..f449ac89 --- /dev/null +++ b/npc/placeholder/note.txt @@ -0,0 +1,28 @@ +// Evol scripts. +// Author: +// gumi + +008-2-2,32,28,0 script Note#Hurnscald:pub NPC_PAPER_NOTE,{ + narrator(8, + l("We refuse service to anyone who:"), + l("• Has a bubblehead"), + l("• Is not properly shaded"), + l("• Can't walk without stopping after every step")); + + // In case you don't get the joke, know that it's a parody on Illutia. + + close; + +OnInit: + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/nurse.txt b/npc/placeholder/nurse.txt new file mode 100644 index 00000000..ee14cd9f --- /dev/null +++ b/npc/placeholder/nurse.txt @@ -0,0 +1,101 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-2-12,28,30,0 script Nurse NPC_HUMAN_M_ARTIS,{ + + speech(4, + l("How can I help you?")); + + // TODO: check for AxeHat when we get it + // XXX: this npc used to teach the resist poison skill, do we still want that? + + selectd( + l("Oooh, these wounds! They hurt so much!"), + l("I don't feel so well, I might be sick."), + l("No, I'm fine."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything out of the ordinary?"))); + + switch (@menu) + { + case 1: + if (BaseLevel > .heal_max_level) + { + speech( + l("I'm sorry but I'm here only to help young people."), // XXX: this sounds cruel towards elderly people + l("Your level is already higher than %d.", .heal_max_level), + l("You can get some rest at the inn near here.")); + close; + } + speech(4, + l("Here, let me heal you.")); + + npcskill(AL_HEAL, .heal_skill_level, .heal_npc_stats, .heal_npc_level); + + speech( + l("There you go, like new.")); + close; + case 2: + speech( + l("Then you should better see the doctor."), + l("He is usually in his office on the 3rd floor.")); + close; + case 3: + speech( + l("Then I would ask you to leave."), + l("There are people who really need our help.")); + close; + case 4: + speech( + l("I'm too busy here to observe the town.")); + close; + } + + + end; + +OnInit: + .heal_max_level = 20; // she will only heal low level players + + .heal_skill_level = 10; // what level of the healing skill to use + .heal_npc_stats = 99; // what stat points the NPC has + .heal_npc_level = 60; // what level the npc has + + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/old-man.txt b/npc/placeholder/old-man.txt new file mode 100644 index 00000000..6914e50c --- /dev/null +++ b/npc/placeholder/old-man.txt @@ -0,0 +1,90 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,293,124,0 script Old Man NPC_HUMAN_M_ARTIS,{ + + function oldman_ask { + speech(4, + l("Hi there, need something?")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + speech( + l("I'm sorry, but I didn't see anything."), + l("You should ask my old woman.")); + close; + } + + function oldman_accuse { + speech(4, + l("Found anything new?")); + + selectd( + l("The leader of the troupe said you hung around them a lot while they were in town.")); + + speech( + l("Yes, I hung around the theater a lot."), + l("I was an actor when I was younger."), + l("But I wasn't there that night."), + l("Me and the wife were at home all night.")); + + close2; + setq(.quest_inspector, 8); + end; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 2: oldman_ask; break; + case 7: oldman_accuse; break; + } + + // initial intro + npctalk3(l("Don't let those monsters get to you.")); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_MALE; + .distance = 1; // this npc has bad hearing + .speed = 2000; // this npc is very old + // TODO: move graph (after the Hurnscald map is finalized) + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/old-woman.txt b/npc/placeholder/old-woman.txt new file mode 100644 index 00000000..2a2591b4 --- /dev/null +++ b/npc/placeholder/old-woman.txt @@ -0,0 +1,137 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,230,113,0 script Old Woman NPC_HUMAN_M_ARTIS,{ + + function is_inspector { + return (getequipcardid(EQI_HEAD_MID, 0) == NavyBlueCottonDye /*&& + getequipcardid(EQI_HEAD_LOW, 0) == NavyBlueCottonDye*/); // TODO / FIXME: remove the /* */ whenever we have cotton pants + } + + function oldwoman_ask { + speech(4, + l("Hello deary.")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + .@q = getq(.quest_inspector); + + if (!is_inspector()) + { + speech(l("Yes, but I'm only talking to the inspector himself!")); + + close2; + if (.@q < 3) + setq(.quest_inspector, 3); + end; + } + + if (.@q == 2 || .@q == 3) + { + speech( + l("I saw someone sneaking around town wearing a theater mask."), + l("It looked like one of the masks used by the troupe that was in town recently.")); + + close2; + setq(.quest_inspector, 4); + } + + else if (.@q == 10) + { + speech( + l("I've remembered something else."), + l("The night the troupe left, I saw someone with a theater mask take a large satchel out of town."), + l("He was heading north.")); + + close2; + setq(.quest_inspector, 11); + } + + end; + } + + function oldwoman_alibi { + speech(4, + l("Hello deary.")); + + selectd( + l("Was your husband with you at home all night the last night that the troupe was in town?")); + + speech( + l("Yes, we were both at home all night.")); + + close2; + setq(.quest_inspector, 9); + end; + } + + function oldwoman_filler { + npctalk3(l("I hope you catch that naughty person!")); + end; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 2: + case 3: oldwoman_ask; break; + case 4: + case 5: + case 6: + case 7: oldwoman_filler; break; + case 8: + case 9: oldwoman_alibi; break; + case 10: oldwoman_ask; break; + } + + // initial intro + if (BaseLevel < 40) + npctalk3(l("Watch out for these flowers. They don't like to be messed with.")); + else + npctalk3(l("Hello deary.")); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 1; // this npc has bad hearing + .speed = 2000; // this npc is very old + // TODO: move graph (after the Hurnscald map is finalized) + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/sabine.txt b/npc/placeholder/sabine.txt new file mode 100644 index 00000000..1d0cc38a --- /dev/null +++ b/npc/placeholder/sabine.txt @@ -0,0 +1,64 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,291,97,0 script Sabine NPC_HUMAN_M_ARTIS,{ + + if (getq(.quest_inspector) != 2) + { + npctalk3(generic(1 | 16)); + end; + } + + speech(4, + l("Isn't this place pretty?"), + l("I love hanging out here!")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + speech( + l("No, sorry.")); + + close; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/soul-menhir.txt b/npc/placeholder/soul-menhir.txt new file mode 100644 index 00000000..0b2d177d --- /dev/null +++ b/npc/placeholder/soul-menhir.txt @@ -0,0 +1,58 @@ +// Evol scripts. +// Author: +// gumi +// Description: +// place of power, mana refills faster when sitting nearby + +008-1,253,112,0 script Soul Menhir#hurnscald NPC_HUMAN_M_ARTIS,{ + + end; + +OnRefill: + @menhir_lock = false; + getmapxy(.@map$, .@x, .@y, UNITTYPE_PC); + + if (.@map$ != .map$ || distance(.x, .y, .@x, .@y) > .refill_distance || + !(issit())) + end; + + heal(0, .refill_rate); + end; + + +OnTimer500: + .@count = getunits(BL_PC, .@units[0], false, .map$, (.x - .refill_distance), + (.y - .refill_distance), (.x + .refill_distance), (.y + .refill_distance)); + + for (.@i = 0; .@i < .@count; ++.@i) + { + if (.@units[.@i] < 0) continue; // pre-check, just in case + deltimer(.name$ + "::OnRefill", .@units[.@i]); + if (gettimer(TIMER_COUNT, .@units[.@i], .name$ + "::OnRefill") > 0 || + getvariableofpc(@menhir_lock, .@units[.@i])) { + continue; + } + set(getvariableofpc(@menhir_lock, .@units[.@i]), true); + addtimer(rand(.refill_timer), .name$ + "::OnRefill", .@units[.@i]); + } + + initnpctimer(); + end; + +OnInit: + + .refill_rate = 1; // number of SP to give every refill + .refill_distance = 7; // max distance + .refill_timer = 200; // wait rand(X) ms before refill + initnpctimer(); + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/placeholder/troupe-leader.txt b/npc/placeholder/troupe-leader.txt new file mode 100644 index 00000000..05f20e6a --- /dev/null +++ b/npc/placeholder/troupe-leader.txt @@ -0,0 +1,119 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,306,115,0 script Troupe Leader NPC_HUMAN_M_ARTIS,{ + + function nohmask_question { + // XXX: shouldn't the player ask a question before she replies Yes? this feels too abrupt + speech(4, + l("Yes, a mask was stolen from us the last night we were in Hurnscald.")); + + selectd( + l("Any ideas on who might have taken it?"), + l("Are you sure one of your troupe members didn't hide it and commit those robberies?"), + l("Hmm...")); + + switch (@menu) + { + case 1: + speech( + l("Hm..."), + l("I did see an old man hang out near the theater after our last show.")); + close2; + setq(.quest_inspector, 6); + close; + + case 2: + speech( + l("I am absolutely positive."), + l("None of my troupe have left the city since we got here."), + l("Good day!")); + close; + } + + closeclientdialog(); + close; + } + + function nohmask_found { + // XXX: shouldn't the player say "I found your mask" before the npc says thanks? + speech(4, + l("Thank you for finding the mask."), + l("You did such a good job, you should keep it.")); + + if (checkweight(.reward_item, 1) != true) + { + speech(8, + l("It seems you can't carry it right now...")); + close; + } + + setq(.quest_inspector, 15); + getexp(.reward_exp, 0); + getitem(.reward_item, 1); + + speech( + l("We don't need it anymore."), + l("We're doing different shows here.")); + close; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 5: nohmask_question; break; + // XXX: shouldn't it have an in-between state where it says good luck or something? + case 14: nohmask_found; break; + // XXX: shouldn't it have a "completed" state where it says thanks, come back any time? + } + + // initial intro + speech( + l("Hello."), + l("I'm the leader of a traveling theater troupe."), + l("We'll be staying here in Tulimshar for a while.")); + close; + +OnInit: + .reward_item = Aquada; // FIXME: change this when we get NohMask + .reward_exp = 1500; + + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/scripts.conf b/npc/scripts.conf index 3bb929a9..a5ed16ba 100644 --- a/npc/scripts.conf +++ b/npc/scripts.conf @@ -39,6 +39,7 @@ "npc/functions/npcmovegraph.txt", "npc/functions/fishing.txt", "npc/functions/mouboofunc.txt", +"npc/functions/generic-text.txt", "npc/functions/asklanguage.txt", "npc/functions/game-rules.txt", "npc/functions/riddle.txt", @@ -56,6 +57,7 @@ "npc/functions/quest-debug/005-ShipQuests_Knife.txt", "npc/functions/quest-debug/006-ShipQuests_ArpanMoney.txt", "npc/functions/quest-debug/007-ShipQuests_Door.txt", +// 008: ??? "npc/functions/quest-debug/009-ShipQuests_TreasureChest.txt", "npc/functions/quest-debug/010-ShipQuests_Ale.txt", "npc/functions/quest-debug/011-ShipQuests_Astapolos.txt", @@ -71,8 +73,8 @@ "npc/functions/quest-debug/021-ArtisQuests_CatchPiou.txt", "npc/functions/quest-debug/022-ArtisQuests_Fishman.txt", "npc/functions/quest-debug/023-ArtisQuests_QOnan.txt", -// 24: quest removed (Halloween_VisitArtis) -// 25: quest removed (Halloween_BarrelQuest) +// 024: removed quest (Halloween_VisitArtis) +// 025: removed quest (Halloween_BarrelQuest) "npc/functions/quest-debug/026-General_Rumly.txt", "npc/functions/quest-debug/027-ArtisQuests_Enora.txt", "npc/functions/quest-debug/028-General_Narrator.txt", @@ -81,6 +83,13 @@ "npc/functions/quest-debug/031-General_Janus.txt", "npc/functions/quest-debug/032-ArtisQuests_MonaDad.txt", "npc/functions/quest-debug/033-Artis_Legion_Progress.txt", +// 034: ??? +// 035: ??? +"npc/functions/quest-debug/036-HurnscaldQuests_Hinnak.txt", +"npc/functions/quest-debug/037-HurnscaldQuests_Soup.txt", +"npc/functions/quest-debug/038-HurnscaldQuests_Inspector.txt", +"npc/functions/quest-debug/039-HurnscaldQuests_ForestBow.txt", +"npc/functions/quest-debug/040-HurnscaldQuests_WoodenShield.txt", // Item functions "npc/items/croconut.txt", @@ -106,5 +115,30 @@ // config script "npc/config/hairstyle_config.txt", +// placeholder scripts +"npc/placeholder/hinnak.txt", +"npc/placeholder/mikhail.txt", +"npc/placeholder/bernard.txt", +"npc/placeholder/ledmitz.txt", +"npc/placeholder/jack.txt", +"npc/placeholder/inspector.txt", +"npc/placeholder/alan.txt", +"npc/placeholder/troupe-leader.txt", +"npc/placeholder/old-man.txt", +"npc/placeholder/old-woman.txt", +"npc/placeholder/books.txt", +"npc/placeholder/malek.txt", +"npc/placeholder/milly.txt", +"npc/placeholder/sabine.txt", +"npc/placeholder/doctor.txt", +"npc/placeholder/nurse.txt", +"npc/placeholder/soul-menhir.txt", +"npc/placeholder/note.txt", +"npc/placeholder/macgowan.txt", +"npc/placeholder/nicholas.txt", +//"npc/placeholder/angus.txt", +//"npc/placeholder/caul.txt", +//"npc/placeholder/receptionist.txt", + // Maps specific scripts @include "npc/_import.txt" -- cgit v1.2.3-60-g2f50 From b3a14e61ab2173c7000816dd38ccee86b1b7d272 Mon Sep 17 00:00:00 2001 From: Micksha Date: Tue, 23 Oct 2018 13:34:06 +0200 Subject: Add all the Hurns NPCs --- db/constants.conf | 23 +++++++++++++++-------- maps/re/008-1-1.mcache | Bin 358 -> 1501 bytes npc/001-2-33/_mobs.txt | 0 npc/001-2-33/_savepoints.txt | 0 npc/001-2-33/_warps.txt | 4 ++-- npc/001-2-36/_warps.txt | 2 +- npc/001-2-4/_warps.txt | 2 +- npc/008-1-1/_import.txt | 1 + npc/008-1-1/_warps.txt | 3 +++ npc/008-1/_import.txt | 8 +++++++- npc/008-1/_warps.txt | 1 + npc/008-1/auldsbel.txt | 20 ++++++++++++++++++++ npc/008-1/banu.txt | 21 +++++++++++++++++++++ npc/008-1/hinnak.txt | 10 +++++----- npc/008-1/lady.txt | 20 ++++++++++++++++++++ npc/008-1/lumberjack.txt | 2 +- npc/008-1/milly.txt | 21 +++++++++++++++++++++ npc/008-1/oscar.txt | 20 ++++++++++++++++++++ npc/008-1/snarfles.txt | 20 ++++++++++++++++++++ npc/008-1/voltain.txt | 19 +++++++++++++++++++ npc/008-2-0/celestia.txt | 2 +- npc/008-2-1/generalstore.txt | 6 +++--- npc/008-2-1/inspector.txt | 6 +++--- npc/008-2-1/richard.txt | 6 +++--- npc/008-2-10/airlia.txt | 12 ++++++------ npc/008-2-12/_import.txt | 1 + npc/008-2-12/nurse.txt | 20 ++++++++++++++++++++ npc/008-2-13/_import.txt | 1 + npc/008-2-13/lena.txt | 20 ++++++++++++++++++++ npc/008-2-14/_import.txt | 1 + npc/008-2-14/doctor.txt | 20 ++++++++++++++++++++ npc/008-2-17/_import.txt | 2 ++ npc/008-2-17/angus.txt | 20 ++++++++++++++++++++ npc/008-2-17/caul.txt | 20 ++++++++++++++++++++ npc/008-2-18/_import.txt | 1 + npc/008-2-18/malik.txt | 21 +++++++++++++++++++++ npc/008-2-2/_import.txt | 5 +++++ npc/008-2-2/bartender.txt | 20 ++++++++++++++++++++ npc/008-2-2/kfahr.txt | 20 ++++++++++++++++++++ npc/008-2-2/micksha.txt | 20 ++++++++++++++++++++ npc/008-2-2/receptionist.txt | 21 +++++++++++++++++++++ npc/008-2-2/roamingo.txt | 20 ++++++++++++++++++++ npc/008-2-4/_import.txt | 1 + npc/008-2-4/olana.txt | 21 +++++++++++++++++++++ npc/008-2-6/_import.txt | 2 ++ npc/008-2-6/alan.txt | 20 ++++++++++++++++++++ npc/008-2-6/apprentice.txt | 20 ++++++++++++++++++++ npc/008-2-7/_import.txt | 1 + npc/008-2-7/wyara.txt | 20 ++++++++++++++++++++ npc/008-2-8/_import.txt | 2 ++ npc/008-2-8/apprentice.txt | 20 ++++++++++++++++++++ npc/008-2-8/nicholas.txt | 19 +++++++++++++++++++ 52 files changed, 553 insertions(+), 35 deletions(-) delete mode 100644 npc/001-2-33/_mobs.txt delete mode 100644 npc/001-2-33/_savepoints.txt create mode 100644 npc/008-1-1/_warps.txt create mode 100644 npc/008-1/auldsbel.txt create mode 100644 npc/008-1/banu.txt create mode 100644 npc/008-1/lady.txt create mode 100644 npc/008-1/milly.txt create mode 100644 npc/008-1/oscar.txt create mode 100644 npc/008-1/snarfles.txt create mode 100644 npc/008-1/voltain.txt create mode 100644 npc/008-2-12/nurse.txt create mode 100644 npc/008-2-13/lena.txt create mode 100644 npc/008-2-14/doctor.txt create mode 100644 npc/008-2-17/angus.txt create mode 100644 npc/008-2-17/caul.txt create mode 100644 npc/008-2-18/malik.txt create mode 100644 npc/008-2-2/bartender.txt create mode 100644 npc/008-2-2/kfahr.txt create mode 100644 npc/008-2-2/micksha.txt create mode 100644 npc/008-2-2/receptionist.txt create mode 100644 npc/008-2-2/roamingo.txt create mode 100644 npc/008-2-4/olana.txt create mode 100644 npc/008-2-6/alan.txt create mode 100644 npc/008-2-6/apprentice.txt create mode 100644 npc/008-2-7/wyara.txt create mode 100644 npc/008-2-8/apprentice.txt create mode 100644 npc/008-2-8/nicholas.txt diff --git a/db/constants.conf b/db/constants.conf index b851ccf8..f75c7e98 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -4036,14 +4036,14 @@ constants_db: { NPC_INSPECTOR: 153 NPC_SUSPICIOUS_TRADER: 154 NPC_GENERAL_STORE: 155 - NPC_TRAVELLER_DRUID: 156 - NPC_DARK_DRUID: 157 - NPC_AIRLIA: 158 - NPC_NICHOLAS: 159 - NPC_BLONDE_APPRENTICE: 160 - NPC_GIRL_MILLY: 161 - NPC_OLANA: 162 - NPC_DESERT_HAT_MAN: 163 + NPC_DARK_DRUID: 156 + NPC_AIRLIA: 157 + NPC_NICHOLAS: 158 + NPC_BLONDE_APPRENTICE: 159 + NPC_GIRL_MILLY: 160 + NPC_OLANA: 161 + NPC_DESERT_HAT_MAN: 162 + NPC_ANGUS_THE_SMITH: 163 NPC_YOUNG_MAN_IN_PINK: 164 NPC_WAITRESS_LEGACY: 165 NPC_WIZARD: 166 @@ -4055,6 +4055,13 @@ constants_db: { NPC_DIMOND: 172 NPC_CHEF_LEGACY: 173 NPC_DIMONDS_WAITRESS: 174 + NPC_DRINKER_ROAMINGO: 175 + NPC_DRINKER_MICKSHA: 176 + NPC_NURSE_LEGACY: 177 + NPC_LENA: 178 + NPC_CAUL: 179 + NPC_MALIK: 180 + NPC_SNARFLES: 181 NPC_CONFUSED_TREE: 400 NPC_ALIGE: 401 diff --git a/maps/re/008-1-1.mcache b/maps/re/008-1-1.mcache index 6365fa18..389c1412 100644 Binary files a/maps/re/008-1-1.mcache and b/maps/re/008-1-1.mcache differ diff --git a/npc/001-2-33/_mobs.txt b/npc/001-2-33/_mobs.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/npc/001-2-33/_savepoints.txt b/npc/001-2-33/_savepoints.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/npc/001-2-33/_warps.txt b/npc/001-2-33/_warps.txt index 2b27d09e..73adf059 100644 --- a/npc/001-2-33/_warps.txt +++ b/npc/001-2-33/_warps.txt @@ -46,8 +46,8 @@ OnInit: doorInit; } -001-2-33,45,28,0 warp #001-2-33_45_28 0,0,001-2-38,24,28 -001-2-33,23,28,0 warp #001-2-33_23_28 0,0,001-2-37,36,28 +001-2-33,45,30,0 warp #001-2-33_45_30 0,0,001-2-38,24,28 +001-2-33,23,30,0 warp #001-2-33_23_30 0,0,001-2-37,36,28 001-2-33,25,40,0 warp #001-2-33_25_40 2,0,001-2-40,27,46 001-2-33,43,40,0 warp #001-2-33_43_40 2,0,001-2-40,45,46 001-2-33,34,46,0 warp #001-2-33_34_46 0,0,001-1,57,42 diff --git a/npc/001-2-36/_warps.txt b/npc/001-2-36/_warps.txt index 389a06e4..530050a7 100644 --- a/npc/001-2-36/_warps.txt +++ b/npc/001-2-36/_warps.txt @@ -1,3 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 001-2-36: unnamed warps -001-2-36,37,29,0 warp #001-2-36_37_29 0,0,001-2-34,24,29 +001-2-36,37,30,0 warp #001-2-36_37_30 0,0,001-2-34,24,29 diff --git a/npc/001-2-4/_warps.txt b/npc/001-2-4/_warps.txt index af130c27..73e39877 100644 --- a/npc/001-2-4/_warps.txt +++ b/npc/001-2-4/_warps.txt @@ -1,7 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map 001-2-4: Library warps 001-2-4,48,41,0 warp #001-2-4_48_41 0,0,001-1,51,81 -001-2-4,57,26,0 warp #001-2-4_57_26 3,0,001-2-6,57,36 +001-2-4,57,27,0 warp #001-2-4_57_27 3,0,001-2-6,57,36 001-2-4,52,27,0 script #001-2-4_52_27_h NPC_HIDDEN,0,0,{ OnTouch: warp "001-2-5", 28, 37; diff --git a/npc/008-1-1/_import.txt b/npc/008-1-1/_import.txt index 7063c99e..ea6fd468 100644 --- a/npc/008-1-1/_import.txt +++ b/npc/008-1-1/_import.txt @@ -1,2 +1,3 @@ // Map 008-1-1: Woodland // This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/008-1-1/_warps.txt", diff --git a/npc/008-1-1/_warps.txt b/npc/008-1-1/_warps.txt new file mode 100644 index 00000000..8dc1e0b5 --- /dev/null +++ b/npc/008-1-1/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-1-1: Woodland warps +008-1-1,247,85,0 warp #008-1-1_247_85 0,1,008-1,21,85 diff --git a/npc/008-1/_import.txt b/npc/008-1/_import.txt index 444d8d9f..12348cb0 100644 --- a/npc/008-1/_import.txt +++ b/npc/008-1/_import.txt @@ -2,9 +2,15 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-1/_mobs.txt", "npc/008-1/_warps.txt", +"npc/008-1/auldsbel.txt", +"npc/008-1/banu.txt", "npc/008-1/confused-tree.txt", -"npc/008-1/doors.txt", "npc/008-1/hinnak.txt", +"npc/008-1/lady.txt", "npc/008-1/lumberjack.txt", "npc/008-1/mapflags.txt", +"npc/008-1/milly.txt", +"npc/008-1/oscar.txt", +"npc/008-1/snarfles.txt", +"npc/008-1/voltain.txt", "npc/008-1/wateranimation.txt", diff --git a/npc/008-1/_warps.txt b/npc/008-1/_warps.txt index ab1728ed..46e9891d 100644 --- a/npc/008-1/_warps.txt +++ b/npc/008-1/_warps.txt @@ -24,3 +24,4 @@ 008-1,257,130,0 warp #008-1_257_130 0,0,008-2-28,25,31 008-1,233,131,0 warp #008-1_233_131 0,0,008-2-29,36,24 008-1,287,133,0 warp #008-1_287_133 0,0,008-2-30,52,39 +008-1,20,85,0 warp #008-1_20_85 0,1,008-1-1,246,85 diff --git a/npc/008-1/auldsbel.txt b/npc/008-1/auldsbel.txt new file mode 100644 index 00000000..cf4cd16e --- /dev/null +++ b/npc/008-1/auldsbel.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Auldsbel the Magician. +// THIS IS A PLACEHOLDER! + +008-1,119,114,0 script Auldsbel#008-1 NPC_WIZARD,{ + speech + l("Hello."), + l("Oh, you look more interested in magic.. the brotherhood did forbid most of the interesting paths of magic, but boring baby spells are still allowed."), + lg("If you come back later, I may teach you something. But psst, practising magic is quite dangerous these days."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1/banu.txt b/npc/008-1/banu.txt new file mode 100644 index 00000000..d8040153 --- /dev/null +++ b/npc/008-1/banu.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Banu, the old lady. +// THIS IS A PLACEHOLDER! + +008-1,244,88,0 script Banu#008-1 NPC_OLD_LADY,{ + speech + l("Hello."), + l("You don't have a scythe, by chance? I am too old to mew this field all alone."), + l("I asked Hinnak, but he wants at least a beer in exchange for his scythe."), + lg("But I hate alcohol, so thats not an option for me."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-1/hinnak.txt b/npc/008-1/hinnak.txt index 9fbcb959..13f06be7 100644 --- a/npc/008-1/hinnak.txt +++ b/npc/008-1/hinnak.txt @@ -325,15 +325,15 @@ OnPCBaseLvUpEvent: OnInit: .min_level = 15; // min level to do the quest - .monster_id = Fluffy; // monster to kill // FIXME: change this when we have pinkies - .monster_drop = FluffyFur; // monster drop to collect // FIXME: change this when we have pinkies + .monster_id = Pinkie; // monster to kill + .monster_drop = PinkAntennae; // monster drop to collect .drop_count = 10; // amount of that drop needed .kill_count = 10; // min number of kills - .reward_item = WoodenSword; // reward item // FIXME: change this when we have he Scythe + .reward_item = Scythe; // reward item .reward_money = 0; // reward money .reward_exp = 0; // reward exp - .bad_hat = BrimmedFlowerHat; // hinnak attacks you when you wear this hat // FIXME: make this pinky hat when we get it - .drink_item = PumpkishJuice; // the item hinnak asks to drink // FIXME: make this beer when we have it + .bad_hat = PinkieHat; // hinnak attacks you when you wear this hat + .drink_item = Beer; // the item hinnak asks to drink .quest = HurnscaldQuests_Hinnak; .quest_inspector = HurnscaldQuests_Inspector; diff --git a/npc/008-1/lady.txt b/npc/008-1/lady.txt new file mode 100644 index 00000000..8d7869eb --- /dev/null +++ b/npc/008-1/lady.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Old Lady in the flower field. +// THIS IS A PLACEHOLDER! + +008-1,231,114,0 script Lady#008-1 NPC_OLD_LADY,{ + speech + l("Oh, good day to you."), + l("Aren't these flowers lovely? I wish I could stay here all day."), + lg("I wish you the best, see you around."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-1/lumberjack.txt b/npc/008-1/lumberjack.txt index 46039968..c158e5a6 100644 --- a/npc/008-1/lumberjack.txt +++ b/npc/008-1/lumberjack.txt @@ -4,7 +4,7 @@ // Description: // The Legendary Lumberjack. -001-1,241,116,0 script Lumberjack NPC_LUMBERJACK,{ +008-1,241,116,0 script Lumberjack NPC_LUMBERJACK,{ speech l("Oh hey!"), lg("If you feel bored or anxious, you can always pixel an axe. Wait, what does that even mean?"); diff --git a/npc/008-1/milly.txt b/npc/008-1/milly.txt new file mode 100644 index 00000000..93daaa9a --- /dev/null +++ b/npc/008-1/milly.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Little Milly, looking for a new hero. +// THIS IS A PLACEHOLDER! + +008-1,282,114,0 script Milly#008-1 NPC_GIRL_MILLY,{ + speech + l("Oh, hi."), + l("Are you a hero? For sure not such a great hero than Kfahr!"), + l("If you could prove it, I would give you my Beanie Copter, but unfortunately someone threw it away."), + lg("My beautiful Beanie Copter!"); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-1/oscar.txt b/npc/008-1/oscar.txt new file mode 100644 index 00000000..9541da7b --- /dev/null +++ b/npc/008-1/oscar.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Oscar the farmer. +// THIS IS A PLACEHOLDER! + +008-1,160,77,0 script Oscar#008-1 NPC_CAUL,{ + speech + l("Hi, my name is Oscar."), + l("I used to be a farmer, but my magic attempts were banned by the gouvernment."), + lg("Now I remain poor and unemployed."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1/snarfles.txt b/npc/008-1/snarfles.txt new file mode 100644 index 00000000..6ad08867 --- /dev/null +++ b/npc/008-1/snarfles.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Snarfles the mouboo farmer. +// THIS IS A PLACEHOLDER! + +008-1,79,118,0 script Snarfles#008-1 NPC_SNARFLES,{ + speech + l("My Mouboos, my beloved Mouboos!"), + l("Oh, hi, isn't it cool to live among all those Mouboos? I don't understand how some people can eat Mouboo steak."), + lg("Murderers!"); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1/voltain.txt b/npc/008-1/voltain.txt new file mode 100644 index 00000000..b5f82db0 --- /dev/null +++ b/npc/008-1/voltain.txt @@ -0,0 +1,19 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Voltain the dark druid. +// THIS IS A PLACEHOLDER! + +008-1,182,155,0 script Voltain#008-1 NPC_DARK_DRUID,{ + speech + l("Go away, I have to think about new evil doings."), + lg("GO AWAY, I SAID!"); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-0/celestia.txt b/npc/008-2-0/celestia.txt index 50d189a7..d6ce7bc5 100644 --- a/npc/008-2-0/celestia.txt +++ b/npc/008-2-0/celestia.txt @@ -5,7 +5,7 @@ // Our beloved Princess Celestia. // THIS IS A PLACEHOLDER! -008-2-0,38,35,0 script Celestia NPC_CELESTIA,{ +008-2-0,30,23,0 script Celestia NPC_CELESTIA,{ speech l("Hi!"), lg("You may remember me, I am Celestia."); diff --git a/npc/008-2-1/generalstore.txt b/npc/008-2-1/generalstore.txt index ac409800..73b24a5e 100644 --- a/npc/008-2-1/generalstore.txt +++ b/npc/008-2-1/generalstore.txt @@ -5,11 +5,11 @@ // General Store. // THIS IS A PLACEHOLDER! -008-1,38,35,0 script Generalstore#008-1 NPC_GENERAL_STORE,{ +008-2-1,38,35,0 script Generalstore#008-1 NPC_GENERAL_STORE,{ speech l("Hi!"), - lg("My name is General Store, they still call me this although I left the army a few years ago."); - l("I have nothing to sell, come back later."); + l("My name is General Store, they still call me this although I left the army a few years ago."); + lg("I have nothing to sell, come back later."); close; diff --git a/npc/008-2-1/inspector.txt b/npc/008-2-1/inspector.txt index 62157207..7bcc7cb0 100644 --- a/npc/008-2-1/inspector.txt +++ b/npc/008-2-1/inspector.txt @@ -5,11 +5,11 @@ // The Inspector not willing to do his job. // THIS IS A PLACEHOLDER! -008-1,30,34,0 script Inspector#008-1 NPC_INSPECTOR,{ +008-2-1,30,34,0 script Inspector#008-1 NPC_INSPECTOR,{ speech l("Oh hey!"), - lg("Got a beer for me? No? Then I am too busy for your stupid problems."); - l("Go away, and bring a beer next time you pass by."); + l("Got a beer for me? No? Then I am too busy for your stupid problems."); + lg("Go away, and bring a beer next time you pass by."); close; diff --git a/npc/008-2-1/richard.txt b/npc/008-2-1/richard.txt index f71f52d0..958ecab4 100644 --- a/npc/008-2-1/richard.txt +++ b/npc/008-2-1/richard.txt @@ -5,11 +5,11 @@ // Richard the Hurns storage guy. // THIS IS A PLACEHOLDER! -008-1,26,35,0 script Richard#008-1 NPC_RICHARD_LEGACY,{ +008-2-1,26,35,0 script Richard#008-1 NPC_RICHARD_LEGACY,{ speech l("Oh hey!"), - lg("I was supposed to act as storagekeeper, but I forgot my key."); - l("Come back later, perhaps I can find it."); + l("I was supposed to act as storagekeeper, but I forgot my key."); + lg("Come back later, perhaps I can find it."); close; diff --git a/npc/008-2-10/airlia.txt b/npc/008-2-10/airlia.txt index fa16659b..cb7aced2 100644 --- a/npc/008-2-10/airlia.txt +++ b/npc/008-2-10/airlia.txt @@ -2,14 +2,14 @@ // Author: // Micksha // Description: -// Airlia, the girl in the townhall. +// Airlia, the major's daughter. // THIS IS A PLACEHOLDER! -008-2-10,41,29,0 script Airlia NPC_AIRLIA,{ - speech - l("Hi!"), - lg("Did you visit the graveyard already? I havent met people coming back alive for ages."); - l("There must be cruel things going on."); +008-2-10,42,29,0 script Airlia#008-2-8 NPC_AIRLIA,{ + speech + l("Hello."), + l("Do you know where the graveyard is?"), + lg("No? Better is that. Its so dangerous there."); close; diff --git a/npc/008-2-12/_import.txt b/npc/008-2-12/_import.txt index 88a854e4..f5f593a2 100644 --- a/npc/008-2-12/_import.txt +++ b/npc/008-2-12/_import.txt @@ -2,3 +2,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-12/_warps.txt", "npc/008-2-12/mapflags.txt", +"npc/008-2-12/nurse.txt", diff --git a/npc/008-2-12/nurse.txt b/npc/008-2-12/nurse.txt new file mode 100644 index 00000000..4fd65257 --- /dev/null +++ b/npc/008-2-12/nurse.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Hurnscald Nurse. +// THIS IS A PLACEHOLDER! + +008-2-12,28,30,0 script Nurse#008-2-12 NPC_NURSE_LEGACY,{ + speech + l("Hey."), + l("The doctor is upstairs, but perhaps he can't help you much today."), + lg("Just smile, everything will be better soon then."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-2-13/_import.txt b/npc/008-2-13/_import.txt index a4b0330e..ec6a73b7 100644 --- a/npc/008-2-13/_import.txt +++ b/npc/008-2-13/_import.txt @@ -2,4 +2,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-13/_savepoints.txt", "npc/008-2-13/_warps.txt", +"npc/008-2-13/lena.txt", "npc/008-2-13/mapflags.txt", diff --git a/npc/008-2-13/lena.txt b/npc/008-2-13/lena.txt new file mode 100644 index 00000000..df9f38e9 --- /dev/null +++ b/npc/008-2-13/lena.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Lena the Bowwoman. +// THIS IS A PLACEHOLDER! + +008-2-13,27,27,0 script Lena#008-2-13 NPC_LENA,{ + speech + l("Hey."), + l("Did you hear about the Bandit's attacks? They must have a hideout somewhere outside Hurnscald."), + lg("I will inform you when I have more information about all this."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-2-14/_import.txt b/npc/008-2-14/_import.txt index 29a984e8..818ced88 100644 --- a/npc/008-2-14/_import.txt +++ b/npc/008-2-14/_import.txt @@ -2,4 +2,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-14/_savepoints.txt", "npc/008-2-14/_warps.txt", +"npc/008-2-14/doctor.txt", "npc/008-2-14/mapflags.txt", diff --git a/npc/008-2-14/doctor.txt b/npc/008-2-14/doctor.txt new file mode 100644 index 00000000..2a450ae2 --- /dev/null +++ b/npc/008-2-14/doctor.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The crazy Hurnscald Doctor. +// THIS IS A PLACEHOLDER! + +008-2-14,27,27,0 script Doctor#008-2-14 NPC_DOCTOR_LEGACY,{ + speech + l("Hey."), + l("Do you have some kind of pain?"), + lg("Oh, I see. You should go see your pixcialist."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-2-17/_import.txt b/npc/008-2-17/_import.txt index d90289e3..854dad03 100644 --- a/npc/008-2-17/_import.txt +++ b/npc/008-2-17/_import.txt @@ -1,3 +1,5 @@ // Map 008-2-17: Mining Camp // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-17/_warps.txt", +"npc/008-2-17/angus.txt", +"npc/008-2-17/caul.txt", diff --git a/npc/008-2-17/angus.txt b/npc/008-2-17/angus.txt new file mode 100644 index 00000000..3efeefb6 --- /dev/null +++ b/npc/008-2-17/angus.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Angus the Smith. +// THIS IS A PLACEHOLDER! + +008-2-17,34,47,0 script Angus#008-2-17 NPC_ANGUS_THE_SMITH,{ + speech + l("Hello."), + l("Do you need your pickaxe or your shovel fixed? Then I am your man."), + lg("If you want to play with unicorns, you better piss off now."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-17/caul.txt b/npc/008-2-17/caul.txt new file mode 100644 index 00000000..41c5488c --- /dev/null +++ b/npc/008-2-17/caul.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Caul the Alchemist. +// THIS IS A PLACEHOLDER! + +008-2-17,40,33,0 script Caul#008-2-17 NPC_CAUL,{ + speech + l("Hi there."), + l("Don't you like the smoke, when there is a nice fire beneath a cauldron?"), + lg("Honestly, sometimes I prefer nice explosions. Better keep back!"); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-18/_import.txt b/npc/008-2-18/_import.txt index 4f791e6f..5035c75c 100644 --- a/npc/008-2-18/_import.txt +++ b/npc/008-2-18/_import.txt @@ -1,3 +1,4 @@ // Map 008-2-18: Mining Camp First Floor // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-18/_warps.txt", +"npc/008-2-18/malik.txt", diff --git a/npc/008-2-18/malik.txt b/npc/008-2-18/malik.txt new file mode 100644 index 00000000..3d43332c --- /dev/null +++ b/npc/008-2-18/malik.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Malik. +// THIS IS A PLACEHOLDER! + +008-2-18,32,24,0 script Malik#008-2-18 NPC_MALIK,{ + speech + l("Hi there."), + l("My name is Malik. I used to make the finest Gempowder. But since Overlord WildX prohibited magic in Hurns, and along with this making gem powders, I can only try to melt gem shards into crude gems."), + l("Anyhow, this does not work well yet. Perhaps you should come back later."), + lg("Psst, if one day you may need gem powder, meet me in the basement."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-2/_import.txt b/npc/008-2-2/_import.txt index f93e2ae3..e7ccd597 100644 --- a/npc/008-2-2/_import.txt +++ b/npc/008-2-2/_import.txt @@ -1,5 +1,10 @@ // Map 008-2-2: The Rusty Pick // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-2/_warps.txt", +"npc/008-2-2/bartender.txt", +"npc/008-2-2/kfahr.txt", "npc/008-2-2/mapflags.txt", "npc/008-2-2/melinda.txt", +"npc/008-2-2/micksha.txt", +"npc/008-2-2/receptionist.txt", +"npc/008-2-2/roamingo.txt", diff --git a/npc/008-2-2/bartender.txt b/npc/008-2-2/bartender.txt new file mode 100644 index 00000000..eb3b9393 --- /dev/null +++ b/npc/008-2-2/bartender.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Bartender of the Rusty Pick. +// THIS IS A PLACEHOLDER! + +008-2-2,43,28,0 script Bartender#008-1 NPC_GENERAL_STORE,{ + speech + l("Hi!"), + l("I am the Bartender here, the name doesnt matter at all."); + lg("If you need something, please ask this beautiful girl on my right. (She needs the tip)."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-2/kfahr.txt b/npc/008-2-2/kfahr.txt new file mode 100644 index 00000000..0ffae5df --- /dev/null +++ b/npc/008-2-2/kfahr.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Kfahr the hero. +// THIS IS A PLACEHOLDER! + +008-2-2,44,36,0 script Kfahr#008-2-2 NPC_YOUNG_MAN_KFAHR,{ + speech + l("Oh hey *hicks*"), + l("This waitress *hicks* is great, she never stops to bring beer *hicks."); + lg("When I am less busy *hicks*, I can tell you stories of my heroism."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-2/micksha.txt b/npc/008-2-2/micksha.txt new file mode 100644 index 00000000..099bff34 --- /dev/null +++ b/npc/008-2-2/micksha.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Drinker Micksha +// THIS IS A PLACEHOLDER! + +008-2-2,46,34,0 script Micksha#008-2-2 NPC_DRINKER_MICKSHA,{ + speech + l("Hello Sir *hicks*."), + l("Umm, can you perhaps spring for a beer? *hicks* I'm broken."); + lg("*burp* ... ."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-2/receptionist.txt b/npc/008-2-2/receptionist.txt new file mode 100644 index 00000000..3d9a8e0f --- /dev/null +++ b/npc/008-2-2/receptionist.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Receptionist of Rusty Pick. +// THIS IS A PLACEHOLDER! + +008-2-2,28,27,0 script Receptionist#008-2-2 NPC_AIRLIA,{ + speech + l("Hello Sir."), + l("Welcome to the Rusty Pick. Sorry, we have no room left today."); + l("One advice: Don't take the things the Drinkers say too serious. They are sitting here and drinking all day."); + lg("I wish you a beautiful day".) + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-2/roamingo.txt b/npc/008-2-2/roamingo.txt new file mode 100644 index 00000000..98c82ef8 --- /dev/null +++ b/npc/008-2-2/roamingo.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Drinker Roamingo +// THIS IS A PLACEHOLDER! + +008-2-2,43,34,0 script Roamingo#008-2-2 NPC_DRINKER_ROAMINGO,{ + speech + l("Oh hi my friend *hicks*"), + l("Eh... shiver me timbers! *hicks* Where did you find this hat??"); + lg("Know what *hicks*, if you give me the hat, the next round will be on me."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-4/_import.txt b/npc/008-2-4/_import.txt index 8ab4d742..61c043be 100644 --- a/npc/008-2-4/_import.txt +++ b/npc/008-2-4/_import.txt @@ -3,3 +3,4 @@ "npc/008-2-4/_savepoints.txt", "npc/008-2-4/_warps.txt", "npc/008-2-4/mapflags.txt", +"npc/008-2-4/olana.txt", diff --git a/npc/008-2-4/olana.txt b/npc/008-2-4/olana.txt new file mode 100644 index 00000000..c16e8887 --- /dev/null +++ b/npc/008-2-4/olana.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Olana, the old woman who is looking for her daughter Rossy. +// THIS IS A PLACEHOLDER! + +008-2-4,30,28,0 script Olana#008-2-4 NPC_OLANA,{ + speech + l("Oh, a traveller. Welcome."), + l("Did you see my daughter Rossy, by chance?"), + l("She wasn't at home for two days now. I worry about her!"), + lg("If you see her, please tell her to come home."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-6/_import.txt b/npc/008-2-6/_import.txt index 4630df43..ceb45513 100644 --- a/npc/008-2-6/_import.txt +++ b/npc/008-2-6/_import.txt @@ -1,4 +1,6 @@ // Map 008-2-6: Two Guys One Bed // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-6/_warps.txt", +"npc/008-2-6/alan.txt", +"npc/008-2-6/apprentice.txt", "npc/008-2-6/mapflags.txt", diff --git a/npc/008-2-6/alan.txt b/npc/008-2-6/alan.txt new file mode 100644 index 00000000..c5f6aae5 --- /dev/null +++ b/npc/008-2-6/alan.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Alan the bow-seller. +// THIS IS A PLACEHOLDER! + +008-2-6,31,25,0 script Alan#008-2-4 NPC_KFAHR,{ + speech + l("Hi Sir."), + l("Bad timing when you are asking for bows. Our bowmaker Gumi hasn't been seen for days now."), + lg("Come back later, perhaps we are lucky and he teaches you how to chop trees for wood."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-6/apprentice.txt b/npc/008-2-6/apprentice.txt new file mode 100644 index 00000000..04d05562 --- /dev/null +++ b/npc/008-2-6/apprentice.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Alan's Apprentice. +// THIS IS A PLACEHOLDER! + +008-2-6,29,27,0 script Apprentice#008-2-6 NPC_YOUNG_MAN_APPRENTICE,{ + speech + l("Hi Sir."), + l("Sorry, we are sold out for today."), + lg("Come back later."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-7/_import.txt b/npc/008-2-7/_import.txt index 263e5dcf..4cb38df9 100644 --- a/npc/008-2-7/_import.txt +++ b/npc/008-2-7/_import.txt @@ -3,3 +3,4 @@ "npc/008-2-7/_savepoints.txt", "npc/008-2-7/_warps.txt", "npc/008-2-7/mapflags.txt", +"npc/008-2-7/wyara.txt", diff --git a/npc/008-2-7/wyara.txt b/npc/008-2-7/wyara.txt new file mode 100644 index 00000000..a875544a --- /dev/null +++ b/npc/008-2-7/wyara.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Wyara the witch. +// THIS IS A PLACEHOLDER! + +008-2-7,27,28,0 script Wyara#008-2-7 NPC_DARK_DRUID,{ + speech + l("What? Is there someone?"), + l("Please, leave me alone. I have to pixel potions."), + lg("I will sell some when you return a bit later."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-2-8/_import.txt b/npc/008-2-8/_import.txt index d3346591..8b3da720 100644 --- a/npc/008-2-8/_import.txt +++ b/npc/008-2-8/_import.txt @@ -1,4 +1,6 @@ // Map 008-2-8: Hurnscald Forge // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-8/_warps.txt", +"npc/008-2-8/apprentice.txt", "npc/008-2-8/mapflags.txt", +"npc/008-2-8/nicholas.txt", diff --git a/npc/008-2-8/apprentice.txt b/npc/008-2-8/apprentice.txt new file mode 100644 index 00000000..e15e7db7 --- /dev/null +++ b/npc/008-2-8/apprentice.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The Smith's apprentice. +// THIS IS A PLACEHOLDER! + +008-2-8,38,29,0 script Apprentice#008-2-8 NPC_YOUNG_MAN_APPRENTICE,{ + speech + l("Hi Sir."), + l("If you bring us ores, we will be able to make the finest equipment."), + lg("Come back a bit later when you are interested."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-8/nicholas.txt b/npc/008-2-8/nicholas.txt new file mode 100644 index 00000000..9dab65e8 --- /dev/null +++ b/npc/008-2-8/nicholas.txt @@ -0,0 +1,19 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Nicholas the Smith. +// THIS IS A PLACEHOLDER! + +008-2-8,39,27,0 script Nicholas#008-2-8 NPC_NICHOLAS,{ + speech + l("Hi Sir."), + lg("If you need stable metal gear, you are right! But first I must bring the steel atoms in the right order, hold on."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} -- cgit v1.2.3-60-g2f50 From 6303de960510211e4be4569cc1c585d1f5a8e980 Mon Sep 17 00:00:00 2001 From: Micksha Date: Tue, 23 Oct 2018 16:22:23 +0200 Subject: Add Mundane and Sophialla --- db/constants.conf | 2 ++ npc/001-1/sophialla.txt | 20 ++++++++++++++++++++ npc/001-3-0/mundane.txt | 20 ++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 npc/001-1/sophialla.txt create mode 100644 npc/001-3-0/mundane.txt diff --git a/db/constants.conf b/db/constants.conf index f75c7e98..043ce489 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -4116,6 +4116,8 @@ constants_db: { NPC_LUMBERJACK: 452 NPC_HINNAK: 453 NPC_RICHARD_LEGACY: 454 + NPC_SOPHIALLA: 455 + NPC_MUNDANE: 456 NPC_TEST1: 800 NPC_PLAYER: 801 diff --git a/npc/001-1/sophialla.txt b/npc/001-1/sophialla.txt new file mode 100644 index 00000000..ad4d508a --- /dev/null +++ b/npc/001-1/sophialla.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Sophialla, the connection between Artis and the Brotherhood in Hurns. +// THIS IS A PLACEHOLDER! + +001-1,73,40,0 script Sophialla#001-1 NPC_SOPHIALLA,{ + speech + l("Hello."), + l("Can't you see I am reading? If you need something, tell me the secret password."); + lg("If you don't know it, just go, please."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/001-3-0/mundane.txt b/npc/001-3-0/mundane.txt new file mode 100644 index 00000000..51ffb1bd --- /dev/null +++ b/npc/001-3-0/mundane.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Mundane, Monas dad, lost in sewers. +// THIS IS A PLACEHOLDER! + +001-3-0,97,66,0 script Mundane#001-3-0 NPC_MUNDANE,{ + speech + l("Oh, Hi."), + l("I didn't expect someone coming here. I need help."); + lg("Do you know the way out of here? My daughter Mona may worry already."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} -- cgit v1.2.3-60-g2f50 From e58920d7a3a1796a182f67b71a77cb86e79370fc Mon Sep 17 00:00:00 2001 From: Micksha Date: Tue, 23 Oct 2018 20:50:48 +0200 Subject: bugfix a few NPCs --- npc/008-2-2/receptionist.txt | 6 +++--- npc/008-2-6/alan.txt | 2 +- npc/placeholder/hinnak.txt | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/npc/008-2-2/receptionist.txt b/npc/008-2-2/receptionist.txt index 3d9a8e0f..cf95616e 100644 --- a/npc/008-2-2/receptionist.txt +++ b/npc/008-2-2/receptionist.txt @@ -8,9 +8,9 @@ 008-2-2,28,27,0 script Receptionist#008-2-2 NPC_AIRLIA,{ speech l("Hello Sir."), - l("Welcome to the Rusty Pick. Sorry, we have no room left today."); - l("One advice: Don't take the things the Drinkers say too serious. They are sitting here and drinking all day."); - lg("I wish you a beautiful day".) + l("Welcome to the Rusty Pick. Sorry, we have no room left today."), + l("One advice: Don't take the things the Drinkers say too serious. They are sitting here and drinking all day."), + lg("I wish you a beautiful day".); close; diff --git a/npc/008-2-6/alan.txt b/npc/008-2-6/alan.txt index c5f6aae5..b34f7bef 100644 --- a/npc/008-2-6/alan.txt +++ b/npc/008-2-6/alan.txt @@ -5,7 +5,7 @@ // Alan the bow-seller. // THIS IS A PLACEHOLDER! -008-2-6,31,25,0 script Alan#008-2-4 NPC_KFAHR,{ +008-2-6,31,25,0 script Alan#008-2-4 NPC_YOUNG_MAN_KFAHR,{ speech l("Hi Sir."), l("Bad timing when you are asking for bows. Our bowmaker Gumi hasn't been seen for days now."), diff --git a/npc/placeholder/hinnak.txt b/npc/placeholder/hinnak.txt index f4937f4b..0dd211fd 100644 --- a/npc/placeholder/hinnak.txt +++ b/npc/placeholder/hinnak.txt @@ -332,7 +332,7 @@ OnInit: .reward_money = 0; // reward money .reward_exp = 0; // reward exp .bad_hat = BrimmedFlowerHat; // hinnak attacks you when you wear this hat // FIXME: make this pinky hat when we get it - .drink_item = PumpkishJuice; // the item hinnak asks to drink // FIXME: make this beer when we have it + .drink_item = Beer; // the item hinnak asks to drink // FIXME: make this beer when we have it .quest = HurnscaldQuests_Hinnak; .quest_inspector = HurnscaldQuests_Inspector; -- cgit v1.2.3-60-g2f50 From 59cff626dfbfd2bf320a82a06e8fb87503618f86 Mon Sep 17 00:00:00 2001 From: Micksha Date: Tue, 23 Oct 2018 21:38:59 +0200 Subject: fix Receptionist script *meh* --- npc/008-2-2/receptionist.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npc/008-2-2/receptionist.txt b/npc/008-2-2/receptionist.txt index cf95616e..c3be99c2 100644 --- a/npc/008-2-2/receptionist.txt +++ b/npc/008-2-2/receptionist.txt @@ -10,7 +10,7 @@ l("Hello Sir."), l("Welcome to the Rusty Pick. Sorry, we have no room left today."), l("One advice: Don't take the things the Drinkers say too serious. They are sitting here and drinking all day."), - lg("I wish you a beautiful day".); + lg("I wish you a beautiful day."); close; -- cgit v1.2.3-60-g2f50 From add58540f5da3a3a1782acccf661eb6adac518d9 Mon Sep 17 00:00:00 2001 From: Micksha Date: Wed, 24 Oct 2018 21:03:20 +0200 Subject: Add Gumis scripts - delete placeholders. Disable debugs. --- db/constants.conf | 5 + db/re/item_db.conf | 81 +++++++++ maps/re/008-1.mcache | Bin 6866 -> 6870 bytes npc/001-1/_import.txt | 1 + npc/001-3-0/_import.txt | 1 + npc/008-1/_import.txt | 8 +- npc/008-1/hinnak.txt | 4 +- npc/008-1/jack.txt | 314 ++++++++++++++++++++++++++++++++++ npc/008-1/lady.txt | 20 --- npc/008-1/lumberjack.txt | 19 -- npc/008-1/mikhail.txt | 131 ++++++++++++++ npc/008-1/milly.txt | 108 ++++++++++-- npc/008-1/old-man.txt | 90 ++++++++++ npc/008-1/old-woman.txt | 137 +++++++++++++++ npc/008-1/sabine.txt | 64 +++++++ npc/008-1/soul-menhir.txt | 58 +++++++ npc/008-2-1/inspector.txt | 188 +++++++++++++++++++- npc/008-2-12/nurse.txt | 101 +++++++++-- npc/008-2-14/doctor.txt | 80 +++++++-- npc/008-2-18/malik.txt | 64 +++++-- npc/008-2-19/_import.txt | 1 + npc/008-2-19/books.txt | 60 +++++++ npc/008-2-2/_import.txt | 4 +- npc/008-2-2/ledmitz.txt | 55 ++++++ npc/008-2-2/micksha.txt | 20 --- npc/008-2-2/note.txt | 28 +++ npc/008-2-2/roamingo.txt | 20 --- npc/008-2-24/_import.txt | 1 + npc/008-2-24/troupe-leader.txt | 119 +++++++++++++ npc/008-2-4/_import.txt | 1 + npc/008-2-4/bernard.txt | 230 +++++++++++++++++++++++++ npc/008-2-6/alan.txt | 299 +++++++++++++++++++++++++++++++- npc/008-2-8/_import.txt | 2 +- npc/008-2-8/apprentice.txt | 20 --- npc/008-2-8/macgowan.txt | 24 +++ npc/008-2-8/nicholas.txt | 25 ++- npc/placeholder/alan.txt | 323 ---------------------------------- npc/placeholder/bernard.txt | 230 ------------------------- npc/placeholder/books.txt | 60 ------- npc/placeholder/doctor.txt | 80 --------- npc/placeholder/hinnak.txt | 352 -------------------------------------- npc/placeholder/inspector.txt | 190 -------------------- npc/placeholder/jack.txt | 313 --------------------------------- npc/placeholder/ledmitz.txt | 55 ------ npc/placeholder/macgowan.txt | 21 --- npc/placeholder/malek.txt | 65 ------- npc/placeholder/mikhail.txt | 131 -------------- npc/placeholder/milly.txt | 109 ------------ npc/placeholder/nicholas.txt | 26 --- npc/placeholder/note.txt | 28 --- npc/placeholder/nurse.txt | 101 ----------- npc/placeholder/old-man.txt | 90 ---------- npc/placeholder/old-woman.txt | 137 --------------- npc/placeholder/sabine.txt | 64 ------- npc/placeholder/soul-menhir.txt | 58 ------- npc/placeholder/troupe-leader.txt | 119 ------------- npc/scripts.conf | 20 --- 57 files changed, 2212 insertions(+), 2743 deletions(-) create mode 100644 npc/008-1/jack.txt delete mode 100644 npc/008-1/lady.txt delete mode 100644 npc/008-1/lumberjack.txt create mode 100644 npc/008-1/mikhail.txt create mode 100644 npc/008-1/old-man.txt create mode 100644 npc/008-1/old-woman.txt create mode 100644 npc/008-1/sabine.txt create mode 100644 npc/008-1/soul-menhir.txt create mode 100644 npc/008-2-19/books.txt create mode 100644 npc/008-2-2/ledmitz.txt delete mode 100644 npc/008-2-2/micksha.txt create mode 100644 npc/008-2-2/note.txt delete mode 100644 npc/008-2-2/roamingo.txt create mode 100644 npc/008-2-24/troupe-leader.txt create mode 100644 npc/008-2-4/bernard.txt delete mode 100644 npc/008-2-8/apprentice.txt create mode 100644 npc/008-2-8/macgowan.txt delete mode 100644 npc/placeholder/alan.txt delete mode 100644 npc/placeholder/bernard.txt delete mode 100644 npc/placeholder/books.txt delete mode 100644 npc/placeholder/doctor.txt delete mode 100644 npc/placeholder/hinnak.txt delete mode 100644 npc/placeholder/inspector.txt delete mode 100644 npc/placeholder/jack.txt delete mode 100644 npc/placeholder/ledmitz.txt delete mode 100644 npc/placeholder/macgowan.txt delete mode 100644 npc/placeholder/malek.txt delete mode 100644 npc/placeholder/mikhail.txt delete mode 100644 npc/placeholder/milly.txt delete mode 100644 npc/placeholder/nicholas.txt delete mode 100644 npc/placeholder/note.txt delete mode 100644 npc/placeholder/nurse.txt delete mode 100644 npc/placeholder/old-man.txt delete mode 100644 npc/placeholder/old-woman.txt delete mode 100644 npc/placeholder/sabine.txt delete mode 100644 npc/placeholder/soul-menhir.txt delete mode 100644 npc/placeholder/troupe-leader.txt diff --git a/db/constants.conf b/db/constants.conf index 043ce489..ab0f14cf 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -4062,6 +4062,11 @@ constants_db: { NPC_CAUL: 179 NPC_MALIK: 180 NPC_SNARFLES: 181 + NPC_OLD_MAN_HURNS: 182 + NPC_BERNARD: 183 + NPC_SABINE: 184 + NPC_MIKHAIL: 185 + NPC_TROUPE_LEADER: 186 NPC_CONFUSED_TREE: 400 NPC_ALIGE: 401 diff --git a/db/re/item_db.conf b/db/re/item_db.conf index 7428287d..560cc22b 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -1298,6 +1298,60 @@ item_db: ( doevent "rand_sc_heal::OnUse"; "> }, +{ + Id: 564 + AegisName: "RoastedMaggot" + Name: "Roasted Maggot" + Type: "IT_HEALING" + Buy: 500 + Sell: 50 + Weight: 25 + Job: { + All: true + } + Gender: "SEX_ANY" + Refine: false + ViewSprite: 564 + BindOnEquip: false + BuyingStore: true + Delay: 750 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + @min = 100; + @max = 250; + @delay = 25; + @type = 1; + doevent "rand_sc_heal::OnUse"; + "> +}, +{ + Id: 565 + AegisName: "CherryCake" + Name: "Cherry Cake" + Type: "IT_HEALING" + Buy: 800 + Sell: 75 + Weight: 35 + Job: { + All: true + } + Gender: "SEX_ANY" + Refine: false + ViewSprite: 564 + BindOnEquip: false + BuyingStore: true + Delay: 450 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + @min = 180; + @max = 360; + @delay = 50; + @type = 1; + doevent "rand_sc_heal::OnUse"; + "> +}, { Id: 700 AegisName: "SmallTentacles" @@ -3880,6 +3934,33 @@ item_db: ( Delay: 0 Sprite: 0 }, +{ + Id: 2914 + AegisName: "NohMask" + Name: "Noh Mask" + Type: "IT_ARMOR" + Buy: 25000 + Sell: 5200 + Weight: 150 + Atk: 0 + Matk: 0 + Def: 20 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 15 + Refine: false + ViewSprite: 2914 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, { Id: 3200 AegisName: "Shemagh" diff --git a/maps/re/008-1.mcache b/maps/re/008-1.mcache index e8534b08..8672702d 100644 Binary files a/maps/re/008-1.mcache and b/maps/re/008-1.mcache differ diff --git a/npc/001-1/_import.txt b/npc/001-1/_import.txt index eb522c73..a8cfa7d7 100644 --- a/npc/001-1/_import.txt +++ b/npc/001-1/_import.txt @@ -32,6 +32,7 @@ "npc/001-1/salem.txt", "npc/001-1/shop.txt", "npc/001-1/sign.txt", +"npc/001-1/sophialla.txt", "npc/001-1/taree.txt", "npc/001-1/treeleaf.txt", "npc/001-1/trees.txt", diff --git a/npc/001-3-0/_import.txt b/npc/001-3-0/_import.txt index 320f28ce..5ead6439 100644 --- a/npc/001-3-0/_import.txt +++ b/npc/001-3-0/_import.txt @@ -2,3 +2,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-3-0/_mobs.txt", "npc/001-3-0/_warps.txt", +"npc/001-3-0/mundane.txt", diff --git a/npc/008-1/_import.txt b/npc/008-1/_import.txt index 12348cb0..31bb5966 100644 --- a/npc/008-1/_import.txt +++ b/npc/008-1/_import.txt @@ -6,11 +6,15 @@ "npc/008-1/banu.txt", "npc/008-1/confused-tree.txt", "npc/008-1/hinnak.txt", -"npc/008-1/lady.txt", -"npc/008-1/lumberjack.txt", +"npc/008-1/jack.txt", "npc/008-1/mapflags.txt", +"npc/008-1/mikhail.txt", "npc/008-1/milly.txt", +"npc/008-1/old-man.txt", +"npc/008-1/old-woman.txt", "npc/008-1/oscar.txt", +"npc/008-1/sabine.txt", "npc/008-1/snarfles.txt", +"npc/008-1/soul-menhir.txt", "npc/008-1/voltain.txt", "npc/008-1/wateranimation.txt", diff --git a/npc/008-1/hinnak.txt b/npc/008-1/hinnak.txt index 13f06be7..08b6242a 100644 --- a/npc/008-1/hinnak.txt +++ b/npc/008-1/hinnak.txt @@ -13,7 +13,7 @@ 008-1,270,74,0 script Hinnak#008-1 NPC_HINNAK,{ - if (BaseLevel < .min_level) + if (BaseLevel < .min_level) { npctalk3 generic(1 | 16 | 64); end; @@ -346,7 +346,7 @@ OnInit: // REMOVE THIS CODE WHEN THIS // // NPC IS NO LONGER A WIP ////// //////////////////////////////// -if (!debug) disablenpc(.name$); +//if (!debug) disablenpc(.name$); ///////// UNFINISHED /////////// end; diff --git a/npc/008-1/jack.txt b/npc/008-1/jack.txt new file mode 100644 index 00000000..d8f1ff2d --- /dev/null +++ b/npc/008-1/jack.txt @@ -0,0 +1,314 @@ +// Evol scripts. +// Author: +// gumi +// Quest states (forest bow): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - alan wants to ask jack +// [1] 3 - jack explained problem +// [1] 4 - alan asks to find wood +// [1] 5 - found perfect wood +// [1] 6 - got the bow +// [2] unused +// [3] unused +// [t] unused +// Quest states (wooden shield): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - jack proposes shield +// [1] 3 - player accepted quest +// [1] 4 - got the shield +// [2] unused +// [3] unused +// [t] unused +// Description: +// Jack Lumber, the handsome lumberjack + + +008-1,241,116,0 script Jack NPC_LUMBERJACK,{ + + function bow_intro { + speech(4, + l("Why not?!"), + l("I value my life, that's why!")); + + selectd(l("What do you mean?")); + + speech(4, + l("A week ago, I was going to chop down one of those twigleaf trees in the forest to the southwest."), + l("These twigleafs are the trees that give me the living wood you speak of."), // XXX: were Log Heads named "Twigleaf" at some point in the past? + l("I was just chopping away with my axe, and guess what happened?"), + l("One of its branches hit me!"), + l("At first, I thought it fell down or the wind blew it, but it hurt!"), + l("After I shook it off and struck the tree again with my axe, another branch hit me!"), + l("I got angry and started to chop off all the low-hanging branches so this couldn't happen anymore."), + l("Even after all that though, I still can't believe what happened next.")); + + selectd(l("What happened?")); + + speech(4, + l("You'll think I'm insane if I tell you...")); + + selectd(l("I won't. I promise.")); + + speech(4, + l("Alright, well..."), + l("After I chopped off a few branches, the whole tree started to move!"), + l("Its roots tore out of the earth, all the branches started to wave around, and a face appeared on the trunk."), + l("The whole tree CAME TO LIFE! It was mad!")); + + selectd(l("Did you run away?"), l("Did you fight it?")); + + speech(4, + l("I fought it, of course!"), + l("I took my axe and attacked the beast!"), + l("It hit me here *points at a bruise on his shoulder*, here *lifts his trouser leg to show another bruise*, and here *lifts his shirt and reveals even worse bruises*."), // XXX: that's kinda dirty imho... maybe we could use the narrator? + l("But I didn't give up!"), + l("I chopped away at it, branch after branch, and in the end I chopped off its roots, and it fell to the ground, motionless.")); + + selectd(l("So you beat the monster? Then why are you so scared?")); + + speech(4, + l("Well, I was exhausted and had to rest."), + l("A few minutes passed, and suddenly I was practically surrounded by a dozen or more of these living trees!")); + + selectd(l("Did you fight them too?")); + + speech(4, + l("Are you crazy?"), + l("I barely destroyed one of those beasts."), + l("I was in no shape to fight again!"), + l("I ran away as fast as I could, and lucky for me the monsters aren't that fast on their tiny root legs, Ha!")); + + selectd(l("So, I guess you aren't chopping down trees anymore?")); + + speech(4, + l("I still do; it's my job."), + l("But I'll no longer chop those twigleafs, I'll tell you that."), + l("I know the bow master wants some twigleaf wood, but I don't care."), + l("I won't risk MY life for a few gold pieces!"), + l("If you really want to, just go to the southwest, but I can't help you."), + l("I won't go there ever again.")); + + selectd(l("Southwest you say? OK, thank you.")); + + speech(l("Don't say I didn't warn you!")); + + // What a huge text wall, I feel sorry for the players + + close2; + setq(.quest_bow, 3); + end; + } + + function bow_good_luck { + if (getq(.quest_inspector) == 2) + { + speech(4, + l("Good luck hunting those tree monsters – you'll need it.")); + + selectd(l("Have you seen anything that might be connected to the recent robberies in town?")); + + speech(l("Sorry, no.")); + close; + } + + npctalk3(l("Good luck hunting those tree monsters – you'll need it.")); + end; + } + + function shield_intro { + speech(4, + l("I have an idea."), + l("What would you say about a new shield?")); + + setq(.quest_shield, 2); + + selectd( + l("No thanks."), + l("Yes, please!"), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 2: + speech( + l("All I need is %d %s.", .logs_amount, getitemlink(.logs_item)), + l("This needn't be high quality wood; pretty much any log you can find should work."), + l("Oh, and I'll also need %s E for other materials.", format_number(.shield_cost))); + + close2; + setq(.quest_shield, 3); + end; + case 3: speech(l("Sorry, no.")); close; + } + } + + function bow_congrats { + speech(4, + l("You've finally found that perfect piece of living wood that Alan needs to make a Forest Bow, haven't you?")); + + selectd( + l("I couldn't afford the bow, though..."), + l("No, I'm still looking."), + l("Yes, I've got the Forest bow now."), + l("I'm a melee warrior, I don't need bows."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 3: + if (getq(.quest_bow) <= 5) + { + speech(4, + l("Hrmph."), + l("I'm someone who respects those speaking the truth.")); + } + // fallthrough + case 1: + case 4: + speech(4, + l("You no doubt remember how I struggled with those beasts, fighting for my life."), + l("Scared me, those seven-branched little stumps did!"), + l("Never since that day have I strayed near them, and yet there you are, cutting them down one by one."), + l("I'm proud of you – to dare to fight those trunks is admirable indeed."), + l("You're as strong as if you were my own child!")); + + shield_intro; + break; + case 2: speech(l("You should go talk to Alan again.")); close; + case 5: speech(l("Sorry, no.")); close; + } + } + + function shield_make { + speech(4, + l("Do you have the %d %s and %s E for the shield?", + .logs_amount, getitemlink(.logs_item), format_number(.shield_cost))); + + selectd( + rif(countitem(.logs_item) >= .logs_amount && Zeny >= .shield_cost, + l("Here it is.")), + l("I'll come back later.")); + + if (@menu != 1) { + closeclientdialog(); + close; + } + + speech(4, + l("Have a seat.")); + + narrator(4, + l("Jack saws the logs into pieces and then sands them until they are smooth to the touch."), + l("Applying some strong-smelling liquid, he tans them to a darker hue."), + l("Grabbing one of two leftover pieces, he begins to carve it into a round shape, then repeats this with the second piece – shield handles from what you can tell."), + l("Meanwhile, the sun has dried the other pieces."), + l("Jack places them next to each other, adds a frame, and nails everything together."), + l("The resulting shield looks usable already, but Jack applies another liquid to it and leaves it to dry for a few moments."), + l("Finally, he hands the shield to you.")); + + if (checkweight(.shield_item, 1) != true) + { + speech( + l("It seems you can't carry the %s.", getitemlink(.shield_item)), + l("Come back when you do.")); + close; + } + + if (Zeny < .shield_cost || countitem(.logs_item) < .logs_amount) + close; // double-check + + setq(.quest_shield, 4); + delitem(.logs_item, .logs_amount); + getitem(.shield_item, 1); + Zeny -= .shield_cost; + getexp(.shield_exp, 0); + + speech( + l("Enjoy your new shield!")); + + close; + } + + function wood_daily { + speech(4, + l("I hope that my shield will serve you well!")); + + selectd( + l("Me too."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 2: speech(l("Sorry, no.")); close; + } + + closeclientdialog(); // TODO: daily quest (needs the generic daily quest script) + close; + } + + // OnTalk: + switch (getq(.quest_shield)) + { + case 2: shield_intro; break; + case 3: shield_make; break; + case 4: wood_daily; break; + } + + switch (getq(.quest_bow)) + { + case 3: + case 4: bow_good_luck; break; + case 5: + case 6: bow_congrats; break; + } + + // initial intro + { + speech(4, + l("Hello there!"), + l("My name is Jack Lumber, the enemy of all trees."), + l("If you need some firewood, just let me know.")); + + selectd( + l("I'll keep that in mind."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?")), + rif(getq(.quest_bow) == 2, l("I heard you aren't delivering any more living wood. Why not?"))); + + switch (@menu) + { + case 2: speech(l("Sorry, no.")); close; + case 3: bow_intro; break; + } + + } + + closeclientdialog(); + close; + +OnInit: + .logs_item = RawLog; + .logs_amount = 40; // XXX: maybe nlogn? + .shield_cost = 5000; // XXX: maybe nlogn? + .shield_exp = 2500; + .shield_item = WoodenShield; + + .quest_bow = HurnscaldQuests_ForestBow; + .quest_shield = HurnscaldQuests_WoodenShield; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_bow; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/lady.txt b/npc/008-1/lady.txt deleted file mode 100644 index 8d7869eb..00000000 --- a/npc/008-1/lady.txt +++ /dev/null @@ -1,20 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// Old Lady in the flower field. -// THIS IS A PLACEHOLDER! - -008-1,231,114,0 script Lady#008-1 NPC_OLD_LADY,{ - speech - l("Oh, good day to you."), - l("Aren't these flowers lovely? I wish I could stay here all day."), - lg("I wish you the best, see you around."); - - close; - -OnInit: - .sex = G_FEMALE; - .distance = 2; - end; -} diff --git a/npc/008-1/lumberjack.txt b/npc/008-1/lumberjack.txt deleted file mode 100644 index c158e5a6..00000000 --- a/npc/008-1/lumberjack.txt +++ /dev/null @@ -1,19 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// The Legendary Lumberjack. - -008-1,241,116,0 script Lumberjack NPC_LUMBERJACK,{ - speech - l("Oh hey!"), - lg("If you feel bored or anxious, you can always pixel an axe. Wait, what does that even mean?"); - l("Anyhow, it's better than running around in circles doing nothing."); - - close; - -OnInit: - .sex = G_MALE; - .distance = 2; - end; -} diff --git a/npc/008-1/mikhail.txt b/npc/008-1/mikhail.txt new file mode 100644 index 00000000..3e442499 --- /dev/null +++ b/npc/008-1/mikhail.txt @@ -0,0 +1,131 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - bernard wants roasted maggot +// [1] 3 - brought maggot +// [1] 4 - bernard wants maggot slime +// [1] 5 - brought maggot slime +// [1] 6 - mikhail needs maggot slime +// [1] 7 - brought maggot slime +// [2] unused +// [3] unused +// [t] unused +// Description: +// takes part in the slime soup quest (Bernard) + +008-1,298,95,0 script Mikhail NPC_MIKHAIL,{ + + function soup_scared { + speech 4, + l("Hello..."), + l("I'm supposed to be helping Bernard from the Inn but..."); + + narrator 4, + l("His eyes grow wide"); + + speech 4, + l("Eeekkk another one."); + + narrator + l("It seems that the boy would like to say more, but seems too terrified at the moment."), + l("Maybe you should help someone else first, so that he sees your intentions are good."); + + close; + } + + function soup_intro2 { + speech 4, + l("Bernard sent me to get %d %s from the %s in the fields, but they scare me so bad!", + .third_item_qty, getitemlink(.third_item), getmonsterlink(.third_item_mob)), + l("You look like a nice person."), + l("Would you go get them for me?"); + + selectd + l("Of course, I'll go get them for you."); + + speech + l("Thank you so much!"), + l("I'll wait for you here."); + + setq .quest, 6; + close; + } + + function soup_reminder_slime2 { + speech + l("Did you bring me the %d %s I need?", + .third_item_qty, getitemlink(.third_item)), + l("It doesn't look like you have them all..."); + close; + } + + function soup_reward_slime2 { + speech + l("Did you bring me the %d %s I need?", + .third_item_qty, getitemlink(.third_item)), + l("Ooh!"), + l("Thank you so much!"), + l("I can get back to Bernard now!"); + + if (countitem(.third_item) < .third_item_qty) + close; // double-check + + delitem .third_item, .third_item_qty; + setq .quest, 7; + getexp .third_reward_exp, 0; + close; + } + + function soup_thanks_slime2 { + speech + l("Thanks again for helping me!") + " %%Q"; + + close; + } + + switch(getq(.quest)) + { + + case 0: + case 1: + case 2: + case 3: + case 4: soup_scared; break; + case 5: soup_intro2; break; + case 6: + if (countitem(.third_item) < .third_item_qty) + soup_reminder_slime2; + else + soup_reward_slime2; + break; + default: soup_thanks_slime2; + } + + closeclientdialog(); + close; + +OnInit: + .third_item = MaggotSlime; + .third_item_qty = 5; + .third_item_mob = Maggot; + + .third_reward_exp = 100; + + .quest = HurnscaldQuests_Soup; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/milly.txt b/npc/008-1/milly.txt index 93daaa9a..0ea17a1c 100644 --- a/npc/008-1/milly.txt +++ b/npc/008-1/milly.txt @@ -1,21 +1,109 @@ // Evol scripts. // Author: -// Micksha +// gumi +// Quest states (inspector): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused // Description: -// Little Milly, looking for a new hero. -// THIS IS A PLACEHOLDER! +// robberies in hurnscald -008-1,282,114,0 script Milly#008-1 NPC_GIRL_MILLY,{ - speech - l("Oh, hi."), - l("Are you a hero? For sure not such a great hero than Kfahr!"), - l("If you could prove it, I would give you my Beanie Copter, but unfortunately someone threw it away."), - lg("My beautiful Beanie Copter!"); +008-1,282,114,0 script Milly NPC_GIRL_MILLY,{ + + // TODO: make the actual beanie copter quest after those are finished: + // [X] Inspector quest + // [ ] Bone knife quest + // [ ] Setzer quest + // [ ] Rossy quest + // [ ] Cindy quest + + .@q_inspector = getq(.quest_inspector); + + speech(4, + l("Hello traveler, welcome to Hurnscald."), + l("Have you met Kfahr yet?"), + l("He is the greatest hero that ever walked the land of Hurnscald!")); + + selectd( + l("Hi! No, I haven't seen him yet."), + l("Where can I find him?"), + l("Mh, I don't care for heroes."), + l("Hello, yes I have met him."), + rif(.@q_inspector == 2, l("Have you seen anything strange lately?")), + rif(.@q_inspector == 2, l("Do you know anything about the recent robberies?"))); + + switch (@menu) + { + case 3: + speech(4, + l("What?"), + l("Surely you do not appreciate what a hero he is!"), + l("Mh, or perhaps honor is dead in you; for you to be so slow to comprehend the good that his exploits have wrought for us."), // XXX: this sentence seems too complicated to come from a child's mouth + l("Put on your thinking cap and be propelled into high adventure!"), + l("Go to Kfahr, and listen to his stories."), + l("You can't have met him."), + l("No one who has met him would say such silly things.")); + // fallthrough + + case 1: + speech(4, + l("I highly recommend you seek him out!")); + // fallthrough + + case 2: + speech( + l("He is a regular at the inn, located in the north-west part of town."), + l("If you are lucky he might tell you a story about his adventures.")); + break; + + case 4: + speech( + l("Oh, I hope you stayed and listened to his stories about his adventures.")); + break; + + case 5: + speech( + l("I haven't seen anything strange.")); + break; + + case 6: + speech( + l("No, sorry.")); + break; + } close; OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; // TODO: change this to the milly quest debug when it exists .sex = G_FEMALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-1/old-man.txt b/npc/008-1/old-man.txt new file mode 100644 index 00000000..c2004a7d --- /dev/null +++ b/npc/008-1/old-man.txt @@ -0,0 +1,90 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,290,139,0 script Old Man NPC_OLD_MAN_HURNS,{ + + function oldman_ask { + speech(4, + l("Hi there, need something?")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + speech( + l("I'm sorry, but I didn't see anything."), + l("You should ask my old woman.")); + close; + } + + function oldman_accuse { + speech(4, + l("Found anything new?")); + + selectd( + l("The leader of the troupe said you hung around them a lot while they were in town.")); + + speech( + l("Yes, I hung around the theater a lot."), + l("I was an actor when I was younger."), + l("But I wasn't there that night."), + l("Me and the wife were at home all night.")); + + close2; + setq(.quest_inspector, 8); + end; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 2: oldman_ask; break; + case 7: oldman_accuse; break; + } + + // initial intro + npctalk3(l("Don't let those monsters get to you.")); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_MALE; + .distance = 1; // this npc has bad hearing + .speed = 2000; // this npc is very old + // TODO: move graph (after the Hurnscald map is finalized) + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/old-woman.txt b/npc/008-1/old-woman.txt new file mode 100644 index 00000000..c6ca467b --- /dev/null +++ b/npc/008-1/old-woman.txt @@ -0,0 +1,137 @@ +/// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// Old Lady in the flower field, Robberies in Hurnscald. + +008-1,231,114,0 script Old Woman NPC_OLD_LADY,{ + + function is_inspector { + return (getequipcardid(EQI_HEAD_MID, 0) == NavyBlueCottonDye /*&& + getequipcardid(EQI_HEAD_LOW, 0) == NavyBlueCottonDye*/); // TODO / FIXME: remove the /* */ whenever we have cotton pants + } + + function oldwoman_ask { + speech(4, + l("Hello deary.")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + .@q = getq(.quest_inspector); + + if (!is_inspector()) + { + speech(l("Yes, but I'm only talking to the inspector himself!")); + + close2; + if (.@q < 3) + setq(.quest_inspector, 3); + end; + } + + if (.@q == 2 || .@q == 3) + { + speech( + l("I saw someone sneaking around town wearing a theater mask."), + l("It looked like one of the masks used by the troupe that was in town recently.")); + + close2; + setq(.quest_inspector, 4); + } + + else if (.@q == 10) + { + speech( + l("I've remembered something else."), + l("The night the troupe left, I saw someone with a theater mask take a large satchel out of town."), + l("He was heading north.")); + + close2; + setq(.quest_inspector, 11); + } + + end; + } + + function oldwoman_alibi { + speech(4, + l("Hello deary.")); + + selectd( + l("Was your husband with you at home all night the last night that the troupe was in town?")); + + speech( + l("Yes, we were both at home all night.")); + + close2; + setq(.quest_inspector, 9); + end; + } + + function oldwoman_filler { + npctalk3(l("I hope you catch that naughty person!")); + end; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 2: + case 3: oldwoman_ask; break; + case 4: + case 5: + case 6: + case 7: oldwoman_filler; break; + case 8: + case 9: oldwoman_alibi; break; + case 10: oldwoman_ask; break; + } + + // initial intro + if (BaseLevel < 40) + npctalk3(l("Watch out for these flowers. They don't like to be messed with.")); + else + npctalk3(l("Hello deary.")); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 1; // this npc has bad hearing + .speed = 2000; // this npc is very old + // TODO: move graph (after the Hurnscald map is finalized) + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/sabine.txt b/npc/008-1/sabine.txt new file mode 100644 index 00000000..87026efb --- /dev/null +++ b/npc/008-1/sabine.txt @@ -0,0 +1,64 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,291,97,0 script Sabine NPC_SABINE,{ + + if (getq(.quest_inspector) != 2) + { + npctalk3(generic(1 | 16)); + end; + } + + speech(4, + l("Isn't this place pretty?"), + l("I love hanging out here!")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + speech( + l("No, sorry.")); + + close; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/soul-menhir.txt b/npc/008-1/soul-menhir.txt new file mode 100644 index 00000000..dd1a6e38 --- /dev/null +++ b/npc/008-1/soul-menhir.txt @@ -0,0 +1,58 @@ +// Evol scripts. +// Author: +// gumi +// Description: +// place of power, mana refills faster when sitting nearby + +008-1,253,112,0 script Soul Menhir#hurnscald NPC_NO_SPRITE,{ + + end; + +OnRefill: + @menhir_lock = false; + getmapxy(.@map$, .@x, .@y, UNITTYPE_PC); + + if (.@map$ != .map$ || distance(.x, .y, .@x, .@y) > .refill_distance || + !(issit())) + end; + + heal(0, .refill_rate); + end; + + +OnTimer500: + .@count = getunits(BL_PC, .@units[0], false, .map$, (.x - .refill_distance), + (.y - .refill_distance), (.x + .refill_distance), (.y + .refill_distance)); + + for (.@i = 0; .@i < .@count; ++.@i) + { + if (.@units[.@i] < 0) continue; // pre-check, just in case + deltimer(.name$ + "::OnRefill", .@units[.@i]); + if (gettimer(TIMER_COUNT, .@units[.@i], .name$ + "::OnRefill") > 0 || + getvariableofpc(@menhir_lock, .@units[.@i])) { + continue; + } + set(getvariableofpc(@menhir_lock, .@units[.@i]), true); + addtimer(rand(.refill_timer), .name$ + "::OnRefill", .@units[.@i]); + } + + initnpctimer(); + end; + +OnInit: + + .refill_rate = 1; // number of SP to give every refill + .refill_distance = 7; // max distance + .refill_timer = 200; // wait rand(X) ms before refill + initnpctimer(); + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-1/inspector.txt b/npc/008-2-1/inspector.txt index 7bcc7cb0..725f5cbd 100644 --- a/npc/008-2-1/inspector.txt +++ b/npc/008-2-1/inspector.txt @@ -1,20 +1,190 @@ // Evol scripts. // Author: -// Micksha +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused // Description: -// The Inspector not willing to do his job. -// THIS IS A PLACEHOLDER! +// robberies in hurnscald -008-2-1,30,34,0 script Inspector#008-1 NPC_INSPECTOR,{ - speech - l("Oh hey!"), - l("Got a beer for me? No? Then I am too busy for your stupid problems."); - lg("Go away, and bring a beer next time you pass by."); +008-2-1,30,34,0 script Inspector NPC_INSPECTOR,{ + if (BaseLevel < .min_level) + { + npctalk3(l("I'm sorry, but I'm busy looking into this string of robberies.")); + end; + } + + // OnTalk: + switch (getq(.quest)) + { + case 0: + case 1: + speech(4, + l("Hmm... what to do.")); + narrator(4, + l("He looks up and into your face.")); + speech(4, + l("You look capable, will you help me solve these robberies?"), + l("I would go myself, but for some reason I'm a non-walking NPC.")); + + if (selectd("Yes", "No") == 2) { + closeclientdialog(); + close; + } + + speech( + l("Ok then."), + l("I'd like you to ask the villagers about the recent string of robberies.")); + + close2; + setq(.quest, 2); + end; + + case 2: + npctalk3(l("Please continue talking to the villagers.")); + end; + + case 3: + speech( + l("Hm..."), + l("I don't know if I trust her eyesight or memory."), + l("See if someone else knows anything.")); + close; + + case 4: + speech( + l("Someone in a theater mask, eh?"), + l("There was a traveling theater troupe in town recently, but they've moved on to Tulimshar."), + l("Please go talk to their leader about this.")); + + close2; + setq(.quest, 5); + end; + + case 5: + npctalk3(l("Please go talk to the leader of the traveling troupe about the theater mask.")); + end; + + case 6: + speech( + l("Hm... an old man?"), + l("Could you interrogate him for me?")); + + close2; + setq(.quest, 7); + end; + + case 7: + npctalk3(l("Have you talked with the old man yet?")); + end; + + case 8: + npctalk3(l("Can you verify that with his wife?")); + end; + + case 9: + speech( + l("Hm... then it couldn't be him."), + l("I'm not sure where to go from here, maybe you can find something else."), + l("Try talking to everyone again.")); + + close2; + setq(.quest, 10); + end; + + case 10: + npctalk3(l("Made any progress yet?")); + end; + + case 11: + npctalk3(l("Then go north and investigate!")); + end; + + case 12: + npctalk3(l("Did you look over the basement?")); + end; + + case 13: + speech( + l("What a strange note."), + l("I'll keep track of this, while you return the mask to the troupe."), + l("I would go myself, but the developers were too lazy to make me walk."), + "...", + l("By the way, stay sharp! I may call upon you again.")); + + close2; + setq(.quest, 14); + end; + + case 14: + npctalk3(l("Please return the mask to the traveling troupe.")); + end; + + case 15: + speech( + l("My men have found all of the stolen items."), + l("They were all in the mining camp."), + l("We still don't know who did it.")); // XXX: feel free to extend this quest beyond this point + + close2; + setq(.quest, 16); + getexp(.reward_exp, 0); + end; + + case 16: + npctalk3(l("Remember to stay sharp. I might need your help on another case.")); + end; + } + + closeclientdialog(); close; +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq(.quest, 1); // allow the player to do the quest + dispbottom(l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + OnInit: + .min_level = 20; // min level to do the quest + + .reward_exp = 2500; + + .quest = HurnscaldQuests_Inspector; + .quest_debug = .quest; .sex = G_MALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-2-12/nurse.txt b/npc/008-2-12/nurse.txt index 4fd65257..29452258 100644 --- a/npc/008-2-12/nurse.txt +++ b/npc/008-2-12/nurse.txt @@ -1,20 +1,101 @@ // Evol scripts. // Author: -// Micksha +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused // Description: -// Hurnscald Nurse. -// THIS IS A PLACEHOLDER! +// Hurnscald Nurse. Robberies in Hurnscald. -008-2-12,28,30,0 script Nurse#008-2-12 NPC_NURSE_LEGACY,{ - speech - l("Hey."), - l("The doctor is upstairs, but perhaps he can't help you much today."), - lg("Just smile, everything will be better soon then."); +008-2-12,28,30,0 script Nurse NPC_NURSE_LEGACY,{ - close; + speech(4, + l("How can I help you?")); + + // TODO: check for AxeHat when we get it + // XXX: this npc used to teach the resist poison skill, do we still want that? + + selectd( + l("Oooh, these wounds! They hurt so much!"), + l("I don't feel so well, I might be sick."), + l("No, I'm fine."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything out of the ordinary?"))); + + switch (@menu) + { + case 1: + if (BaseLevel > .heal_max_level) + { + speech( + l("I'm sorry but I'm here only to help young people."), // XXX: this sounds cruel towards elderly people + l("Your level is already higher than %d.", .heal_max_level), + l("You can get some rest at the inn near here.")); + close; + } + speech(4, + l("Here, let me heal you.")); + + npcskill(AL_HEAL, .heal_skill_level, .heal_npc_stats, .heal_npc_level); + + speech( + l("There you go, like new.")); + close; + case 2: + speech( + l("Then you should better see the doctor."), + l("He is usually in his office on the 3rd floor.")); + close; + case 3: + speech( + l("Then I would ask you to leave."), + l("There are people who really need our help.")); + close; + case 4: + speech( + l("I'm too busy here to observe the town.")); + close; + } + + + end; OnInit: + .heal_max_level = 20; // she will only heal low level players + + .heal_skill_level = 10; // what level of the healing skill to use + .heal_npc_stats = 99; // what stat points the NPC has + .heal_npc_level = 60; // what level the npc has + + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; .sex = G_FEMALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-2-14/doctor.txt b/npc/008-2-14/doctor.txt index 2a450ae2..52c8653c 100644 --- a/npc/008-2-14/doctor.txt +++ b/npc/008-2-14/doctor.txt @@ -1,20 +1,80 @@ // Evol scripts. // Author: -// Micksha +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused // Description: // The crazy Hurnscald Doctor. -// THIS IS A PLACEHOLDER! -008-2-14,27,27,0 script Doctor#008-2-14 NPC_DOCTOR_LEGACY,{ - speech - l("Hey."), - l("Do you have some kind of pain?"), - lg("Oh, I see. You should go see your pixcialist."); +008-2-14,27,27,0 script Doctor NPC_DOCTOR_LEGACY,{ - close; + speech(4, + l("Hello, can I help you?")); + + // TODO: check for AxeHat when we get it + // TODO: check for EyePatch when we get it + + selectd( + l("I think I am sick!"), + l("No, I feel fine."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange in town? Anything that might have to do with the robberies?"))); + + switch (@menu) + { + case 1: + narrator(4, + l("The doctor examines you briefly.")); + // TODO: check for poison or other status conditions currently in use + speech( + l("Nonsense!"), + l("You look fine and dandy to me."), + l("All you need is a bit more exercise and fresh fruit in your diet!")); + close; + case 2: + speech( + l("Then please stop wasting my precious time.")); + close; + case 3: + speech( + l("No, I haven't seen anything.")); + close; + } + + + end; OnInit: - .sex = G_FEMALE; - .distance = 2; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-2-18/malik.txt b/npc/008-2-18/malik.txt index 3d43332c..ab95dc92 100644 --- a/npc/008-2-18/malik.txt +++ b/npc/008-2-18/malik.txt @@ -1,21 +1,65 @@ // Evol scripts. // Author: -// Micksha +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused // Description: -// Malik. -// THIS IS A PLACEHOLDER! +// robberies in hurnscald +// TODO: Make Malik prepare Crude Gem from shards, and make him produce Gem Powder later, once the player visited Tulim(dont tell WildX, though) 008-2-18,32,24,0 script Malik#008-2-18 NPC_MALIK,{ - speech - l("Hi there."), - l("My name is Malik. I used to make the finest Gempowder. But since Overlord WildX prohibited magic in Hurns, and along with this making gem powders, I can only try to melt gem shards into crude gems."), - l("Anyhow, this does not work well yet. Perhaps you should come back later."), - lg("Psst, if one day you may need gem powder, meet me in the basement."); + if (getq(.quest_inspector) == 11) + { + speech(4, + l("Hi, can I help you at all?")); - close; + selectd( + l("The inspector sent me here to investigate.")); + + speech(4, + l("Yeah, we did hear a commotion."), + l("We thought we heard someone go down to the basement, but we checked the whole place over and didn't see anything out of the ordinary.")); + + close2; + setq(.quest_inspector, 12); + end; + } + + npctalk3(generic(32 | 256)); + end; OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; .sex = G_MALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-2-19/_import.txt b/npc/008-2-19/_import.txt index c080bfb8..1d12e589 100644 --- a/npc/008-2-19/_import.txt +++ b/npc/008-2-19/_import.txt @@ -1,3 +1,4 @@ // Map 008-2-19: Mining Camp Basement // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-19/_warps.txt", +"npc/008-2-19/books.txt", diff --git a/npc/008-2-19/books.txt b/npc/008-2-19/books.txt new file mode 100644 index 00000000..81cd4b98 --- /dev/null +++ b/npc/008-2-19/books.txt @@ -0,0 +1,60 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-2-19,33,21,0 script bookcase NPC_NO_SPRITE,{ + + if (getq(.quest_inspector) != 12) + { + dispbottom(l("You see an ordinary bookcase.")); + end; + } + + narrator( + l("You see an ordinary bookcase."), + l("Looking over closely, you find a book that is upside down."), + l("The book has been hollowed out."), + l("Inside is a theater mask and a note that you cannot even begin to read.")); + + close2; + setq(.quest_inspector, 13); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .distance = 1; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-2/_import.txt b/npc/008-2-2/_import.txt index e7ccd597..9fc64957 100644 --- a/npc/008-2-2/_import.txt +++ b/npc/008-2-2/_import.txt @@ -3,8 +3,8 @@ "npc/008-2-2/_warps.txt", "npc/008-2-2/bartender.txt", "npc/008-2-2/kfahr.txt", +"npc/008-2-2/ledmitz.txt", "npc/008-2-2/mapflags.txt", "npc/008-2-2/melinda.txt", -"npc/008-2-2/micksha.txt", +"npc/008-2-2/note.txt", "npc/008-2-2/receptionist.txt", -"npc/008-2-2/roamingo.txt", diff --git a/npc/008-2-2/ledmitz.txt b/npc/008-2-2/ledmitz.txt new file mode 100644 index 00000000..5939428e --- /dev/null +++ b/npc/008-2-2/ledmitz.txt @@ -0,0 +1,55 @@ +// Evol scripts. +// Author: +// gumi + +008-2-2,43,34,0 script Ledd NPC_DRINKER_ROAMINGO,{ + // XXX: ^ I know it should be Led and Mitz but 4144 made names + // shorter than 4 characters illegal + + deltimer("Mitz::OnTalk"); + addtimer(rand(500, 900), "Mitz::OnTalk"); +OnTalk: + npctalk3(l("Ha! I'll drink muuuch mo.. more than you! Im not ooone biiit dr...dr..unk!")); + // TODO: add more sentences + // XXX: maybe instead of making them respond to a click they should just + // shout at each other at regular intervals? + end; + +OnInit: + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} + +008-2-2,46,34,0 script Mitz NPC_DRINKER_MICKSHA,{ + + deltimer("Ledd::OnTalk"); + addtimer(rand(500, 900), "Ledd::OnTalk"); +OnTalk: + npctalk3(l("I can still drink more! Better give up you... you... teelotaler! MORE BEER MELINDA!")); + // TODO: add more sentences + end; + +OnInit: + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-2/micksha.txt b/npc/008-2-2/micksha.txt deleted file mode 100644 index 099bff34..00000000 --- a/npc/008-2-2/micksha.txt +++ /dev/null @@ -1,20 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// Drinker Micksha -// THIS IS A PLACEHOLDER! - -008-2-2,46,34,0 script Micksha#008-2-2 NPC_DRINKER_MICKSHA,{ - speech - l("Hello Sir *hicks*."), - l("Umm, can you perhaps spring for a beer? *hicks* I'm broken."); - lg("*burp* ... ."); - - close; - -OnInit: - .sex = G_MALE; - .distance = 2; - end; -} diff --git a/npc/008-2-2/note.txt b/npc/008-2-2/note.txt new file mode 100644 index 00000000..2fcce90f --- /dev/null +++ b/npc/008-2-2/note.txt @@ -0,0 +1,28 @@ +// Evol scripts. +// Author: +// gumi + +008-2-2,32,28,0 script Note#Hurnscald:pub NPC_PAPER_NOTE,{ + narrator(8, + l("We refuse service to anyone who:"), + l("• Has a bubblehead"), + l("• Is not properly shaded"), + l("• Can't walk without stopping after every step")); + + // In case you don't get the joke, know that it's a parody on Illutia. + + close; + +OnInit: + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-2/roamingo.txt b/npc/008-2-2/roamingo.txt deleted file mode 100644 index 98c82ef8..00000000 --- a/npc/008-2-2/roamingo.txt +++ /dev/null @@ -1,20 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// Drinker Roamingo -// THIS IS A PLACEHOLDER! - -008-2-2,43,34,0 script Roamingo#008-2-2 NPC_DRINKER_ROAMINGO,{ - speech - l("Oh hi my friend *hicks*"), - l("Eh... shiver me timbers! *hicks* Where did you find this hat??"); - lg("Know what *hicks*, if you give me the hat, the next round will be on me."); - - close; - -OnInit: - .sex = G_MALE; - .distance = 2; - end; -} diff --git a/npc/008-2-24/_import.txt b/npc/008-2-24/_import.txt index e8f862f4..63cfe25c 100644 --- a/npc/008-2-24/_import.txt +++ b/npc/008-2-24/_import.txt @@ -1,3 +1,4 @@ // Map 008-2-24: Dimond's Cove Ground Floor // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-24/_warps.txt", +"npc/008-2-24/troupe-leader.txt", diff --git a/npc/008-2-24/troupe-leader.txt b/npc/008-2-24/troupe-leader.txt new file mode 100644 index 00000000..8b10fed8 --- /dev/null +++ b/npc/008-2-24/troupe-leader.txt @@ -0,0 +1,119 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-2-24,41,39,0 script Troupe Leader NPC_DIMOND,{ + + function nohmask_question { + // XXX: shouldn't the player ask a question before she replies Yes? this feels too abrupt + speech(4, + l("Yes, a mask was stolen from us the last night we were in Hurnscald.")); + + selectd( + l("Any ideas on who might have taken it?"), + l("Are you sure one of your troupe members didn't hide it and commit those robberies?"), + l("Hmm...")); + + switch (@menu) + { + case 1: + speech( + l("Hm..."), + l("I did see an old man hang out near the theater after our last show.")); + close2; + setq(.quest_inspector, 6); + close; + + case 2: + speech( + l("I am absolutely positive."), + l("None of my troupe have left the city since we got here."), + l("Good day!")); + close; + } + + closeclientdialog(); + close; + } + + function nohmask_found { + // XXX: shouldn't the player say "I found your mask" before the npc says thanks? + speech(4, + l("Thank you for finding the mask."), + l("You did such a good job, you should keep it.")); + + if (checkweight(.reward_item, 1) != true) + { + speech(8, + l("It seems you can't carry it right now...")); + close; + } + + setq(.quest_inspector, 15); + getexp(.reward_exp, 0); + getitem(.reward_item, 1); + + speech( + l("We don't need it anymore."), + l("We're doing different shows here.")); + close; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 5: nohmask_question; break; + // XXX: shouldn't it have an in-between state where it says good luck or something? + case 14: nohmask_found; break; + // XXX: shouldn't it have a "completed" state where it says thanks, come back any time? + } + + // initial intro + speech( + l("Hello."), + l("I'm the leader of a traveling theater troupe."), + l("We'll be staying here in Tulimshar for a while.")); + close; + +OnInit: + .reward_item = NohMask; // FIXME: change this when we get NohMask + .reward_exp = 1500; + + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-4/_import.txt b/npc/008-2-4/_import.txt index 61c043be..826aa135 100644 --- a/npc/008-2-4/_import.txt +++ b/npc/008-2-4/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-4/_savepoints.txt", "npc/008-2-4/_warps.txt", +"npc/008-2-4/bernard.txt", "npc/008-2-4/mapflags.txt", "npc/008-2-4/olana.txt", diff --git a/npc/008-2-4/bernard.txt b/npc/008-2-4/bernard.txt new file mode 100644 index 00000000..a528bcc3 --- /dev/null +++ b/npc/008-2-4/bernard.txt @@ -0,0 +1,230 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - bernard wants roasted maggot +// [1] 3 - brought maggot +// [1] 4 - bernard wants maggot slime +// [1] 5 - brought maggot slime +// [1] 6 - mikhail needs maggot slime +// [1] 7 - brought maggot slime +// [2] unused +// [3] unused +// [t] unused +// Description: +// Bernard wants to make a maggot slime soup + +008-2-4,34,29,0 script Bernard NPC_BERNARD,{ + + if (BaseLevel < .min_level) + { + npctalk3 generic(16 | 32); + end; + } + + function soup_intro { + if (rand(2) == 1) + { + speech 4, + l("The fields are crawling with maggots."), + l("Where is Mikhail?"), + l("What is taking them so long?"), + l("Could I ask a favor of you?"); + } + else + { + speech 4, + l("The taste of maggots in soup is... unforgettable."), + l("They taste simply divine!"), + l("I sent someone to kill me some maggots and they have yet to return."), + l("Would you help me kill some?"); + } + + if (selectd(l("Yes."), l("No.")) == 2) + { + return; + } + + if (rand(2) == 1) + { + speech 4, + l("Great!"), + l("I need a %s for my soup.", getitemlink(.first_item)); + } + else + { + speech 4, + l("Bring me a %s.", getitemlink(.first_item)), + l("I'll give you something if you do."); + } + + speech 8, + l("Please bring it to me!"); + + setq .quest, 2; + close; + } + + function soup_reminder_roasted { + speech + l("Oh, please hurry and bring me a %s.", getitemlink(.first_item)), + l("I'm yearning for maggot soup!"); + close; + } + + function soup_no_room { + speech 1 | 8, + "...", + l("It seems you don't have room for my reward."), + l("I'll wait until you do."); + close; + } + + function soup_reward_roasted { + speech 4, + l("Oooh, perfect! It's perfect!"), + l("You brought me my %s!", getitemlink(.first_item)), + l("Here, have some %s for your troubles.", + getitemlink(.first_reward_item)); + + if (checkweight(.first_reward_item, .first_reward_amount) != true) + soup_no_room; + + if (countitem(.first_item) < 1) + close; + + delitem .first_item, 1; + getitem .first_reward_item, .first_reward_amount; + getexp .first_reward_exp, 0; + setq .quest, 3; + + speech 8, + l("Now let's see..."); + close; + } + + function soup_ask_slime { + speech + l("Thank you so much!"), + l("But... something is missing to make the soup creamy."), + l("I need %d %s for that.", + .second_item_qty, getitemlink(.second_item)), + l("Bring them to me, and I'll give you something nice."); + + setq .quest, 4; + close; + } + + function soup_reminder_slime { + speech + l("Please do hurry and bring me %d %s, so I can finish my soup!", + .second_item_qty, getitemlink(.second_item)); + close; + } + + function soup_reward_slime { + speech + l("Nice!"), + l("They're perfect, just perfect!"), + l("You brought me the %d %s!", + .second_item_qty, getitemlink(.second_item)), + l("Here, have some %s as reward.", + getitemlink(.second_reward_item)); + + if (checkweight(.second_reward_item, .second_reward_amount) != true) + soup_no_room; + + if (countitem(.second_item) < .second_item_qty) + close; + + delitem .second_item, .second_item_qty; + getitem .second_reward_item, .second_reward_amount; + getexp .second_reward_exp, 0; + setq .quest, 5; + + close; + } + + function soup_thanks_slime { + speech + l("I didn't mention it before, but I also put beer in my soup."), + l("I hope you like beer as much as I do, because, you see..."), + l("Beer is life!"); + close; + } + + function soup_thanks_mikhail { + speech + l("My help, Mikhail, finally returned with the slimes I needed."), + l("I wonder what took him so long?"); + close; + } + + + // OnTalk: + switch (getq(.quest)) + { + case 0: + case 1: soup_intro; break; + case 2: + if (countitem(.first_item) < 1) + soup_reminder_roasted; + else + soup_reward_roasted; + break; + case 3: soup_ask_slime; break; + case 4: + if (countitem(.second_item) < .second_item_qty) + soup_reminder_slime; + else + soup_reward_slime; + break; + case 5: + case 6: soup_thanks_slime; break; + default: soup_thanks_mikhail; + } + + closeclientdialog(); + close; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq .quest, 1; // allow the player to do the quest + dispbottom l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 10; // min level to do the quest + + .first_item = RoastedMaggot; + .first_reward_item = CherryCake; + .first_reward_amount = 5; + .first_reward_exp = 100; + + .second_item = MaggotSlime; + .second_item_qty = 3; + .second_reward_item = Beer; + .second_reward_amount = 3; + .second_reward_exp = 100; + + .quest = HurnscaldQuests_Soup; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-6/alan.txt b/npc/008-2-6/alan.txt index b34f7bef..eebd11cd 100644 --- a/npc/008-2-6/alan.txt +++ b/npc/008-2-6/alan.txt @@ -2,19 +2,302 @@ // Author: // Micksha // Description: -// Alan the bow-seller. -// THIS IS A PLACEHOLDER! +// Alan the bow-maker. -008-2-6,31,25,0 script Alan#008-2-4 NPC_YOUNG_MAN_KFAHR,{ - speech - l("Hi Sir."), - l("Bad timing when you are asking for bows. Our bowmaker Gumi hasn't been seen for days now."), - lg("Come back later, perhaps we are lucky and he teaches you how to chop trees for wood."); +008-2-6,32,24,0 script Alan NPC_YOUNG_MAN_KFAHR,{ + function bow_intro { + speech(4, + l("When you want to buy something then please speak to my apprentice."), + l("I am only doing special requests.")); + + selectd( + l("OK, thanks."), + rif(BaseLevel >= .min_level, l("Can you make me a really good bow?")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 3: speech(l("No.")); close; + } + + speech(4, + l("You mean like one of my legendary forest bows?")); + + selectd( + l("Yes, that would be nice.")); + + speech(4, + l("Sorry, I am not making these anymore.")); + + selectd( + l("Oh, too bad."), + l("What? Why not?")); + + if (@menu == 1) { + closeclientdialog(); + close; + } + + speech(4, + l("The problem is that I am short of material."), + l("My forestbows are not made of regular wood, you know."), + l("They are made of special living wood."), + l("And only the best logs of living wood are good enough for them."), + l("I used to get these logs from Jack, the handsome lumberjack."), + l("But the last time I asked him for a new delivery he said that he would never again get any for me.")); + + selectd( + l("Too bad."), + l("Did you ask him why?")); + + if (@menu == 1) { + closeclientdialog(); + close; + } + + speech(4, + l("Sure I did."), + l("But he just told me to leave him alone."), + l("Maybe you could ask him what's wrong?")); + + selectd( + l("OK, I'll ask him."), + l("I am sure he got his reasons.")); + + setq(.quest_bow, 2); + closeclientdialog(); + close; + } + + function bow_reminder { + if (getq(.quest_inspector) == 2) + { + speech(4, + l("Did you already ask Jack why he won't deliver me any more living wood?")); + + selectd( + l("Have you seen anything strange recently that might be connected to the robberies?")); + + speech(l("No.")); + close; + } + + npctalk3(l("Did you already ask Jack why he won't deliver me any more living wood?")); + end; + } + + function bow_explain { + speech(4, + l("Did you already ask Jack why he won't deliver me any more living wood?")); + + selectd( + l("Yes, I did. He said that the trees turned into dangerous monsters."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + if (@menu != 1) + { + speech(l("No.")); + close; + } + + speech( + l("Oh, that's really bad news."), + l("Maybe you can do his job?"), + l("If you kill some of these tree monsters and bring me their wood I could take a look at them."), + l("Maybe you will find a piece of wood that is strong enough to become one of my forest bows.")); + + close2; + setq(.quest_bow, 4); + end; + } + + function bow_make { + speech(4, + l("I can make you a really nice forest bow out of this."), + l("I just need %s E for material and work time.", + format_number(.req_esp))); + + selectd( + l("%s??? What a ripoff!", format_number(.req_esp)), + rif(Zeny >= .req_esp, l("Sure, here you go!")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: speech(l("Fine, I'll just hold on to this log should you ever change your mind.")); close; + case 3: speech(l("No.")); close; + } + + // XXX: maybe here we could make the player wait real-world hours for Alan to finish? + + if (checkweight(.reward_item, 1) != true) + { + speech( + l("It seems you can't carry the bow right now."), + l("Go clean up your inventory and come back.")); + close; + } + + if (Zeny < .req_esp) + close; // double-check + + setq(.quest_bow, 6); + Zeny -= .req_esp; + getitem(.reward_item, 1); + getexp(.reward_exp, 0); + + speech( + l("Here you go - have fun with it.")); + close; + } + + function bow_check_wood { + speech(4, + l("How is the hunt going?"), + l("Did you bring me any wood?")); + + selectd( + l("No, sorry."), + rif(countitem(.req_item) >= 1, l("Here, take a look!")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 3: speech(l("No.")); close; + } + + .@first = true; + + do { + if (countitem(.req_item) < 1) + break; + + if (.@first == false) + { + narrator(4, + l("You hand him another log.")); + } + + delitem(.req_item, 1); + .@first = false; + + speech(4, + l("Hmmm... looks ok, but is it strong enough?")); + + narrator(4, + l("Alan bends the log over his knee.")); + + if (rand(.success_rate) == 0) + { + narrator(4 | 8, + l("Alan tries as hard as he can but the log won't bend.")); + + speech(4, + l("Aaah!"), + l("Yes!"), + l("That is a really fine piece of wood you brought me."), + l("It will make an excellent bow!")); + + setq(.quest_bow, 5); + setq(.quest_shield, 1); + + narrator(4, + l("He proceeds to further scrutinize the log.")); + + bow_make; + end; + } + + narrator(4 | 8, + l("The log breaks with a loud crack.")); + + speech(4, + l("Sorry, this log was too weak for one of my forest bows."), + l("Now it is junk."), + l("Do you wish to try again?")); + + selectd( + l("Sure, here you go."), + l("Hey! Stop breaking my stuff!")); + + if (@menu != 1) { + closeclientdialog(); + close; + } + + } while (true); + + speech(l("It seems you have no wood left.")); + close; + } + + function bow_done { + speech(4, + l("I hope you are satisfied with your forest bow."), + l("It is one of my best works.")); + + selectd( + l("I am!"), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 2: speech(l("No.")); close; + default: closeclientdialog(); close; + } + } + + // OnTalk: + switch (getq(.quest_bow)) + { + case 0: + case 1: bow_intro; break; + case 2: bow_reminder; break; + case 3: bow_explain; break; + case 4: bow_check_wood; break; + case 5: bow_make; break; + default: bow_done; break; + } + + closeclientdialog(); close; +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest_bow) < 1) + { + setq(.quest_bow, 1); // allow the player to do the quest + dispbottom(l("New quest available: %s (level %d+)", + getquestlink(.quest_bow), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + OnInit: + .min_level = 25; // min level to do the quest + + .req_item = RawLog; // item required to make the bow + .req_esp = 10000; // amount of Esperin required to make the bow + .reward_item = ForestBow; // quest reward (item) + .reward_exp = 500; // quest reward (exp) + .success_rate = 20; // one in X chances to get a perfect log + + .quest_bow = HurnscaldQuests_ForestBow; + .quest_shield = HurnscaldQuests_WoodenShield; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_bow; .sex = G_MALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-2-8/_import.txt b/npc/008-2-8/_import.txt index 8b3da720..8bb44bb1 100644 --- a/npc/008-2-8/_import.txt +++ b/npc/008-2-8/_import.txt @@ -1,6 +1,6 @@ // Map 008-2-8: Hurnscald Forge // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-8/_warps.txt", -"npc/008-2-8/apprentice.txt", +"npc/008-2-8/macgowan.txt", "npc/008-2-8/mapflags.txt", "npc/008-2-8/nicholas.txt", diff --git a/npc/008-2-8/apprentice.txt b/npc/008-2-8/apprentice.txt deleted file mode 100644 index e15e7db7..00000000 --- a/npc/008-2-8/apprentice.txt +++ /dev/null @@ -1,20 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// The Smith's apprentice. -// THIS IS A PLACEHOLDER! - -008-2-8,38,29,0 script Apprentice#008-2-8 NPC_YOUNG_MAN_APPRENTICE,{ - speech - l("Hi Sir."), - l("If you bring us ores, we will be able to make the finest equipment."), - lg("Come back a bit later when you are interested."); - - close; - -OnInit: - .sex = G_MALE; - .distance = 2; - end; -} diff --git a/npc/008-2-8/macgowan.txt b/npc/008-2-8/macgowan.txt new file mode 100644 index 00000000..efeee33e --- /dev/null +++ b/npc/008-2-8/macgowan.txt @@ -0,0 +1,24 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The Smith's apprentice. +// THIS IS A PLACEHOLDER! + +008-2-8,38,29,0 script Macgowan NPC_YOUNG_MAN_APPRENTICE,{ + npctalk3(l("Hello, I am Macgowan, apprentice to Nicholas.")); + end; + +OnInit: + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-8/nicholas.txt b/npc/008-2-8/nicholas.txt index 9dab65e8..7b62090d 100644 --- a/npc/008-2-8/nicholas.txt +++ b/npc/008-2-8/nicholas.txt @@ -1,19 +1,28 @@ // Evol scripts. // Author: -// Micksha +// gumi, Micksha // Description: // Nicholas the Smith. -// THIS IS A PLACEHOLDER! -008-2-8,39,27,0 script Nicholas#008-2-8 NPC_NICHOLAS,{ - speech - l("Hi Sir."), - lg("If you need stable metal gear, you are right! But first I must bring the steel atoms in the right order, hold on."); +008-2-8,40,27,0 script Nicholas NPC_NICHOLAS,{ + speech( + l("Hello, there!"), + l("I'm an expert blacksmith."), + l("If you get me some Coal and Iron Ingots, I could make you a very valuable shield or helmet.")); + // TODO: setzer quest close; OnInit: - .sex = G_MALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/placeholder/alan.txt b/npc/placeholder/alan.txt deleted file mode 100644 index 8e8e42b7..00000000 --- a/npc/placeholder/alan.txt +++ /dev/null @@ -1,323 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states (forest bow): -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - alan wants to ask jack -// [1] 3 - jack explained problem -// [1] 4 - alan asks to find wood -// [1] 5 - found perfect wood -// [1] 6 - got the bow -// [2] unused -// [3] unused -// [t] unused -// Quest states (wooden shield): -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - jack proposes shield -// [1] 3 - player accepted quest -// [1] 4 - got the shield -// [2] unused -// [3] unused -// [t] unused -// Description: -// Jack Lumber, the handsome lumberjack - -008-2-6,31,26,0 script Alan NPC_HUMAN_M_ARTIS,{ - - function bow_intro { - speech(4, - l("When you want to buy something then please speak to my apprentice."), - l("I am only doing special requests.")); - - selectd( - l("OK, thanks."), - rif(BaseLevel >= .min_level, l("Can you make me a really good bow?")), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); - - switch (@menu) - { - case 1: closeclientdialog(); close; - case 3: speech(l("No.")); close; - } - - speech(4, - l("You mean like one of my legendary forest bows?")); - - selectd( - l("Yes, that would be nice.")); - - speech(4, - l("Sorry, I am not making these anymore.")); - - selectd( - l("Oh, too bad."), - l("What? Why not?")); - - if (@menu == 1) { - closeclientdialog(); - close; - } - - speech(4, - l("The problem is that I am short of material."), - l("My forestbows are not made of regular wood, you know."), - l("They are made of special living wood."), - l("And only the best logs of living wood are good enough for them."), - l("I used to get these logs from Jack, the handsome lumberjack."), - l("But the last time I asked him for a new delivery he said that he would never again get any for me.")); - - selectd( - l("Too bad."), - l("Did you ask him why?")); - - if (@menu == 1) { - closeclientdialog(); - close; - } - - speech(4, - l("Sure I did."), - l("But he just told me to leave him alone."), - l("Maybe you could ask him what's wrong?")); - - selectd( - l("OK, I'll ask him."), - l("I am sure he got his reasons.")); - - setq(.quest_bow, 2); - closeclientdialog(); - close; - } - - function bow_reminder { - if (getq(.quest_inspector) == 2) - { - speech(4, - l("Did you already ask Jack why he won't deliver me any more living wood?")); - - selectd( - l("Have you seen anything strange recently that might be connected to the robberies?")); - - speech(l("No.")); - close; - } - - npctalk3(l("Did you already ask Jack why he won't deliver me any more living wood?")); - end; - } - - function bow_explain { - speech(4, - l("Did you already ask Jack why he won't deliver me any more living wood?")); - - selectd( - l("Yes, I did. He said that the trees turned into dangerous monsters."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); - - if (@menu != 1) - { - speech(l("No.")); - close; - } - - speech( - l("Oh, that's really bad news."), - l("Maybe you can do his job?"), - l("If you kill some of these tree monsters and bring me their wood I could take a look at them."), - l("Maybe you will find a piece of wood that is strong enough to become one of my forest bows.")); - - close2; - setq(.quest_bow, 4); - end; - } - - function bow_make { - speech(4, - l("I can make you a really nice forest bow out of this."), - l("I just need %s E for material and work time.", - format_number(.req_esp))); - - selectd( - l("%s??? What a ripoff!", format_number(.req_esp)), - rif(Zeny >= .req_esp, l("Sure, here you go!")), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); - - switch (@menu) - { - case 1: speech(l("Fine, I'll just hold on to this log should you ever change your mind.")); close; - case 3: speech(l("No.")); close; - } - - // XXX: maybe here we could make the player wait real-world hours for Alan to finish? - - if (checkweight(.reward_item, 1) != true) - { - speech( - l("It seems you can't carry the bow right now."), - l("Go clean up your inventory and come back.")); - close; - } - - if (Zeny < .req_esp) - close; // double-check - - setq(.quest_bow, 6); - Zeny -= .req_esp; - getitem(.reward_item, 1); - getexp(.reward_exp, 0); - - speech( - l("Here you go - have fun with it.")); - close; - } - - function bow_check_wood { - speech(4, - l("How is the hunt going?"), - l("Did you bring me any wood?")); - - selectd( - l("No, sorry."), - rif(countitem(.req_item) >= 1, l("Here, take a look!")), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); - - switch (@menu) - { - case 1: closeclientdialog(); close; - case 3: speech(l("No.")); close; - } - - .@first = true; - - do { - if (countitem(.req_item) < 1) - break; - - if (.@first == false) - { - narrator(4, - l("You hand him another log.")); - } - - delitem(.req_item, 1); - .@first = false; - - speech(4, - l("Hmmm... looks ok, but is it strong enough?")); - - narrator(4, - l("Alan bends the log over his knee.")); - - if (rand(.success_rate) == 0) - { - narrator(4 | 8, - l("Alan tries as hard as he can but the log won't bend.")); - - speech(4, - l("Aaah!"), - l("Yes!"), - l("That is a really fine piece of wood you brought me."), - l("It will make an excellent bow!")); - - setq(.quest_bow, 5); - setq(.quest_shield, 1); - - narrator(4, - l("He proceeds to further scrutinize the log.")); - - bow_make; - end; - } - - narrator(4 | 8, - l("The log breaks with a loud crack.")); - - speech(4, - l("Sorry, this log was too weak for one of my forest bows."), - l("Now it is junk."), - l("Do you wish to try again?")); - - selectd( - l("Sure, here you go."), - l("Hey! Stop breaking my stuff!")); - - if (@menu != 1) { - closeclientdialog(); - close; - } - - } while (true); - - speech(l("It seems you have no wood left.")); - close; - } - - function bow_done { - speech(4, - l("I hope you are satisfied with your forest bow."), - l("It is one of my best works.")); - - selectd( - l("I am!"), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); - - switch (@menu) - { - case 2: speech(l("No.")); close; - default: closeclientdialog(); close; - } - } - - // OnTalk: - switch (getq(.quest_bow)) - { - case 0: - case 1: bow_intro; break; - case 2: bow_reminder; break; - case 3: bow_explain; break; - case 4: bow_check_wood; break; - case 5: bow_make; break; - default: bow_done; break; - } - - closeclientdialog(); - close; - -OnPCLoginEvent: -OnPCBaseLvUpEvent: - if (BaseLevel >= .min_level && getq(.quest_bow) < 1) - { - setq(.quest_bow, 1); // allow the player to do the quest - dispbottom(l("New quest available: %s (level %d+)", - getquestlink(.quest_bow), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? - } - end; - -OnInit: - .min_level = 25; // min level to do the quest - - .req_item = RawLog; // item required to make the bow - .req_esp = 10000; // amount of Esperin required to make the bow - .reward_item = ForestBow; // quest reward (item) - .reward_exp = 0; // quest reward (exp) - .success_rate = 20; // one in X chances to get a perfect log - - .quest_bow = HurnscaldQuests_ForestBow; - .quest_shield = HurnscaldQuests_WoodenShield; - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_bow; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/bernard.txt b/npc/placeholder/bernard.txt deleted file mode 100644 index 5c3f25ff..00000000 --- a/npc/placeholder/bernard.txt +++ /dev/null @@ -1,230 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - bernard wants roasted maggot -// [1] 3 - brought maggot -// [1] 4 - bernard wants maggot slime -// [1] 5 - brought maggot slime -// [1] 6 - mikhail needs maggot slime -// [1] 7 - brought maggot slime -// [2] unused -// [3] unused -// [t] unused -// Description: -// Bernard wants to make a maggot slime soup - -008-2-4,34,29,0 script Bernard NPC_HUMAN_M_ARTIS,{ - - if (BaseLevel < .min_level) - { - npctalk3 generic(16 | 32); - end; - } - - function soup_intro { - if (rand(2) == 1) - { - speech 4, - l("The fields are crawling with maggots."), - l("Where is Mikhail?"), - l("What is taking them so long?"), - l("Could I ask a favor of you?"); - } - else - { - speech 4, - l("The taste of maggots in soup is... unforgettable."), - l("They taste simply divine!"), - l("I sent someone to kill me some maggots and they have yet to return."), - l("Would you help me kill some?"); - } - - if (selectd(l("Yes."), l("No.")) == 2) - { - return; - } - - if (rand(2) == 1) - { - speech 4, - l("Great!"), - l("I need a %s for my soup.", getitemlink(.first_item)); - } - else - { - speech 4, - l("Bring me a %s.", getitemlink(.first_item)), - l("I'll give you something if you do."); - } - - speech 8, - l("Please bring it to me!"); - - setq .quest, 2; - close; - } - - function soup_reminder_roasted { - speech - l("Oh, please hurry and bring me a %s.", getitemlink(.first_item)), - l("I'm yearning for maggot soup!"); - close; - } - - function soup_no_room { - speech 1 | 8, - "...", - l("It seems you don't have room for my reward."), - l("I'll wait until you do."); - close; - } - - function soup_reward_roasted { - speech 4, - l("Oooh, perfect! It's perfect!"), - l("You brought me my %s!", getitemlink(.first_item)), - l("Here, have some %s for your troubles.", - getitemlink(.first_reward_item)); - - if (checkweight(.first_reward_item, .first_reward_amount) != true) - soup_no_room; - - if (countitem(.first_item) < 1) - close; - - delitem .first_item, 1; - getitem .first_reward_item, .first_reward_amount; - getexp .first_reward_exp, 0; - setq .quest, 3; - - speech 8, - l("Now let's see..."); - close; - } - - function soup_ask_slime { - speech - l("Thank you so much!"), - l("But... something is missing to make the soup creamy."), - l("I need %d %s for that.", - .second_item_qty, getitemlink(.second_item)), - l("Bring them to me, and I'll give you something nice."); - - setq .quest, 4; - close; - } - - function soup_reminder_slime { - speech - l("Please do hurry and bring me %d %s, so I can finish my soup!", - .second_item_qty, getitemlink(.second_item)); - close; - } - - function soup_reward_slime { - speech - l("Nice!"), - l("They're perfect, just perfect!"), - l("You brought me the %d %s!", - .second_item_qty, getitemlink(.second_item)), - l("Here, have some %s as reward.", - getitemlink(.second_reward_item)); - - if (checkweight(.second_reward_item, .second_reward_amount) != true) - soup_no_room; - - if (countitem(.second_item) < .second_item_qty) - close; - - delitem .second_item, .second_item_qty; - getitem .second_reward_item, .second_reward_amount; - getexp .second_reward_exp, 0; - setq .quest, 5; - - close; - } - - function soup_thanks_slime { - speech - l("I didn't mention it before, but I also put beer in my soup."), - l("I hope you like beer as much as I do, because, you see..."), - l("Beer is life!"); - close; - } - - function soup_thanks_mikhail { - speech - l("My help, Mikhail, finally returned with the slimes I needed."), - l("I wonder what took him so long?"); - close; - } - - - // OnTalk: - switch (getq(.quest)) - { - case 0: - case 1: soup_intro; break; - case 2: - if (countitem(.first_item) < 1) - soup_reminder_roasted; - else - soup_reward_roasted; - break; - case 3: soup_ask_slime; break; - case 4: - if (countitem(.second_item) < .second_item_qty) - soup_reminder_slime; - else - soup_reward_slime; - break; - case 5: - case 6: soup_thanks_slime; break; - default: soup_thanks_mikhail; - } - - closeclientdialog(); - close; - -OnPCLoginEvent: -OnPCBaseLvUpEvent: - if (BaseLevel >= .min_level && getq(.quest) < 1) - { - setq .quest, 1; // allow the player to do the quest - dispbottom l("New quest available: %s (level %d+)", - getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? - } - end; - -OnInit: - .min_level = 10; // min level to do the quest - - .first_item = Aquada; // FIXE: change this when we have RoastedMaggot - .first_reward_item = Aquada; // reward item // FIXME: change this when we have CherryCake - .first_reward_amount = 5; - .first_reward_exp = 100; - - .second_item = Aquada; // FIXE: change this when we have MaggotSlime - .second_item_qty = 3; - .second_reward_item = Aquada; // reward item // FIXME: change this when we have Beer - .second_reward_amount = 3; - .second_reward_exp = 100; - - .quest = HurnscaldQuests_Soup; - .quest_debug = .quest; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/books.txt b/npc/placeholder/books.txt deleted file mode 100644 index 3407e0cd..00000000 --- a/npc/placeholder/books.txt +++ /dev/null @@ -1,60 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,247,40,0 script bookcase NPC_HUMAN_M_ARTIS,{ - - if (getq(.quest_inspector) != 12) - { - dispbottom(l("You see an ordinary bookcase.")); - end; - } - - narrator( - l("You see an ordinary bookcase."), - l("Looking over closely, you find a book that is upside down."), - l("The book has been hollowed out."), - l("Inside is a theater mask and a note that you cannot even begin to read.")); - - close2; - setq(.quest_inspector, 13); - end; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .distance = 1; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/doctor.txt b/npc/placeholder/doctor.txt deleted file mode 100644 index af36d1e2..00000000 --- a/npc/placeholder/doctor.txt +++ /dev/null @@ -1,80 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-2-14,29,30,0 script Doctor NPC_HUMAN_M_ARTIS,{ - - speech(4, - l("Hello, can I help you?")); - - // TODO: check for AxeHat when we get it - // TODO: check for EyePatch when we get it - - selectd( - l("I think I am sick!"), - l("No, I feel fine."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange in town? Anything that might have to do with the robberies?"))); - - switch (@menu) - { - case 1: - narrator(4, - l("The doctor examines you briefly.")); - // TODO: check for poison or other status conditions currently in use - speech( - l("Nonsense!"), - l("You look fine and dandy to me."), - l("All you need is a bit more exercise and fresh fruit in your diet!")); - close; - case 2: - speech( - l("Then please stop wasting my precious time.")); - close; - case 3: - speech( - l("No, I haven't seen anything.")); - close; - } - - - end; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/hinnak.txt b/npc/placeholder/hinnak.txt deleted file mode 100644 index 0dd211fd..00000000 --- a/npc/placeholder/hinnak.txt +++ /dev/null @@ -1,352 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - hinnak asked for help -// [1] 3 - helped hinnak -// [2] kill counter -// Description: -// Hinnak needs help to get rid of {mobname} - -008-1,270,77,0 script Hinnak NPC_HUMAN_M_ARTIS,{ - - if (BaseLevel < .min_level) - { - npctalk3 generic(1 | 16 | 64); - end; - } - - function hinn_new_player - { - if(getequipid(EQI_HEAD_TOP) == .bad_hat) - { - narrator 4, - l("The farmer lunges at you with a farming implement."); - heal -50, 0; - - selectd - l("I'm out of here."), - l("Whoa, what are you doing?"); - - if (@menu == 1) - { - return; - } - - speech 4 | 1, - l("Sorry, you look like a pinkie."), - l("They've been destroying my fields, and I guess I got a bit worked up."); - } - - else - { - speech 4, - l("Argh!"), - l("I hate them!"), - l("I @#$% hate them!"), - l("I @#$% hate these @#$% pinkies!"); - - selectd - l("You need some anger control therapy."), - l("Why do you hate them?"); - - if (@menu == 1) - { - return; - } - - speech 4 | 1, - l("These @#$% beasts are jumping around in my fields destroying all my harvest."), - l("But they are too fast."), - l("I can't catch them."); - } - - selectd - l("Want me to help you?"); - - speech 4 | 1, - l("Yes, you look quite fast."), - l("Maybe you can catch some of them."), - l("That will pay them a lesson."), - l("Slay some of them and bring me %d of their antennae.", .drop_count); - - setq .quest, 2, 0; - - selectd - l("How much is this worth to you?"); - - speech 1, - l("Well, I can't offer you much."), - l("But I got an old scythe laying around."), - l("Maybe you can use it as a weapon."); - - close; - } - - function hinn_help - { - if (getequipid(EQI_HEAD_TOP) == .bad_hat) - { - narrator 4, - l("The farmer glares at your hat."); - } - - speech 4, - l("Have you got the %d antennae?", .drop_count); - - selectd - l("Not yet, but I am working on it."), - rif(countitem(.monster_drop) >= .drop_count, l("Sure, here they are!")); - - if (@menu == 1) - { - return; - } - - if (getq2(.quest) < .kill_count) - { - speech 1, - l("Don't try to fool me!"), - l("I know you didn't kill them yourself!"), - l("Kill at least %d pinkies and come back.", .kill_count); - close; - } - - speech 1, - l("Thank you very much"), - l("As promised, here's my old scythe."), - l("Maybe you can use it as a weapon."), - l("It is a bit cumbersome but its strikes are deadly."); - - if (countitem(.monster_drop) >= .drop_count) - { - delitem .monster_drop, .drop_count; - getitem .reward_item, 1; - Zeny += .reward_money; - //getexp .reward_exp, 0; - setq .quest, 3; - } - close; - } - - function hinn_thanks - { - if (getequipid(EQI_HEAD_TOP) == .bad_hat) - { - speech 4, - l("That better be a trophy on your head."); - - selectd - l("It is."); - - speech 4 | 1, - l("Good then."), - l("Thanks for your help with the pinkies."); - } - - else - { - speech 4, - l("Good to see you again."), - l("Thanks again for helping me with the pinkies!"); - } - - selectd - l("Sure, any time!"), - l("Anything else you want me to do?"), - l("You're welcome. Bye!"); - - if (@menu == 3) - { - return; - } - - speech 4 | 1, - l("Actually, it's been a long day."), - l("If it's no trouble, could you get me a %s?", - getitemlink(.drink_item)); - - selectd - rif(countitem(.drink_item) >= 1, l("Here you are.")), - l("Sure, I'll go get one. Bye!"), - l("You shouldn't drink while working!"); - - do - { - switch (@menu) - { - case 2: return; - case 3: - speech 1, - l("Well, I'm done for the day, and I'm quite old enough to decide when I can have a %s, thank you!", - getitemname(.drink_item)); - selectd - rif(countitem(.drink_item) >= 1, l("Sorry... here you are.")), - l("I don't have any."); - break; - default: - if (countitem(.drink_item) < 1) - { - return; - } - delitem .drink_item, 1; - - narrator 4 | 8 | 2 | 1, - l("%s takes a sip.", .name$); - - speech 4, - l("Aaah!"), - l("Nothing like a well-deserved %s after a long day of tending the crops!", - getitemname(.drink_item)), - l("Thanks, that was very kind of you!"); - - narrator 4 | 8 | 1 | 2, - l("He takes another sip."); - - speech 4, - l("Thanks!"), - l("You know, I had the strangest thing happen to me."), - l("I had this patch of ground that was really clumpy; lots of clay, you see."), - l("Right over there."), - // TODO: move cam to the spot - l("Looks much better now, doesn't it?"), - // TODO: restore cam - l("But how I got there is kind of scary..."), - l("I'd been trying to break it up for a while, but that kind of work is a pain."), - l("So my wife said that I should go and see the witch, just in case she knows something."), - l("And sure enough I ask the witch, and she has a look at it."), - l("“Nothing I can do”, she says, “but I can ask a friend”."), - l("So the next day another witch shows up."), - l("Gorgeous woman, but when she looked at me, the scares went scuttling down my spine..."), - l("First thing she asked was if I'm a farmer."), - l("Said her friend had told her that I needed help."), - l("I show her what the problem is, and she tells me to go inside and wait."); - - narrator 4 | 8 | 1 | 2, - l("%s drains his mug in one long sip, then hesitates.", .name$); - - speech 4, - l("So I go inside."), - l("I'm barely in when it starts raining outside, pouring cats and mouboos!"), - l("Not so weird, perhaps, except that it was been bright and sunny just a second before!"), - l("So I rush out, my wife telling me to leave the witch alone, and I see her standing there in the middle of the rain..."), - l("None of the raindrops touched her, as if they were afraid!"), - l("Then she yells out some gobbledygook word, and out of the ground there comes a swarm of maggots, crawling and digging and climbing over each other's backs..."), - // XXX: maybe here insert a reference to SUSAN? - l("And then she turns to me!"), - l("Seeing her gaze, for a moment there I thought she would turn me into a pinkie, for sure..."), - l("But all she says is, “had you stayed inside, you wouldn't be wet now”."); - - selectd - l("Hahaha!"), - l("Whoah, scary..."), - l("What was that gobbledygook word?"), - l("I better go now. Bye."); - - switch (@menu) - { - case 1: - speech 1, - l("Yeah, funny now..."), - l("But you should've seen that gaze!"), - l("Ah, well, never mind."); - close; - case 2: - speech 1, - l("Yeah, you could say that..."); - close; - case 3: - speech 1, - l("Oh, I can't be sure..."), - l("But something like “Nanaj princino”, I think."); // this is "Dwarven Princess" translated to Esperanto - close; - } - return; - } - } while(true); - } - - // OnTalk: - - if (getq(.quest_inspector) == 11) - { - selectd - l("Did you see anyone in a mask come by here at night?"), - l("Did you see anyone with a large satchel come by here at night?"), - l("Hello."); - - switch (@menu) - { - case 1: - speech - l("No."), - l("It tends to be too dark to see a mask."); - close; - - case 2: - speech - l("Yes, I saw someone with a large sack on their back go to the mining camp."); - close; - } - } - - switch (getq(.quest)) - { - case 0: - case 1: hinn_new_player; break; - case 2: hinn_help; break; - default: hinn_thanks; - } - - closeclientdialog(); - close; - -OnNPCKillEvent: - // XXX: maybe have a OnTakeScript on the pinky antena item so we count pickups instead of kills - if (killedrid == .monster_id && getq(.quest) == 2 && - getq2(.quest) < .kill_count && strcharinfo(PC_MAP) == .map$) - { - setq .quest, 2, getq2(.quest) + 1; - } - end; - -OnPCLoginEvent: -OnPCBaseLvUpEvent: - if (BaseLevel >= .min_level && getq(.quest) < 1) - { - setq .quest, 1; // allow the player to do the quest - dispbottom l("New quest available: %s (level %d+)", - getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? - } - end; - -OnInit: - .min_level = 15; // min level to do the quest - .monster_id = Fluffy; // monster to kill // FIXME: change this when we have pinkies - .monster_drop = FluffyFur; // monster drop to collect // FIXME: change this when we have pinkies - .drop_count = 10; // amount of that drop needed - .kill_count = 10; // min number of kills - .reward_item = WoodenSword; // reward item // FIXME: change this when we have he Scythe - .reward_money = 0; // reward money - .reward_exp = 0; // reward exp - .bad_hat = BrimmedFlowerHat; // hinnak attacks you when you wear this hat // FIXME: make this pinky hat when we get it - .drink_item = Beer; // the item hinnak asks to drink // FIXME: make this beer when we have it - - .quest = HurnscaldQuests_Hinnak; - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/inspector.txt b/npc/placeholder/inspector.txt deleted file mode 100644 index f25ef1dd..00000000 --- a/npc/placeholder/inspector.txt +++ /dev/null @@ -1,190 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-2-1,30,35,0 script Inspector NPC_HUMAN_M_ARTIS,{ - - if (BaseLevel < .min_level) - { - npctalk3(l("I'm sorry, but I'm busy looking into this string of robberies.")); - end; - } - - // OnTalk: - switch (getq(.quest)) - { - case 0: - case 1: - speech(4, - l("Hmm... what to do.")); - narrator(4, - l("He looks up and into your face.")); - speech(4, - l("You look capable, will you help me solve these robberies?"), - l("I would go myself, but for some reason I'm a non-walking NPC.")); - - if (selectd("Yes", "No") == 2) { - closeclientdialog(); - close; - } - - speech( - l("Ok then."), - l("I'd like you to ask the villagers about the recent string of robberies.")); - - close2; - setq(.quest, 2); - end; - - case 2: - npctalk3(l("Please continue talking to the villagers.")); - end; - - case 3: - speech( - l("Hm..."), - l("I don't know if I trust her eyesight or memory."), - l("See if someone else knows anything.")); - close; - - case 4: - speech( - l("Someone in a theater mask, eh?"), - l("There was a traveling theater troupe in town recently, but they've moved on to Tulimshar."), - l("Please go talk to their leader about this.")); - - close2; - setq(.quest, 5); - end; - - case 5: - npctalk3(l("Please go talk to the leader of the traveling troupe about the theater mask.")); - end; - - case 6: - speech( - l("Hm... an old man?"), - l("Could you interrogate him for me?")); - - close2; - setq(.quest, 7); - end; - - case 7: - npctalk3(l("Have you talked with the old man yet?")); - end; - - case 8: - npctalk3(l("Can you verify that with his wife?")); - end; - - case 9: - speech( - l("Hm... then it couldn't be him."), - l("I'm not sure where to go from here, maybe you can find something else."), - l("Try talking to everyone again.")); - - close2; - setq(.quest, 10); - end; - - case 10: - npctalk3(l("Made any progress yet?")); - end; - - case 11: - npctalk3(l("Then go north and investigate!")); - end; - - case 12: - npctalk3(l("Did you look over the basement?")); - end; - - case 13: - speech( - l("What a strange note."), - l("I'll keep track of this, while you return the mask to the troupe."), - l("I would go myself, but the developers were too lazy to make me walk."), - "...", - l("By the way, stay sharp! I may call upon you again.")); - - close2; - setq(.quest, 14); - end; - - case 14: - npctalk3(l("Please return the mask to the traveling troupe.")); - end; - - case 15: - speech( - l("My men have found all of the stolen items."), - l("They were all in the mining camp."), - l("We still don't know who did it.")); // XXX: feel free to extend this quest beyond this point - - close2; - setq(.quest, 16); - getexp(.reward_exp, 0); - end; - - case 16: - npctalk3(l("Remember to stay sharp. I might need your help on another case.")); - end; - } - - closeclientdialog(); - close; - -OnPCLoginEvent: -OnPCBaseLvUpEvent: - if (BaseLevel >= .min_level && getq(.quest) < 1) - { - setq(.quest, 1); // allow the player to do the quest - dispbottom(l("New quest available: %s (level %d+)", - getquestlink(.quest), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? - } - end; - -OnInit: - .min_level = 30; // min level to do the quest - - .reward_exp = 2500; - - .quest = HurnscaldQuests_Inspector; - .quest_debug = .quest; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/jack.txt b/npc/placeholder/jack.txt deleted file mode 100644 index 1f205a59..00000000 --- a/npc/placeholder/jack.txt +++ /dev/null @@ -1,313 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states (forest bow): -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - alan wants to ask jack -// [1] 3 - jack explained problem -// [1] 4 - alan asks to find wood -// [1] 5 - found perfect wood -// [1] 6 - got the bow -// [2] unused -// [3] unused -// [t] unused -// Quest states (wooden shield): -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - jack proposes shield -// [1] 3 - player accepted quest -// [1] 4 - got the shield -// [2] unused -// [3] unused -// [t] unused -// Description: -// Jack Lumber, the handsome lumberjack - -008-1,242,117,0 script Jack NPC_HUMAN_M_ARTIS,{ - - function bow_intro { - speech(4, - l("Why not?!"), - l("I value my life, that's why!")); - - selectd(l("What do you mean?")); - - speech(4, - l("A week ago, I was going to chop down one of those twigleaf trees in the forest to the southwest."), - l("These twigleafs are the trees that give me the living wood you speak of."), // XXX: were Log Heads named "Twigleaf" at some point in the past? - l("I was just chopping away with my axe, and guess what happened?"), - l("One of its branches hit me!"), - l("At first, I thought it fell down or the wind blew it, but it hurt!"), - l("After I shook it off and struck the tree again with my axe, another branch hit me!"), - l("I got angry and started to chop off all the low-hanging branches so this couldn't happen anymore."), - l("Even after all that though, I still can't believe what happened next.")); - - selectd(l("What happened?")); - - speech(4, - l("You'll think I'm insane if I tell you...")); - - selectd(l("I won't. I promise.")); - - speech(4, - l("Alright, well..."), - l("After I chopped off a few branches, the whole tree started to move!"), - l("Its roots tore out of the earth, all the branches started to wave around, and a face appeared on the trunk."), - l("The whole tree CAME TO LIFE! It was mad!")); - - selectd(l("Did you run away?"), l("Did you fight it?")); - - speech(4, - l("I fought it, of course!"), - l("I took my axe and attacked the beast!"), - l("It hit me here *points at a bruise on his shoulder*, here *lifts his trouser leg to show another bruise*, and here *lifts his shirt and reveals even worse bruises*."), // XXX: that's kinda dirty imho... maybe we could use the narrator? - l("But I didn't give up!"), - l("I chopped away at it, branch after branch, and in the end I chopped off its roots, and it fell to the ground, motionless.")); - - selectd(l("So you beat the monster? Then why are you so scared?")); - - speech(4, - l("Well, I was exhausted and had to rest."), - l("A few minutes passed, and suddenly I was practically surrounded by a dozen or more of these living trees!")); - - selectd(l("Did you fight them too?")); - - speech(4, - l("Are you crazy?"), - l("I barely destroyed one of those beasts."), - l("I was in no shape to fight again!"), - l("I ran away as fast as I could, and lucky for me the monsters aren't that fast on their tiny root legs, Ha!")); - - selectd(l("So, I guess you aren't chopping down trees anymore?")); - - speech(4, - l("I still do; it's my job."), - l("But I'll no longer chop those twigleafs, I'll tell you that."), - l("I know the bow master wants some twigleaf wood, but I don't care."), - l("I won't risk MY life for a few gold pieces!"), - l("If you really want to, just go to the southwest, but I can't help you."), - l("I won't go there ever again.")); - - selectd(l("Southwest you say? OK, thank you.")); - - speech(l("Don't say I didn't warn you!")); - - // What a huge text wall, I feel sorry for the players - - close2; - setq(.quest_bow, 3); - end; - } - - function bow_good_luck { - if (getq(.quest_inspector) == 2) - { - speech(4, - l("Good luck hunting those tree monsters – you'll need it.")); - - selectd(l("Have you seen anything that might be connected to the recent robberies in town?")); - - speech(l("Sorry, no.")); - close; - } - - npctalk3(l("Good luck hunting those tree monsters – you'll need it.")); - end; - } - - function shield_intro { - speech(4, - l("I have an idea."), - l("What would you say about a new shield?")); - - setq(.quest_shield, 2); - - selectd( - l("No thanks."), - l("Yes, please!"), - rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); - - switch (@menu) - { - case 1: closeclientdialog(); close; - case 2: - speech( - l("All I need is %d %s.", .logs_amount, getitemlink(.logs_item)), - l("This needn't be high quality wood; pretty much any log you can find should work."), - l("Oh, and I'll also need %s E for other materials.", format_number(.shield_cost))); - - close2; - setq(.quest_shield, 3); - end; - case 3: speech(l("Sorry, no.")); close; - } - } - - function bow_congrats { - speech(4, - l("You've finally found that perfect piece of living wood that Alan needs to make a Forest Bow, haven't you?")); - - selectd( - l("I couldn't afford the bow, though..."), - l("No, I'm still looking."), - l("Yes, I've got the Forest bow now."), - l("I'm a melee warrior, I don't need bows."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); - - switch (@menu) - { - case 3: - if (getq(.quest_bow) <= 5) - { - speech(4, - l("Hrmph."), - l("I'm someone who respects those speaking the truth.")); - } - // fallthrough - case 1: - case 4: - speech(4, - l("You no doubt remember how I struggled with those beasts, fighting for my life."), - l("Scared me, those seven-branched little stumps did!"), - l("Never since that day have I strayed near them, and yet there you are, cutting them down one by one."), - l("I'm proud of you – to dare to fight those trunks is admirable indeed."), - l("You're as strong as if you were my own child!")); - - shield_intro; - break; - case 2: speech(l("You should go talk to Alan again.")); close; - case 5: speech(l("Sorry, no.")); close; - } - } - - function shield_make { - speech(4, - l("Do you have the %d %s and %s E for the shield?", - .logs_amount, getitemlink(.logs_item), format_number(.shield_cost))); - - selectd( - rif(countitem(.logs_item) >= .logs_amount && Zeny >= .shield_cost, - l("Here it is.")), - l("I'll come back later.")); - - if (@menu != 1) { - closeclientdialog(); - close; - } - - speech(4, - l("Have a seat.")); - - narrator(4, - l("Jack saws the logs into pieces and then sands them until they are smooth to the touch."), - l("Applying some strong-smelling liquid, he tans them to a darker hue."), - l("Grabbing one of two leftover pieces, he begins to carve it into a round shape, then repeats this with the second piece – shield handles from what you can tell."), - l("Meanwhile, the sun has dried the other pieces."), - l("Jack places them next to each other, adds a frame, and nails everything together."), - l("The resulting shield looks usable already, but Jack applies another liquid to it and leaves it to dry for a few moments."), - l("Finally, he hands the shield to you.")); - - if (checkweight(.shield_item, 1) != true) - { - speech( - l("It seems you can't carry the %s.", getitemlink(.shield_item)), - l("Come back when you do.")); - close; - } - - if (Zeny < .shield_cost || countitem(.logs_item) < .logs_amount) - close; // double-check - - setq(.quest_shield, 4); - delitem(.logs_item, .logs_amount); - getitem(.shield_item, 1); - Zeny -= .shield_cost; - getexp(.shield_exp, 0); - - speech( - l("Enjoy your new shield!")); - - close; - } - - function wood_daily { - speech(4, - l("I hope that my shield will serve you well!")); - - selectd( - l("Me too."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); - - switch (@menu) - { - case 2: speech(l("Sorry, no.")); close; - } - - closeclientdialog(); // TODO: daily quest (needs the generic daily quest script) - close; - } - - // OnTalk: - switch (getq(.quest_shield)) - { - case 2: shield_intro; break; - case 3: shield_make; break; - case 4: wood_daily; break; - } - - switch (getq(.quest_bow)) - { - case 3: - case 4: bow_good_luck; break; - case 5: - case 6: bow_congrats; break; - } - - // initial intro - { - speech(4, - l("Hello there!"), - l("My name is Jack Lumber, the enemy of all trees."), - l("If you need some firewood, just let me know.")); - - selectd( - l("I'll keep that in mind."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?")), - rif(getq(.quest_bow) == 2, l("I heard you aren't delivering any more living wood. Why not?"))); - - switch (@menu) - { - case 2: speech(l("Sorry, no.")); close; - case 3: bow_intro; break; - } - - } - - closeclientdialog(); - close; - -OnInit: - .logs_item = Aquada; // FIXME: change this when we get RawLog - .logs_amount = 40; // XXX: maybe nlogn? - .shield_cost = 5000; // XXX: maybe nlogn? - .shield_exp = 2500; - .shield_item = Aquada; // FIXME: change this when we get WoodenShield - - .quest_bow = HurnscaldQuests_ForestBow; - .quest_shield = HurnscaldQuests_WoodenShield; - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_bow; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/ledmitz.txt b/npc/placeholder/ledmitz.txt deleted file mode 100644 index df7b8d8e..00000000 --- a/npc/placeholder/ledmitz.txt +++ /dev/null @@ -1,55 +0,0 @@ -// Evol scripts. -// Author: -// gumi - -008-2-2,43,34,0 script Ledd NPC_HUMAN_M_ARTIS,{ - // XXX: ^ I know it should be Led and Mitz but 4144 made names - // shorter than 4 characters illegal - - deltimer("Mitz::OnTalk"); - addtimer(rand(500, 900), "Mitz::OnTalk"); -OnTalk: - npctalk3(l("Ha! I'll drink muuuch mo.. more than you! Im not ooone biiit dr...dr..unk!")); - // TODO: add more sentences - // XXX: maybe instead of making them respond to a click they should just - // shout at each other at regular intervals? - end; - -OnInit: - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} - -008-2-2,46,34,0 script Mitz NPC_HUMAN_M_ARTIS,{ - - deltimer("Ledd::OnTalk"); - addtimer(rand(500, 900), "Ledd::OnTalk"); -OnTalk: - npctalk3(l("I can still drink more! Better give up you... you... teelotaler! MORE BEER MELINDA!")); - // TODO: add more sentences - end; - -OnInit: - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/macgowan.txt b/npc/placeholder/macgowan.txt deleted file mode 100644 index 2f65b9fe..00000000 --- a/npc/placeholder/macgowan.txt +++ /dev/null @@ -1,21 +0,0 @@ -// Evol scripts. -// Author: -// gumi - -008-2-8,38,29,0 script Macgowan NPC_HUMAN_M_ARTIS,{ - npctalk3(l("Hello, I am Macgowan, apprentice to Nicholas.")); - end; - -OnInit: - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/malek.txt b/npc/placeholder/malek.txt deleted file mode 100644 index 219a059a..00000000 --- a/npc/placeholder/malek.txt +++ /dev/null @@ -1,65 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,233,42,0 script Malek NPC_HUMAN_M_ARTIS,{ - - if (getq(.quest_inspector) == 11) - { - speech(4, - l("Hi, can I help you at all?")); - - selectd( - l("The inspector sent me here to investigate.")); - - speech(4, - l("Yeah, we did hear a commotion."), - l("We thought we heard someone go down to the basement, but we checked the whole place over and didn't see anything out of the ordinary.")); - - close2; - setq(.quest_inspector, 12); - end; - } - - npctalk3(generic(32 | 256)); - end; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/mikhail.txt b/npc/placeholder/mikhail.txt deleted file mode 100644 index e071e914..00000000 --- a/npc/placeholder/mikhail.txt +++ /dev/null @@ -1,131 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - bernard wants roasted maggot -// [1] 3 - brought maggot -// [1] 4 - bernard wants maggot slime -// [1] 5 - brought maggot slime -// [1] 6 - mikhail needs maggot slime -// [1] 7 - brought maggot slime -// [2] unused -// [3] unused -// [t] unused -// Description: -// takes part in the slime soup quest (Bernard) - -008-1,308,72,0 script Mikhail NPC_HUMAN_M_ARTIS,{ - - function soup_scared { - speech 4, - l("Hello..."), - l("I'm supposed to be helping Bernard from the Inn but..."); - - narrator 4, - l("His eyes grow wide"); - - speech 4, - l("Eeekkk another one."); - - narrator - l("It seems that the boy would like to say more, but seems too terrified at the moment."), - l("Maybe you should help someone else first, so that he sees your intentions are good."); - - close; - } - - function soup_intro2 { - speech 4, - l("Bernard sent me to get %d %s from the %s in the fields, but they scare me so bad!", - .third_item_qty, getitemlink(.third_item), getmonsterlink(.third_item_mob)), - l("You look like a nice person."), - l("Would you go get them for me?"); - - selectd - l("Of course, I'll go get them for you."); - - speech - l("Thank you so much!"), - l("I'll wait for you here."); - - setq .quest, 6; - close; - } - - function soup_reminder_slime2 { - speech - l("Did you bring me the %d %s I need?", - .third_item_qty, getitemlink(.third_item)), - l("It doesn't look like you have them all..."); - close; - } - - function soup_reward_slime2 { - speech - l("Did you bring me the %d %s I need?", - .third_item_qty, getitemlink(.third_item)), - l("Ooh!"), - l("Thank you so much!"), - l("I can get back to Bernard now!"); - - if (countitem(.third_item) < .third_item_qty) - close; // double-check - - delitem .third_item, .third_item_qty; - setq .quest, 7; - getexp .third_reward_exp, 0; - close; - } - - function soup_thanks_slime2 { - speech - l("Thanks again for helping me!") + " %%Q"; - - close; - } - - switch(getq(.quest)) - { - - case 0: - case 1: - case 2: - case 3: - case 4: soup_scared; break; - case 5: soup_intro2; break; - case 6: - if (countitem(.third_item) < .third_item_qty) - soup_reminder_slime2; - else - soup_reward_slime2; - break; - default: soup_thanks_slime2; - } - - closeclientdialog(); - close; - -OnInit: - .third_item = Aquada; // FIXME: change this when we have MaggotSlime - .third_item_qty = 5; - .third_item_mob = Fluffy; // FIXME: change this when we have Maggot - - .third_reward_exp = 100; - - .quest = HurnscaldQuests_Soup; - .quest_debug = .quest; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/milly.txt b/npc/placeholder/milly.txt deleted file mode 100644 index 03c39d42..00000000 --- a/npc/placeholder/milly.txt +++ /dev/null @@ -1,109 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states (inspector): -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,282,112,0 script Milly NPC_HUMAN_M_ARTIS,{ - - // TODO: make the actual beanie copter quest after those are finished: - // [X] Inspector quest - // [ ] Bone knife quest - // [ ] Setzer quest - // [ ] Rossy quest - // [ ] Cindy quest - - .@q_inspector = getq(.quest_inspector); - - speech(4, - l("Hello traveler, welcome to Hurnscald."), - l("Have you met Kfahr yet?"), - l("He is the greatest hero that ever walked the land of Hurnscald!")); - - selectd( - l("Hi! No, I haven't seen him yet."), - l("Where can I find him?"), - l("Mh, I don't care for heroes."), - l("Hello, yes I have met him."), - rif(.@q_inspector == 2, l("Have you seen anything strange lately?")), - rif(.@q_inspector == 2, l("Do you know anything about the recent robberies?"))); - - switch (@menu) - { - case 3: - speech(4, - l("What?"), - l("Surely you do not appreciate what a hero he is!"), - l("Mh, or perhaps honor is dead in you; for you to be so slow to comprehend the good that his exploits have wrought for us."), // XXX: this sentence seems too complicated to come from a child's mouth - l("Put on your thinking cap and be propelled into high adventure!"), - l("Go to Kfahr, and listen to his stories."), - l("You can't have met him."), - l("No one who has met him would say such silly things.")); - // fallthrough - - case 1: - speech(4, - l("I highly recommend you seek him out!")); - // fallthrough - - case 2: - speech( - l("He is a regular at the inn, located in the north-west part of town."), - l("If you are lucky he might tell you a story about his adventures.")); - break; - - case 4: - speech( - l("Oh, I hope you stayed and listened to his stories about his adventures.")); - break; - - case 5: - speech( - l("I haven't seen anything strange.")); - break; - - case 6: - speech( - l("No, sorry.")); - break; - } - - close; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; // TODO: change this to the milly quest debug when it exists - .sex = G_FEMALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/nicholas.txt b/npc/placeholder/nicholas.txt deleted file mode 100644 index 17f44d19..00000000 --- a/npc/placeholder/nicholas.txt +++ /dev/null @@ -1,26 +0,0 @@ -// Evol scripts. -// Author: -// gumi - -008-2-8,40,27,0 script Nicholas NPC_HUMAN_M_ARTIS,{ - speech( - l("Hello, there!"), - l("I'm an expert blacksmith."), - l("If you get me some Coal and Iron Ingots, I could make you a very valuable shield or helmet.")); - - // TODO: setzer quest - close; - -OnInit: - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/note.txt b/npc/placeholder/note.txt deleted file mode 100644 index f449ac89..00000000 --- a/npc/placeholder/note.txt +++ /dev/null @@ -1,28 +0,0 @@ -// Evol scripts. -// Author: -// gumi - -008-2-2,32,28,0 script Note#Hurnscald:pub NPC_PAPER_NOTE,{ - narrator(8, - l("We refuse service to anyone who:"), - l("• Has a bubblehead"), - l("• Is not properly shaded"), - l("• Can't walk without stopping after every step")); - - // In case you don't get the joke, know that it's a parody on Illutia. - - close; - -OnInit: - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/nurse.txt b/npc/placeholder/nurse.txt deleted file mode 100644 index ee14cd9f..00000000 --- a/npc/placeholder/nurse.txt +++ /dev/null @@ -1,101 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-2-12,28,30,0 script Nurse NPC_HUMAN_M_ARTIS,{ - - speech(4, - l("How can I help you?")); - - // TODO: check for AxeHat when we get it - // XXX: this npc used to teach the resist poison skill, do we still want that? - - selectd( - l("Oooh, these wounds! They hurt so much!"), - l("I don't feel so well, I might be sick."), - l("No, I'm fine."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything out of the ordinary?"))); - - switch (@menu) - { - case 1: - if (BaseLevel > .heal_max_level) - { - speech( - l("I'm sorry but I'm here only to help young people."), // XXX: this sounds cruel towards elderly people - l("Your level is already higher than %d.", .heal_max_level), - l("You can get some rest at the inn near here.")); - close; - } - speech(4, - l("Here, let me heal you.")); - - npcskill(AL_HEAL, .heal_skill_level, .heal_npc_stats, .heal_npc_level); - - speech( - l("There you go, like new.")); - close; - case 2: - speech( - l("Then you should better see the doctor."), - l("He is usually in his office on the 3rd floor.")); - close; - case 3: - speech( - l("Then I would ask you to leave."), - l("There are people who really need our help.")); - close; - case 4: - speech( - l("I'm too busy here to observe the town.")); - close; - } - - - end; - -OnInit: - .heal_max_level = 20; // she will only heal low level players - - .heal_skill_level = 10; // what level of the healing skill to use - .heal_npc_stats = 99; // what stat points the NPC has - .heal_npc_level = 60; // what level the npc has - - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_FEMALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/old-man.txt b/npc/placeholder/old-man.txt deleted file mode 100644 index 6914e50c..00000000 --- a/npc/placeholder/old-man.txt +++ /dev/null @@ -1,90 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,293,124,0 script Old Man NPC_HUMAN_M_ARTIS,{ - - function oldman_ask { - speech(4, - l("Hi there, need something?")); - - selectd( - l("Have you seen anything strange lately?"), - l("Do you know anything about the recent robberies?")); - - speech( - l("I'm sorry, but I didn't see anything."), - l("You should ask my old woman.")); - close; - } - - function oldman_accuse { - speech(4, - l("Found anything new?")); - - selectd( - l("The leader of the troupe said you hung around them a lot while they were in town.")); - - speech( - l("Yes, I hung around the theater a lot."), - l("I was an actor when I was younger."), - l("But I wasn't there that night."), - l("Me and the wife were at home all night.")); - - close2; - setq(.quest_inspector, 8); - end; - } - - // OnTalk: - switch (getq(.quest_inspector)) - { - case 2: oldman_ask; break; - case 7: oldman_accuse; break; - } - - // initial intro - npctalk3(l("Don't let those monsters get to you.")); - end; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_MALE; - .distance = 1; // this npc has bad hearing - .speed = 2000; // this npc is very old - // TODO: move graph (after the Hurnscald map is finalized) - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/old-woman.txt b/npc/placeholder/old-woman.txt deleted file mode 100644 index 2a2591b4..00000000 --- a/npc/placeholder/old-woman.txt +++ /dev/null @@ -1,137 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,230,113,0 script Old Woman NPC_HUMAN_M_ARTIS,{ - - function is_inspector { - return (getequipcardid(EQI_HEAD_MID, 0) == NavyBlueCottonDye /*&& - getequipcardid(EQI_HEAD_LOW, 0) == NavyBlueCottonDye*/); // TODO / FIXME: remove the /* */ whenever we have cotton pants - } - - function oldwoman_ask { - speech(4, - l("Hello deary.")); - - selectd( - l("Have you seen anything strange lately?"), - l("Do you know anything about the recent robberies?")); - - .@q = getq(.quest_inspector); - - if (!is_inspector()) - { - speech(l("Yes, but I'm only talking to the inspector himself!")); - - close2; - if (.@q < 3) - setq(.quest_inspector, 3); - end; - } - - if (.@q == 2 || .@q == 3) - { - speech( - l("I saw someone sneaking around town wearing a theater mask."), - l("It looked like one of the masks used by the troupe that was in town recently.")); - - close2; - setq(.quest_inspector, 4); - } - - else if (.@q == 10) - { - speech( - l("I've remembered something else."), - l("The night the troupe left, I saw someone with a theater mask take a large satchel out of town."), - l("He was heading north.")); - - close2; - setq(.quest_inspector, 11); - } - - end; - } - - function oldwoman_alibi { - speech(4, - l("Hello deary.")); - - selectd( - l("Was your husband with you at home all night the last night that the troupe was in town?")); - - speech( - l("Yes, we were both at home all night.")); - - close2; - setq(.quest_inspector, 9); - end; - } - - function oldwoman_filler { - npctalk3(l("I hope you catch that naughty person!")); - end; - } - - // OnTalk: - switch (getq(.quest_inspector)) - { - case 2: - case 3: oldwoman_ask; break; - case 4: - case 5: - case 6: - case 7: oldwoman_filler; break; - case 8: - case 9: oldwoman_alibi; break; - case 10: oldwoman_ask; break; - } - - // initial intro - if (BaseLevel < 40) - npctalk3(l("Watch out for these flowers. They don't like to be messed with.")); - else - npctalk3(l("Hello deary.")); - end; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_FEMALE; - .distance = 1; // this npc has bad hearing - .speed = 2000; // this npc is very old - // TODO: move graph (after the Hurnscald map is finalized) - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/sabine.txt b/npc/placeholder/sabine.txt deleted file mode 100644 index 1d0cc38a..00000000 --- a/npc/placeholder/sabine.txt +++ /dev/null @@ -1,64 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,291,97,0 script Sabine NPC_HUMAN_M_ARTIS,{ - - if (getq(.quest_inspector) != 2) - { - npctalk3(generic(1 | 16)); - end; - } - - speech(4, - l("Isn't this place pretty?"), - l("I love hanging out here!")); - - selectd( - l("Have you seen anything strange lately?"), - l("Do you know anything about the recent robberies?")); - - speech( - l("No, sorry.")); - - close; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_FEMALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/soul-menhir.txt b/npc/placeholder/soul-menhir.txt deleted file mode 100644 index 0b2d177d..00000000 --- a/npc/placeholder/soul-menhir.txt +++ /dev/null @@ -1,58 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Description: -// place of power, mana refills faster when sitting nearby - -008-1,253,112,0 script Soul Menhir#hurnscald NPC_HUMAN_M_ARTIS,{ - - end; - -OnRefill: - @menhir_lock = false; - getmapxy(.@map$, .@x, .@y, UNITTYPE_PC); - - if (.@map$ != .map$ || distance(.x, .y, .@x, .@y) > .refill_distance || - !(issit())) - end; - - heal(0, .refill_rate); - end; - - -OnTimer500: - .@count = getunits(BL_PC, .@units[0], false, .map$, (.x - .refill_distance), - (.y - .refill_distance), (.x + .refill_distance), (.y + .refill_distance)); - - for (.@i = 0; .@i < .@count; ++.@i) - { - if (.@units[.@i] < 0) continue; // pre-check, just in case - deltimer(.name$ + "::OnRefill", .@units[.@i]); - if (gettimer(TIMER_COUNT, .@units[.@i], .name$ + "::OnRefill") > 0 || - getvariableofpc(@menhir_lock, .@units[.@i])) { - continue; - } - set(getvariableofpc(@menhir_lock, .@units[.@i]), true); - addtimer(rand(.refill_timer), .name$ + "::OnRefill", .@units[.@i]); - } - - initnpctimer(); - end; - -OnInit: - - .refill_rate = 1; // number of SP to give every refill - .refill_distance = 7; // max distance - .refill_timer = 200; // wait rand(X) ms before refill - initnpctimer(); - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/troupe-leader.txt b/npc/placeholder/troupe-leader.txt deleted file mode 100644 index 05f20e6a..00000000 --- a/npc/placeholder/troupe-leader.txt +++ /dev/null @@ -1,119 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,306,115,0 script Troupe Leader NPC_HUMAN_M_ARTIS,{ - - function nohmask_question { - // XXX: shouldn't the player ask a question before she replies Yes? this feels too abrupt - speech(4, - l("Yes, a mask was stolen from us the last night we were in Hurnscald.")); - - selectd( - l("Any ideas on who might have taken it?"), - l("Are you sure one of your troupe members didn't hide it and commit those robberies?"), - l("Hmm...")); - - switch (@menu) - { - case 1: - speech( - l("Hm..."), - l("I did see an old man hang out near the theater after our last show.")); - close2; - setq(.quest_inspector, 6); - close; - - case 2: - speech( - l("I am absolutely positive."), - l("None of my troupe have left the city since we got here."), - l("Good day!")); - close; - } - - closeclientdialog(); - close; - } - - function nohmask_found { - // XXX: shouldn't the player say "I found your mask" before the npc says thanks? - speech(4, - l("Thank you for finding the mask."), - l("You did such a good job, you should keep it.")); - - if (checkweight(.reward_item, 1) != true) - { - speech(8, - l("It seems you can't carry it right now...")); - close; - } - - setq(.quest_inspector, 15); - getexp(.reward_exp, 0); - getitem(.reward_item, 1); - - speech( - l("We don't need it anymore."), - l("We're doing different shows here.")); - close; - } - - // OnTalk: - switch (getq(.quest_inspector)) - { - case 5: nohmask_question; break; - // XXX: shouldn't it have an in-between state where it says good luck or something? - case 14: nohmask_found; break; - // XXX: shouldn't it have a "completed" state where it says thanks, come back any time? - } - - // initial intro - speech( - l("Hello."), - l("I'm the leader of a traveling theater troupe."), - l("We'll be staying here in Tulimshar for a while.")); - close; - -OnInit: - .reward_item = Aquada; // FIXME: change this when we get NohMask - .reward_exp = 1500; - - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_FEMALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/scripts.conf b/npc/scripts.conf index a5ed16ba..91d5b218 100644 --- a/npc/scripts.conf +++ b/npc/scripts.conf @@ -116,26 +116,6 @@ "npc/config/hairstyle_config.txt", // placeholder scripts -"npc/placeholder/hinnak.txt", -"npc/placeholder/mikhail.txt", -"npc/placeholder/bernard.txt", -"npc/placeholder/ledmitz.txt", -"npc/placeholder/jack.txt", -"npc/placeholder/inspector.txt", -"npc/placeholder/alan.txt", -"npc/placeholder/troupe-leader.txt", -"npc/placeholder/old-man.txt", -"npc/placeholder/old-woman.txt", -"npc/placeholder/books.txt", -"npc/placeholder/malek.txt", -"npc/placeholder/milly.txt", -"npc/placeholder/sabine.txt", -"npc/placeholder/doctor.txt", -"npc/placeholder/nurse.txt", -"npc/placeholder/soul-menhir.txt", -"npc/placeholder/note.txt", -"npc/placeholder/macgowan.txt", -"npc/placeholder/nicholas.txt", //"npc/placeholder/angus.txt", //"npc/placeholder/caul.txt", //"npc/placeholder/receptionist.txt", -- cgit v1.2.3-60-g2f50 From 2fa329894966e3067042885a0dc95845ca34dde8 Mon Sep 17 00:00:00 2001 From: Micksha Date: Wed, 24 Oct 2018 22:54:02 +0200 Subject: Fix a few scripts, improve two maps --- maps/re/008-1.mcache | Bin 6870 -> 6872 bytes maps/re/008-2-2.mcache | Bin 117 -> 127 bytes npc/008-1/soul-menhir.txt | 2 +- npc/008-2-2/melinda.txt | 160 ++++++++++++++++++++++++++++++++++++++++++---- npc/008-2-6/alan.txt | 2 +- npc/_anchors.txt | 1 + 6 files changed, 150 insertions(+), 15 deletions(-) diff --git a/maps/re/008-1.mcache b/maps/re/008-1.mcache index 8672702d..b8d09505 100644 Binary files a/maps/re/008-1.mcache and b/maps/re/008-1.mcache differ diff --git a/maps/re/008-2-2.mcache b/maps/re/008-2-2.mcache index b98e0800..2ff1f27e 100644 Binary files a/maps/re/008-2-2.mcache and b/maps/re/008-2-2.mcache differ diff --git a/npc/008-1/soul-menhir.txt b/npc/008-1/soul-menhir.txt index dd1a6e38..3c295c92 100644 --- a/npc/008-1/soul-menhir.txt +++ b/npc/008-1/soul-menhir.txt @@ -4,7 +4,7 @@ // Description: // place of power, mana refills faster when sitting nearby -008-1,253,112,0 script Soul Menhir#hurnscald NPC_NO_SPRITE,{ +008-1,252,111,0 script Soul Menhir#hurnscald NPC_NO_SPRITE,{ end; diff --git a/npc/008-2-2/melinda.txt b/npc/008-2-2/melinda.txt index 445cfeae..66b30be3 100644 --- a/npc/008-2-2/melinda.txt +++ b/npc/008-2-2/melinda.txt @@ -1,22 +1,156 @@ + // Evol scripts. -// Author: -// Micksha +// Authors: +// Toams // Description: -// Melinda, waitress in Hurns` Rusty Pick. +// Melinda, Rusty Pick's waitress 008-2-2,40,29,0 script Melinda#008-2-2 NPC_MELINDA,1,1,{ - speech - l("Oh hey!"), - l("I would like to serve you a beer or a sandwich, or even a shot (alcohol is bad, remember)."), - l("But I am afraid we need Tomminator to teach me this."), - lg("So, see you later."); - +function StartConversation { + + .@tick = gettimetick(1); + if (.@tick > @Hurns_Rusty_Pick_WaitressTick + 10) + { + setarray .messages$[0], l("Welcome to our inn!"), + l("Welcome to the Rusty Pick."), + l("Please, have a seat."), + l("Lovely day, isn't it?"); + + .@r = rand(getarraysize(.messages$)); + .@msg$ = .messages$[.@r]; + npctalk3 .@msg$; + @Hurns_Rusty_Pick_WaitressTick = .@tick; + } + } + +mes ""; +mesn; +mesq l("Hi, sweetie! Want a fresh beer for 170 Florin?"); +switch (select(l("Sure! [Don't tip]"), + l("Sure! [Tip 5 Florin]"), + l("Sure! [Tip 10 Florin]"), + l("Nah, maybe later."))) +{ + case 1: + if (Zeny < 170) + goto L_NoMoney; + getinventorylist; + if (@inventorylist_count == 100 && countitem("Beer") == 0) + goto L_TooMany; + set Zeny, Zeny - 170; + getitem Beer, 1; + mes ""; + mesn; + mesq l("Pff... Nickel nurser!"); + goto L_Close; + case 2: + if (Zeny < 175) + goto L_NoMoney; + getinventorylist; + if (@inventorylist_count == 100 && countitem("Beer") == 0) + goto L_TooMany; + set Zeny, Zeny - 175; + getitem "Beer", 1; + mes ""; + mesn; + mesq l("Thanks for the tip!"); + goto L_Close; + case 3: + if (Zeny < 180) + goto L_NoMoney; + getinventorylist; + if (@inventorylist_count == 100 && countitem("Beer") == 0) + goto L_TooMany; + set Zeny, Zeny - 180; + getitem "Beer", 1; + mes ""; + mesn; + mesq l("Thank you, sweetie! Want to hear a secret?"); + switch (select(l("What is it, darling?"), + l("Nah, I don't feel like chatting."))) + { + case 1: + mes ""; + mesn; + mesq l("The master bowyer in this village used to construct exceptional bows. When you want one you should go and ask him."); + goto L_Close; + case 2: + goto L_No; + } + goto L_Close; + case 4: + goto L_No; +} + +L_NoMoney: + mes ""; + mesn; + mesq l("You look broke. Don't think that you can dine and dash here!"); + goto L_Close; + +L_No: + mes ""; + mesn; + mesq l("Just call me when you changed your mind."); + goto L_Close; + +L_Close: + initnpctimer; close; - + +L_TooMany: + mes ""; + mesn; + mesq l("You don't have room for a beer!"); + goto L_Close; + +OnTimer1000: + dographmovestep; + +OnTouch: + StartConversation; + end; + OnInit: .sex = G_FEMALE; - .distance = 2; - end; + .distance = 5; + .speed = 300; + initmovegraph "barkeeper", 43, 30, + "kfahr", 44, 36, + "l_table_b", 36, 36, + "l_table_r", 38, 33, + "m_table_l", 39, 33, + "m_table_b", 41, 36, + "r_table_r", 46, 32, + "bucket", 46, 30; + + + + setmovegraphcmd "barkeeper", "kfahr", 1, "dir 4; wait 1", + "barkeeper", "r_table_r", 1, "dir 2; wait 1", + "kfahr", "barkeeper", 1, "dir 4; wait 1; say Another round for kfahr's table.;" + "wait 1; say They sure are thirsty today;" + "wait 1; moveon", + "kfahr", "bucket", 1, "dir 4; wait 1; emote 1;"// todo: find angry emote + "wait 15; moveon", + "kfahr", "r_table_r", 1, "dir 2; wait 1", + "bucket", "l_table_b", 1, "dir 4; wait 1", + "bucket", "l_table_r", 1, "dir 2; wait 1", + "bucket", "m_table_l", 1, "dir 3; wait 1", + "bucket", "m_table_b", 1, "dir 4; wait 1", + "bucket", "r_table_r", 1, "dir 2; wait 1", + "bucket", "kfahr", 1, "dir 4; wait 1", + "l_table_b", "barkeeper", 1, "dir 4; wait 1", + "l_table_b", "bucket", 1, "dir 4; wait 1; emote 1;" // todo: find angry emote + "wait 15; moveon", + "l_table_b", "m_table_l", 1, "dir 1; wait 1", + "m_table_b", "l_table_b", 1, "dir 4; wait 1", + "r_table_r", "kfahr", 1, "dir 4; wait 1", + "m_table_l", "bucket", 1, "dir 4; wait 1", + "l_table_r", "kfahr", 1, "dir 4; wait 1"; + + + firstmove "wait 8"; + initnpctimer; } - diff --git a/npc/008-2-6/alan.txt b/npc/008-2-6/alan.txt index eebd11cd..35d75437 100644 --- a/npc/008-2-6/alan.txt +++ b/npc/008-2-6/alan.txt @@ -4,7 +4,7 @@ // Description: // Alan the bow-maker. -008-2-6,32,24,0 script Alan NPC_YOUNG_MAN_KFAHR,{ +008-2-6,31,26,0 script Alan NPC_YOUNG_MAN_KFAHR,{ function bow_intro { speech(4, diff --git a/npc/_anchors.txt b/npc/_anchors.txt index 3630ba7e..5142b8c9 100644 --- a/npc/_anchors.txt +++ b/npc/_anchors.txt @@ -19,6 +19,7 @@ OnInit: htput(.ht, "^LEG", "001-2-33 34 42"); htput(.ht, "^LIB", "001-2-4 42 35"); htput(.ht, "^LIGHT", "001-2-0 37 32"); + htput(.ht, "^LUVIA", "008-1 256 206"); htput(.ht, "^MERCH|^BANK", "001-2-19 28 30"); htput(.ht, "^MOON", "001-2-2 40 34"); htput(.ht, "^NARD", "000-2-3 21 28"); -- cgit v1.2.3-60-g2f50 From d9797a547886ece5eff9e346a782f63def474a3b Mon Sep 17 00:00:00 2001 From: Micksha Date: Thu, 25 Oct 2018 00:02:37 +0200 Subject: Requested Re-naming --- npc/008-2-2/melania.txt | 21 +++++++++++++++++++++ npc/008-2-2/receptionist.txt | 21 --------------------- npc/008-2-6/apprentice.txt | 20 -------------------- npc/008-2-6/donald.txt | 20 ++++++++++++++++++++ 4 files changed, 41 insertions(+), 41 deletions(-) create mode 100644 npc/008-2-2/melania.txt delete mode 100644 npc/008-2-2/receptionist.txt delete mode 100644 npc/008-2-6/apprentice.txt create mode 100644 npc/008-2-6/donald.txt diff --git a/npc/008-2-2/melania.txt b/npc/008-2-2/melania.txt new file mode 100644 index 00000000..ba9c4e95 --- /dev/null +++ b/npc/008-2-2/melania.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Receptionist of Rusty Pick. +// THIS IS A PLACEHOLDER! + +008-2-2,28,27,0 script Melania NPC_AIRLIA,{ + speech + l("Hello Sir."), + l("Welcome to the Rusty Pick. Sorry, we have no room left today."), + l("One advice: Don't take the things the Drinkers say too serious. They are sitting here and drinking all day."), + lg("I wish you a beautiful day."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-2/receptionist.txt b/npc/008-2-2/receptionist.txt deleted file mode 100644 index c3be99c2..00000000 --- a/npc/008-2-2/receptionist.txt +++ /dev/null @@ -1,21 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// Receptionist of Rusty Pick. -// THIS IS A PLACEHOLDER! - -008-2-2,28,27,0 script Receptionist#008-2-2 NPC_AIRLIA,{ - speech - l("Hello Sir."), - l("Welcome to the Rusty Pick. Sorry, we have no room left today."), - l("One advice: Don't take the things the Drinkers say too serious. They are sitting here and drinking all day."), - lg("I wish you a beautiful day."); - - close; - -OnInit: - .sex = G_MALE; - .distance = 2; - end; -} diff --git a/npc/008-2-6/apprentice.txt b/npc/008-2-6/apprentice.txt deleted file mode 100644 index 04d05562..00000000 --- a/npc/008-2-6/apprentice.txt +++ /dev/null @@ -1,20 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// Alan's Apprentice. -// THIS IS A PLACEHOLDER! - -008-2-6,29,27,0 script Apprentice#008-2-6 NPC_YOUNG_MAN_APPRENTICE,{ - speech - l("Hi Sir."), - l("Sorry, we are sold out for today."), - lg("Come back later."); - - close; - -OnInit: - .sex = G_MALE; - .distance = 2; - end; -} diff --git a/npc/008-2-6/donald.txt b/npc/008-2-6/donald.txt new file mode 100644 index 00000000..2b3a72f3 --- /dev/null +++ b/npc/008-2-6/donald.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Alan's Apprentice. +// THIS IS A PLACEHOLDER! + +008-2-6,29,27,0 script Donald NPC_YOUNG_MAN_APPRENTICE,{ + speech + l("Hi Sir."), + l("Sorry, we are sold out for today."), + lg("Come back later."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} -- cgit v1.2.3-60-g2f50 From 7b7e2dfe1e0eefe6e41b8625112ef3893196f336 Mon Sep 17 00:00:00 2001 From: Micksha Date: Thu, 25 Oct 2018 13:02:54 +0200 Subject: Add the rowboat and Koga NPCs to Artis --- db/constants.conf | 1 + npc/001-1/_import.txt | 2 ++ npc/001-1/koga.txt | 20 ++++++++++++++++++++ npc/001-1/rowboat.txt | 20 ++++++++++++++++++++ npc/008-2-2/_import.txt | 2 +- npc/008-2-6/_import.txt | 2 +- 6 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 npc/001-1/koga.txt create mode 100644 npc/001-1/rowboat.txt diff --git a/db/constants.conf b/db/constants.conf index ab0f14cf..2da38e3c 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -4123,6 +4123,7 @@ constants_db: { NPC_RICHARD_LEGACY: 454 NPC_SOPHIALLA: 455 NPC_MUNDANE: 456 + NPC_ROWBOAT_STAND_WE: 457 NPC_TEST1: 800 NPC_PLAYER: 801 diff --git a/npc/001-1/_import.txt b/npc/001-1/_import.txt index a8cfa7d7..1b748d55 100644 --- a/npc/001-1/_import.txt +++ b/npc/001-1/_import.txt @@ -18,6 +18,7 @@ "npc/001-1/harbours.txt", "npc/001-1/juscare.txt", "npc/001-1/katja.txt", +"npc/001-1/koga.txt", "npc/001-1/lucas.txt", "npc/001-1/manhole.txt", "npc/001-1/mapflags.txt", @@ -28,6 +29,7 @@ "npc/001-1/pious.txt", "npc/001-1/qonan.txt", "npc/001-1/qpid.txt", +"npc/001-1/rowboat.txt", "npc/001-1/rumly.txt", "npc/001-1/salem.txt", "npc/001-1/shop.txt", diff --git a/npc/001-1/koga.txt b/npc/001-1/koga.txt new file mode 100644 index 00000000..1359f4e3 --- /dev/null +++ b/npc/001-1/koga.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The Koga in Artis, only accessable via Rowboat. +// THIS IS A PLACEHOLDER! + +001-1,225,59,0 script Koga NPC_KOGA,{ + speech + l("Oh, hi."), + l("In case you don't have a commendatory letter from you-know-whom, I am just sitting here and observe the whales."); + l("Perhaps, and only perhaps, if you bring me the latter, I can bring you to a ship that will perhaps, and only perhaps, be able to bring you to Woodland."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 4; + end; +} diff --git a/npc/001-1/rowboat.txt b/npc/001-1/rowboat.txt new file mode 100644 index 00000000..8682ba0e --- /dev/null +++ b/npc/001-1/rowboat.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The rowboat, picking up the player on small beach in order to bring it to Koga. +// THIS IS A PLACEHOLDER! + +001-1,203,64,0 script Rowboat NPC_ROWBOAT_STAND_WE,{ + speech + l("Oh, hi."), + l("In case you don't have a commendatory letter from you-know-whom, I am just sitting here and observe the whales."); + l("Perhaps, and only perhaps, if you bring me the latter, I can bring you to a ship that will perhaps, and only perhaps, be able to bring you to Woodland."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 3; + end; +} diff --git a/npc/008-2-2/_import.txt b/npc/008-2-2/_import.txt index 9fc64957..55e479c0 100644 --- a/npc/008-2-2/_import.txt +++ b/npc/008-2-2/_import.txt @@ -5,6 +5,6 @@ "npc/008-2-2/kfahr.txt", "npc/008-2-2/ledmitz.txt", "npc/008-2-2/mapflags.txt", +"npc/008-2-2/melania.txt", "npc/008-2-2/melinda.txt", "npc/008-2-2/note.txt", -"npc/008-2-2/receptionist.txt", diff --git a/npc/008-2-6/_import.txt b/npc/008-2-6/_import.txt index ceb45513..38c19068 100644 --- a/npc/008-2-6/_import.txt +++ b/npc/008-2-6/_import.txt @@ -2,5 +2,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-6/_warps.txt", "npc/008-2-6/alan.txt", -"npc/008-2-6/apprentice.txt", +"npc/008-2-6/donald.txt", "npc/008-2-6/mapflags.txt", -- cgit v1.2.3-60-g2f50 From c2c01442697a0c220f45faa5838b1793be740601 Mon Sep 17 00:00:00 2001 From: Micksha Date: Thu, 25 Oct 2018 15:55:22 +0200 Subject: Add 3 varieties of Healing and Mana Potions, add iron and concentration potion. Only healing potions working for now. --- db/re/item_db.conf | 252 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) diff --git a/db/re/item_db.conf b/db/re/item_db.conf index de337b46..38eb48e9 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -1271,6 +1271,258 @@ item_db: ( doevent "#001-2-4-Book2::OnUse"; "> }, +{ + Id: 600 + AegisName: "SmallHealing" + Name: "Small Healing Potion" + Type: "IT_HEALING" + Buy: 2500 + Sell: 300 + Weight: 32 + Atk: 0 + Matk: 0 + Def: 0 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + WeaponLv: 0 + EquipLv: 0 + Refine: false + ViewSprite: 600 + BindOnEquip: false + BuyingStore: true + Delay: 100 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + @min = 200; + @max = 300; + @delay = 3; + @type = 2; + doevent "rand_sc_heal::OnUse"; + "> +}, +{ + Id: 601 + AegisName: "MediumHealing" + Name: "Medium Healing Potion" + Type: "IT_HEALING" + Buy: 5000 + Sell: 650 + Weight: 64 + Atk: 0 + Matk: 0 + Def: 0 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + WeaponLv: 0 + EquipLv: 0 + Refine: false + ViewSprite: 601 + BindOnEquip: false + BuyingStore: true + Delay: 100 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + @min = 400; + @max = 600; + @delay = 4; + @type = 2; + doevent "rand_sc_heal::OnUse"; + "> +}, +{ + Id: 602 + AegisName: "LargeHealing" + Name: "Large Healing Potion" + Type: "IT_HEALING" + Buy: 10000 + Sell: 1250 + Weight: 128 + Atk: 0 + Matk: 0 + Def: 0 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + WeaponLv: 0 + EquipLv: 0 + Refine: false + ViewSprite: 602 + BindOnEquip: false + BuyingStore: true + Delay: 100 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + @min = 800; + @max = 1200; + @delay = 5; + @type = 2; + doevent "rand_sc_heal::OnUse"; + "> +}, +{ + Id: 603 + AegisName: "SmallMana" + Name: "Small Mana Potion" + Type: "IT_HEALING" + Buy: 2000 + Sell: 250 + Weight: 32 + Atk: 0 + Matk: 0 + Def: 0 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + WeaponLv: 0 + EquipLv: 0 + Refine: false + ViewSprite: 603 + BindOnEquip: false + BuyingStore: true + Delay: 205 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + bonus bMaxSP,20; + "> +}, +{ + Id: 604 + AegisName: "MediumMana" + Name: "Medium Mana Potion" + Type: "IT_HEALING" + Buy: 5000 + Sell: 600 + Weight: 64 + Atk: 0 + Matk: 0 + Def: 0 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + WeaponLv: 0 + EquipLv: 0 + Refine: false + ViewSprite: 604 + BindOnEquip: false + BuyingStore: true + Delay: 250 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + bonus bMaxSP,50; + "> +}, +{ + Id: 605 + AegisName: "LargeMana" + Name: "Large Mana Potion" + Type: "IT_HEALING" + Buy: 10000 + Sell: 1500 + Weight: 128 + Atk: 0 + Matk: 0 + Def: 0 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + WeaponLv: 0 + EquipLv: 0 + Refine: false + ViewSprite: 605 + BindOnEquip: false + BuyingStore: true + Delay: 250 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + bonus bMaxSP,100; + "> +}, +{ + Id: 606 + AegisName: "ConcPotion" + Name: "Concentration Potion" + Type: "IT_HEALING" + Buy: 2500 + Sell: 650 + Weight: 25 + Atk: 0 + Matk: 0 + Def: 0 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + WeaponLv: 0 + EquipLv: 0 + Refine: false + ViewSprite: 606 + BindOnEquip: false + BuyingStore: true + Delay: 100 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + bonus bAspd,50; + "> +}, +{ + Id: 607 + AegisName: "IronPotion" + Name: "Iron Potion" + Type: "IT_HEALING" + Buy: 2500 + Sell: 650 + Weight: 40 + Atk: 0 + Matk: 0 + Def: 0 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + WeaponLv: 0 + EquipLv: 0 + Refine: false + ViewSprite: 606 + BindOnEquip: false + BuyingStore: true + Delay: 500 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + bonus bStr,5; + "> +}, { Id: 700 AegisName: "SmallTentacles" -- cgit v1.2.3-60-g2f50 From 8c2297086f1811dba40de3929b588c461223e13e Mon Sep 17 00:00:00 2001 From: Micksha Date: Thu, 25 Oct 2018 16:48:50 +0200 Subject: fix script bugs --- npc/008-2-2/_import.txt | 2 +- npc/008-2-2/melania.txt | 2 +- npc/008-2-6/_import.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npc/008-2-2/_import.txt b/npc/008-2-2/_import.txt index 9fc64957..55e479c0 100644 --- a/npc/008-2-2/_import.txt +++ b/npc/008-2-2/_import.txt @@ -5,6 +5,6 @@ "npc/008-2-2/kfahr.txt", "npc/008-2-2/ledmitz.txt", "npc/008-2-2/mapflags.txt", +"npc/008-2-2/melania.txt", "npc/008-2-2/melinda.txt", "npc/008-2-2/note.txt", -"npc/008-2-2/receptionist.txt", diff --git a/npc/008-2-2/melania.txt b/npc/008-2-2/melania.txt index ba9c4e95..9b3980ed 100644 --- a/npc/008-2-2/melania.txt +++ b/npc/008-2-2/melania.txt @@ -15,7 +15,7 @@ close; OnInit: - .sex = G_MALE; + .sex = G_FEMALE; .distance = 2; end; } diff --git a/npc/008-2-6/_import.txt b/npc/008-2-6/_import.txt index ceb45513..38c19068 100644 --- a/npc/008-2-6/_import.txt +++ b/npc/008-2-6/_import.txt @@ -2,5 +2,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-6/_warps.txt", "npc/008-2-6/alan.txt", -"npc/008-2-6/apprentice.txt", +"npc/008-2-6/donald.txt", "npc/008-2-6/mapflags.txt", -- cgit v1.2.3-60-g2f50 From 9feb77ec9cf13c8b0c2da0a1382e17e9a7a14704 Mon Sep 17 00:00:00 2001 From: Micksha Date: Sun, 28 Oct 2018 10:15:42 +0100 Subject: add the torch. --- db/re/item_db.conf | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/db/re/item_db.conf b/db/re/item_db.conf index 560cc22b..e7e97adc 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -4198,7 +4198,7 @@ item_db: ( Gender: "SEX_ANY" Loc: ["EQP_HAND_R","EQP_HAND_L"] WeaponLv: 1 - EquipLv: 15 + EquipLv: 12 Refine: false Subtype: "W_2HSPEAR" BindOnEquip: false @@ -4225,7 +4225,7 @@ item_db: ( Gender: "SEX_ANY" Loc: "EQP_HAND_R" WeaponLv: 1 - EquipLv: 1 + EquipLv: 15 Refine: false Subtype: "W_DAGGER" ViewSprite: 1 @@ -4270,7 +4270,7 @@ item_db: ( Buy: 17500 Sell: 3700 Weight: 250 - Atk: 50 + Atk: 200 Matk: 0 Def: 0 Range: 0 @@ -4289,6 +4289,33 @@ item_db: ( Delay: 0 Sprite: 0 }, +{ + Id: 3511 + AegisName: "Torch" + Name: "Torch" + Type: "IT_WEAPON" + Buy: 2500 + Sell: 500 + Weight: 100 + Atk: 150 + Matk: 0 + Def: 0 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: ["EQP_HAND_R","EQP_HAND_L"] + WeaponLv: 1 + EquipLv: 10 + Refine: false + Subtype: "W_DAGGER" + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, { Id: 4000 AegisName: "PiouEgg" -- cgit v1.2.3-60-g2f50 From 4cc5009ae938b742ce35f81ef091e6a242d23afd Mon Sep 17 00:00:00 2001 From: toams Date: Mon, 29 Oct 2018 20:25:16 +0100 Subject: make melinda walk again --- npc/008-2-2/melinda.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npc/008-2-2/melinda.txt b/npc/008-2-2/melinda.txt index 66b30be3..2013c326 100644 --- a/npc/008-2-2/melinda.txt +++ b/npc/008-2-2/melinda.txt @@ -117,7 +117,7 @@ OnInit: .distance = 5; .speed = 300; initmovegraph "barkeeper", 43, 30, - "kfahr", 44, 36, + "kfahr", 45, 36, "l_table_b", 36, 36, "l_table_r", 38, 33, "m_table_l", 39, 33, -- cgit v1.2.3-60-g2f50 From 4736b28a8462e652a632f57ee7496f791847d461 Mon Sep 17 00:00:00 2001 From: toams Date: Tue, 30 Oct 2018 20:12:25 +0100 Subject: Rename bartender to barron and add a shop --- npc/008-2-2/barron.txt | 32 ++++++++++++++++++++++++++++++++ npc/008-2-2/bartender.txt | 20 -------------------- npc/008-2-2/shop.txt | 25 +++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 npc/008-2-2/barron.txt delete mode 100644 npc/008-2-2/bartender.txt create mode 100644 npc/008-2-2/shop.txt diff --git a/npc/008-2-2/barron.txt b/npc/008-2-2/barron.txt new file mode 100644 index 00000000..48ad1120 --- /dev/null +++ b/npc/008-2-2/barron.txt @@ -0,0 +1,32 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Barron, the bartender of the Rusty Pick. + +008-2-2,43,28,0 script Barron#008-2-2 NPC_GENERAL_STORE,{ +speech S_LAST_NEXT, + l("Hi!"), + l("I am the bartender here, can I provide you with some delicious beverage?"), + l("Or you can take seat and ask Melinda if you need something."); + + switch (select(l("What beverages do you have?"), + l("I'll ask Melinda later"))) + { + case 1: + closeclientdialog; + shop "#Invisible008-2-2"; + close; + case 2: + speech S_FIRST_BLANK_LINE, + l("Make sure to tip her, it will brighten up her day."); + close; + } + + + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-2-2/bartender.txt b/npc/008-2-2/bartender.txt deleted file mode 100644 index eb3b9393..00000000 --- a/npc/008-2-2/bartender.txt +++ /dev/null @@ -1,20 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// Bartender of the Rusty Pick. -// THIS IS A PLACEHOLDER! - -008-2-2,43,28,0 script Bartender#008-1 NPC_GENERAL_STORE,{ - speech - l("Hi!"), - l("I am the Bartender here, the name doesnt matter at all."); - lg("If you need something, please ask this beautiful girl on my right. (She needs the tip)."); - - close; - -OnInit: - .sex = G_MALE; - .distance = 2; - end; -} diff --git a/npc/008-2-2/shop.txt b/npc/008-2-2/shop.txt new file mode 100644 index 00000000..823e62c8 --- /dev/null +++ b/npc/008-2-2/shop.txt @@ -0,0 +1,25 @@ +// Evol scripts. +// Authors: +// 4144 +// Reid +// Description: +// Inn hidden shop. + +008-2-2,40,30,0 trader #Invisible008-2-2 NPC_HIDDEN,{ + +OnInit: + tradertype(NST_MARKET); + + sellitem Beer, -1, 50; + + .sex = G_OTHER; + .distance = 10; + end; + +OnClock0000: + restoreshopitem Beer, 20; +OnClock0800: + restoreshopitem Beer, 20; +OnClock1600: + restoreshopitem Beer, 20; +} -- cgit v1.2.3-60-g2f50 From e69fa645ba81a361943a4fc6fbd4742a3d075a46 Mon Sep 17 00:00:00 2001 From: toams Date: Thu, 1 Nov 2018 13:43:19 +0100 Subject: forgot to include this file in previous commit --- npc/008-2-2/_import.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/npc/008-2-2/_import.txt b/npc/008-2-2/_import.txt index 55e479c0..34d628f7 100644 --- a/npc/008-2-2/_import.txt +++ b/npc/008-2-2/_import.txt @@ -1,10 +1,11 @@ // Map 008-2-2: The Rusty Pick // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-2/_warps.txt", -"npc/008-2-2/bartender.txt", +"npc/008-2-2/barron.txt", "npc/008-2-2/kfahr.txt", "npc/008-2-2/ledmitz.txt", "npc/008-2-2/mapflags.txt", "npc/008-2-2/melania.txt", "npc/008-2-2/melinda.txt", "npc/008-2-2/note.txt", +"npc/008-2-2/shop.txt", -- cgit v1.2.3-60-g2f50 From 178cb29c8cb206920404f28557536e74004180bb Mon Sep 17 00:00:00 2001 From: Micksha Date: Mon, 5 Nov 2018 20:46:38 +0100 Subject: fix a few maps --- maps/re/001-3-0.mcache | Bin 1263 -> 1261 bytes maps/re/008-2-2.mcache | Bin 127 -> 117 bytes npc/001-3-0/_mobs.txt | 2 +- npc/001-3-0/_warps.txt | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/maps/re/001-3-0.mcache b/maps/re/001-3-0.mcache index 54c5fd48..7dd92e07 100644 Binary files a/maps/re/001-3-0.mcache and b/maps/re/001-3-0.mcache differ diff --git a/maps/re/008-2-2.mcache b/maps/re/008-2-2.mcache index 2ff1f27e..c718dfc6 100644 Binary files a/maps/re/008-2-2.mcache and b/maps/re/008-2-2.mcache differ diff --git a/npc/001-3-0/_mobs.txt b/npc/001-3-0/_mobs.txt index 18967b07..88caa962 100644 --- a/npc/001-3-0/_mobs.txt +++ b/npc/001-3-0/_mobs.txt @@ -15,7 +15,7 @@ 001-3-0,175,50,0,4 monster Ratto 1005,2,60000,30000 001-3-0,175,64,3,2 monster Cave Maggot 1027,4,5000,15000 001-3-0,104,75,48,43 monster Cave Maggot 1027,25,500,2000 -001-3-0,91,67,3,5 monster Cave Maggot 1027,3,500,2000 +001-3-0,90,67,2,5 monster Cave Maggot 1027,3,500,2000 001-3-0,128,86,3,5 monster Green Slime 1024,3,500,2000 001-3-0,42,103,3,5 monster Green Slime 1024,3,500,2000 001-3-0,120,85,7,2 monster Little Green Slime 1025,2,500,2000 diff --git a/npc/001-3-0/_warps.txt b/npc/001-3-0/_warps.txt index a2d4e9e2..d192e4ef 100644 --- a/npc/001-3-0/_warps.txt +++ b/npc/001-3-0/_warps.txt @@ -3,6 +3,6 @@ 001-3-0,196,35,0 warp #001-3-0_196_35 0,0,001-1,197,35 001-3-0,172,41,0 warp #001-3-0_172_41 0,0,001-3-1,34,58 001-3-0,162,40,0 warp #001-3-0_162_40 0,0,001-3-1,23,57 -001-3-0,198,59,0 warp #001-3-0_198_59 0,0,001-1,199,61 +001-3-0,198,60,0 warp #001-3-0_198_60 0,0,001-1,199,61 001-3-0,152,55,0 warp #001-3-0_152_55 0,0,001-1,152,51 001-3-0,85,130,0 warp #001-3-0_85_130 0,0,001-1,86,130 -- cgit v1.2.3-60-g2f50