Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Odin #2670

Closed
wants to merge 94 commits into from
Closed

Odin #2670

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
8d40bf7
Menos velocidad
Jan 24, 2024
67e6dfb
Merge branch 'opentibiabr:main' into Odin
Aerwix Jan 28, 2024
fa0b926
Update vocations.xml
Jan 31, 2024
ecaff61
Update storages.lua
Jan 31, 2024
be5b6a9
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 3, 2024
b0ef6f1
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 3, 2024
7d3307c
Player Beta
Feb 4, 2024
93236e2
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 5, 2024
8c2d314
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 5, 2024
facae75
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 6, 2024
566d5c3
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 9, 2024
23d2857
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 11, 2024
5a47bc8
Nuevos Exp/Skill/Magic Rates
Aerwix Feb 12, 2024
f00de74
Lua code format - (Stylua)
github-actions[bot] Feb 12, 2024
28fc8a5
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 15, 2024
f57cac4
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 15, 2024
b98b1a6
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 16, 2024
7954c26
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 16, 2024
6914908
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 17, 2024
8972644
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 20, 2024
e0383d3
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 21, 2024
cc955fb
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 21, 2024
814995e
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 27, 2024
5513cab
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 27, 2024
220d42c
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 27, 2024
369ebc4
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 28, 2024
fcbf7fe
Merge branch 'opentibiabr:main' into Odin
Aerwix Feb 29, 2024
35ec4bc
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 1, 2024
875d917
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 2, 2024
6098478
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 2, 2024
b586e9e
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 3, 2024
3fdc018
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 6, 2024
be6fd47
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 6, 2024
4c2a88a
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 8, 2024
a1bfb23
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 10, 2024
bf02386
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 12, 2024
f6de0b4
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 13, 2024
6afee97
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 13, 2024
d55ff42
Boost de HP y MP
Aerwix Mar 13, 2024
754d3ad
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 14, 2024
875ab4e
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 14, 2024
a38ff16
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 14, 2024
85b5a52
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 16, 2024
9a031fb
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 18, 2024
f76ae97
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 18, 2024
f008c38
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 19, 2024
578d662
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 19, 2024
aae0272
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 21, 2024
b3f8873
Update storages.lua
Mar 22, 2024
19d48a4
Merge branch 'Odin' of https://github.com/OueilheStudios/FOT into Odin
Mar 22, 2024
da9e975
Merge branch 'opentibiabr:main' into Odin
Aerwix Mar 26, 2024
1ba4bd9
Feat: No logout when exit client
Aerwix Mar 26, 2024
22ec557
Merge branch 'opentibiabr:main' into Odin
Aerwix Apr 1, 2024
ae44968
Merge branch 'opentibiabr:main' into Odin
Aerwix Apr 4, 2024
b8de01b
Merge branch 'opentibiabr:main' into Odin
Aerwix Apr 5, 2024
ccd8677
Update login.lua
Apr 7, 2024
20cc326
Merge branch 'opentibiabr:main' into Odin
Aerwix Apr 18, 2024
f5e161c
Merge branch 'opentibiabr:main' into Odin
Aerwix Apr 18, 2024
cfdf790
Merge branch 'opentibiabr:main' into Odin
Aerwix Apr 20, 2024
9b81f63
Merge branch 'opentibiabr:main' into Odin
Aerwix Apr 23, 2024
a5e76b1
Merge branch 'opentibiabr:main' into Odin
Aerwix Apr 25, 2024
ffcfbde
Test viewport
Aerwix Apr 25, 2024
d1dad11
Merge branch 'Odin' of https://github.com/OueilheStudios/FOT into Odin
Apr 25, 2024
28715eb
Merge branch 'opentibiabr:main' into Odin
Aerwix Apr 26, 2024
a39c454
Code format - (Clang-format)
github-actions[bot] Apr 26, 2024
d385f61
Test Viewport 25sqm
Aerwix Apr 27, 2024
2dd9962
Merge branch 'opentibiabr:main' into Odin
Aerwix Apr 27, 2024
59b1d31
Merge branch 'Odin' of https://github.com/OueilheStudios/FOT into Odin
Apr 27, 2024
b1c4a1d
Lua code format - (Stylua)
github-actions[bot] Apr 27, 2024
2ecbba9
Merge branch 'opentibiabr:main' into Odin
Aerwix Apr 30, 2024
e0e8995
Merge branch 'opentibiabr:main' into Odin
Aerwix May 4, 2024
f8102b5
Merge branch 'opentibiabr:main' into Odin
Aerwix May 8, 2024
ee3ffb5
Merge branch 'opentibiabr:main' into Odin
Aerwix May 13, 2024
45d5cf9
Merge branch 'opentibiabr:main' into Odin
Aerwix May 14, 2024
16cfe7f
Merge branch 'opentibiabr:main' into Odin
Aerwix May 15, 2024
1344350
Merge branch 'opentibiabr:main' into Odin
Aerwix May 17, 2024
74f7bbc
Merge branch 'opentibiabr:main' into Odin
Aerwix May 18, 2024
892a24c
Merge branch 'opentibiabr:main' into Odin
Aerwix May 22, 2024
dc277e1
Merge branch 'opentibiabr:main' into Odin
Aerwix May 25, 2024
895a80d
Test Custom Data
May 26, 2024
1c182d6
Update .gitignore
May 26, 2024
d0cc970
Create tree_of_life.lua
May 26, 2024
a318f7f
Lua code format - (Stylua)
github-actions[bot] May 26, 2024
1fe3ac1
Create guide.lua
May 26, 2024
30b1ab9
Merge branch 'Odin' of https://github.com/OueilheStudios/FOT into Odin
May 26, 2024
efc05d2
Lua code format - (Stylua)
github-actions[bot] May 26, 2024
6ff90ff
4 Vocaciones Principales
May 28, 2024
d0ae5d8
Spells Healing
May 28, 2024
13c3eb2
Lua code format - (Stylua)
github-actions[bot] May 28, 2024
773d53a
Update schema.sql
May 28, 2024
7ebdce6
Merge branch 'Odin' of https://github.com/OueilheStudios/FOT into Odin
May 28, 2024
afc8d8c
Merge branch 'opentibiabr:main' into Odin
Aerwix May 29, 2024
7422932
Merge branch 'opentibiabr:main' into Odin
Aerwix May 29, 2024
f6192c6
Merge branch 'main' into Odin
Aerwix May 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -397,3 +397,8 @@ vcpkg_installed

# CLION
cmake-build-*
data-naruto/world/ShinobiAscension-house.xml
data-naruto/world/ShinobiAscension-npc.xml
data-naruto/world/ShinobiAscension-monster.xml
data-naruto/world/ShinobiAscension-zones.xml
data-naruto/world/ShinobiAscension.otbm
21 changes: 19 additions & 2 deletions data-canary/lib/core/storages.lua
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,24 @@ Storage = {
}

GlobalStorage = {
ExampleQuest = {
Example = 60000,
FuneralQuest = {
RotwormQuest = 6000,
BanditsQuest = 6001,
CyclopsQuest = 6002,
BASG = 6003,
KosheiQuest = 6011,
SecretServiceQuest = 6004,
BAGQ = 6005,
BansheeQuest = 6006,
BAWQ = 6007,
YalaharQuest = 6008,
POIQuest = 6009,
InquisitionQuest = 6010,
CursedSpreadQuest = 6012,
BehemothQuest = 6013,
DemonHelmetQuest = 6014,
DwarvenQuest = 6015,
FeyristQuest = 6016,
FireWalkerQuest = 6017,
},
}
2 changes: 2 additions & 0 deletions data-naruto/lib/core/load.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
dofile(DATA_DIRECTORY .. "/lib/core/storages.lua")
dofile(DATA_DIRECTORY .. "/lib/core/quests.lua")
19 changes: 19 additions & 0 deletions data-naruto/lib/core/quests.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
if not Quests then
Quests = {
[1] = {
name = "Example",
startStorageId = Storage.Quest.ExampleQuest.Example,
startStorageValue = 1,
missions = {
[1] = {
name = "The Hidden Seal",
storageId = Storage.Quest.ExampleQuest.Example,
missionId = 1,
startValue = 1,
endValue = 1,
description = "You broke the first seal.",
},
},
},
}
end
60 changes: 60 additions & 0 deletions data-naruto/lib/core/storages.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
--[[
Reserved player action storage key ranges (const.hpp)
It is possible to place the storage in a quest door, so the player who has that storage will go through the door

Reserved player action storage key ranges (const.hpp at the source)
[10000000 - 20000000]
[1000 - 1500]
[2001 - 2011]

Others reserved player action/storages
[100] = unmovable/untrade/unusable items
[101] = use pick floor
[102] = well down action
[103-120] = others keys action
[103] = key 0010
[303] = key 0303
[1000] = level door. Here 1 must be used followed by the level.
Example: 1010 = level 10,
1100 = level 100]

Questline = Storage through the Quest
]]

Storage = {
Quest = {
Key = {
ID1000 = 103,
},
ExampleQuest = {
Example = 9000,
Door = 9001,
},
},

DelayLargeSeaShell = 30002,
Imbuement = 30004,
}

GlobalStorage = {
FuneralQuest = {
RotwormQuest = 6000,
BanditsQuest = 6001,
CyclopsQuest = 6002,
BASG = 6003,
KosheiQuest = 6011,
SecretServiceQuest = 6004,
BAGQ = 6005,
BansheeQuest = 6006,
BAWQ = 6007,
YalaharQuest = 6008,
POIQuest = 6009,
InquisitionQuest = 6010,
CursedSpreadQuest = 6012,
BehemothQuest = 6013,
DemonHelmetQuest = 6014,
DwarvenQuest = 6015,
FeyristQuest = 6016,
FireWalkerQuest = 6017,
},
}
2 changes: 2 additions & 0 deletions data-naruto/lib/lib.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- Core API functions implemented in Lua
dofile(DATA_DIRECTORY .. "/lib/core/load.lua")
3 changes: 3 additions & 0 deletions data-naruto/migrations/0.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
function onUpdateDatabase()
return false
end
5 changes: 5 additions & 0 deletions data-naruto/migrations/1.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-- return true = There are others migrations file
-- return false = This is the last migration file
function onUpdateDatabase()
return false
end
126 changes: 126 additions & 0 deletions data-naruto/monster/inmortal/tree_of_life.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
-- Script de Healing
function onTargetCreature(creature, target)
local min = 10000
local max = 90000

doTargetCombatHealth(0, target, COMBAT_HEALING, min, max, CONST_ME_NONE)
return true
end

local combat = Combat()
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, 0)
combat:setParameter(COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
combat:setArea(createCombatArea(AREA_CIRCLE6X6))
combat:setCallback(CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")

local spell = Spell("instant")

function spell.onCastSpell(creature, var)
return combat:execute(creature, var)
end

spell:name("Heal Players")
spell:words("#####31235123")
spell:blockWalls(false)
spell:needLearn(true)
spell:needDirection(false)
spell:register()

-- Creación de Monster
local mType = Game.createMonsterType("Tree of Life")
local monster = {}

monster.description = "an ancient tree of life"
monster.experience = 0
monster.outfit = {
lookTypeEx = 25405,
}

monster.health = 1000000
monster.maxHealth = 1000000
monster.race = "blood"
monster.corpse = 0
monster.speed = 0
monster.manaCost = 0
monster.maxSummons = 0

monster.changeTarget = {
interval = 4000,
chance = 0,
}

monster.strategiesTarget = {
nearest = 100,
}

monster.flags = {
summonable = false,
attackable = true,
hostile = true,
convinceable = false,
pushable = false,
rewardBoss = false,
illusionable = false,
canPushItems = false,
canPushCreatures = false,
staticAttackChance = 90,
targetDistance = 1,
runHealth = 0,
healthHidden = false,
isBlockable = false,
canWalkOnEnergy = true,
canWalkOnFire = true,
canWalkOnPoison = true,
pet = false,
}

monster.light = {
level = 0,
color = 0,
}

monster.voices = {
interval = 5000,
chance = 10,
{ text = "Be as useful as a tree! Give life to others; be shelter to everyone; grant fruits to all! Be good like a tree!", yell = false },
{ text = "The tree of life for me is a symbol of abundance and eternal life!", yell = false },
{ text = "Thanks for playing our OTServer!", yell = false },
}

monster.loot = {
{ name = "gold coin", chance = 74230, maxCount = 10 },
}

monster.attacks = {
{ name = "melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -10, effect = CONST_ME_DRAWBLOOD },
{ name = "Heal Players", interval = 5000, chance = 100 },
}

monster.defenses = {
defense = 5,
armor = 8,
{ name = "combat", interval = 2000, chance = 35, type = COMBAT_HEALING, minDamage = 30000, maxDamage = 60000, effect = CONST_ME_MAGIC_BLUE, target = false },
}

monster.elements = {
{ type = COMBAT_PHYSICALDAMAGE, percent = -100 },
{ type = COMBAT_ENERGYDAMAGE, percent = -100 },
{ type = COMBAT_EARTHDAMAGE, percent = -100 },
{ type = COMBAT_FIREDAMAGE, percent = -100 },
{ type = COMBAT_LIFEDRAIN, percent = -100 },
{ type = COMBAT_MANADRAIN, percent = -100 },
{ type = COMBAT_DROWNDAMAGE, percent = -100 },
{ type = COMBAT_ICEDAMAGE, percent = -100 },
{ type = COMBAT_HOLYDAMAGE, percent = -100 },
{ type = COMBAT_DEATHDAMAGE, percent = -100 },
}

monster.immunities = {
{ type = "paralyze", condition = false },
{ type = "outfit", condition = false },
{ type = "invisible", condition = true },
{ type = "bleed", condition = false },
}

mType:register(monster)
133 changes: 133 additions & 0 deletions data-naruto/npc/guide.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
local internalNpcName = "Guide"
local npcType = Game.createNpcType(internalNpcName)
local npcConfig = {}

npcConfig.name = internalNpcName
npcConfig.description = internalNpcName

npcConfig.health = 100
npcConfig.maxHealth = npcConfig.health
npcConfig.walkInterval = 2000
npcConfig.walkRadius = 2

npcConfig.outfit = {
lookType = 140,
lookHead = 38,
lookBody = 8,
lookLegs = 13,
lookFeet = 58,
lookAddons = 0,
}

npcConfig.flags = {
floorchange = false,
}

npcConfig.voices = {
interval = 15000,
chance = 50,
{ text = "I can inform you about the status of this world, if you're interested." },
{ text = "Hello, is this your first visit to Orario? I can show you around a little." },
{ text = "Talk to me if you need directions." },
{ text = "Need some help finding your way through Orario? Let me assist you." },
{ text = "Free escort to the depot for newcomers!" },
}

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)

npcType.onThink = function(npc, interval)
npcHandler:onThink(npc, interval)
end

npcType.onAppear = function(npc, creature)
npcHandler:onAppear(npc, creature)
end

npcType.onDisappear = function(npc, creature)
npcHandler:onDisappear(npc, creature)
end

npcType.onMove = function(npc, creature, fromPosition, toPosition)
npcHandler:onMove(npc, creature, fromPosition, toPosition)
end

npcType.onSay = function(npc, creature, type, message)
npcHandler:onSay(npc, creature, type, message)
end

npcType.onCloseChannel = function(npc, creature)
npcHandler:onCloseChannel(npc, creature)
end

local configMarks = {
-- Tiendas
{ mark = "magicShop", position = Position(10026, 10027, 7), markId = MAPMARK_BAG, description = "Potions and Runes" },
{ mark = "distanceShop", position = Position(10056, 10050, 7), markId = MAPMARK_BAG, description = "Distance Weapons and Ammunition" },
{ mark = "amuletShop", position = Position(10020, 10044, 7), markId = MAPMARK_BAG, description = "Amulets and Rings" },
{ mark = "gearShop", position = Position(9994, 10030, 7), markId = MAPMARK_SWORD, description = "Armors and Weapons Bazar" },
{ mark = "exerciseShop", position = Position(9972, 9955, 7), markId = MAPMARK_STAR, description = "Training Area" },
{ mark = "toolShop", position = Position(9979, 10014, 7), markId = MAPMARK_SHOVEL, description = "Backpacks and Tools" },
{ mark = "jewelryShop", position = Position(10024, 10068, 7), markId = MAPMARK_BAG, description = "Jewelry Shop" },
{ mark = "exoticPotionShop", position = Position(9941, 10019, 7), markId = MAPMARK_BAG, description = "Exotic Potions Shop" },
{ mark = "cupcakeShop", position = Position(10042, 10022, 7), markId = MAPMARK_BAG, description = "Cupcake Shop" },
-- Lugares Importantes
{ mark = "temple", position = Position(10000, 10000, 7), markId = MAPMARK_TEMPLE, description = "Temple" },
{ mark = "depot", position = Position(9956, 10008, 7), markId = MAPMARK_LOCK, description = "Depot" },
{ mark = "castle", position = Position(9984, 9982, 7), markId = MAPMARK_GREENNORTH, description = "Promotion (King Castle)" },
{ mark = "onlineTraining", position = Position(9937, 9985, 7), markId = MAPMARK_SWORD, description = "Online Training" },
{ mark = "bank", position = Position(10017, 10066, 7), markId = MAPMARK_DOLLAR, description = "Bank" },
-- Gates
--{mark = "eastGate", position = Position(1159, 1000, 7), markId = MAPMARK_REDEAST, description = "East Gate"},
--{mark = "southGate", position = Position(1000, 1159, 7), markId = MAPMARK_REDSOUTH, description = "South Gate"},
--{mark = "westGate", position = Position(842, 1000, 7), markId = MAPMARK_REDWEST, description = "West Gate"},
--{mark = "northGate", position = Position(1000, 842, 7), markId = MAPMARK_REDNORTH, description = "North Gate"}
}

local function creatureSayCallback(npc, creature, type, message)
local player = Player(creature)
local playerId = player:getId()

if not npcHandler:checkInteraction(npc, creature) then
return false
end

if table.contains({ "map", "marks" }, message) then
npcHandler:say("Would you like me to mark locations like - for example - the depot, bank and shops on your map?", npc, creature)
npcHandler:setTopic(playerId, 1)
elseif MsgContains(message, "yes") and npcHandler:getTopic(playerId) == 1 then
npcHandler:say("Here you go.", npc, creature)
local mark
for i = 1, #configMarks do
mark = configMarks[i]
player:addMapMark(mark.position, mark.markId, mark.description)
end
npcHandler:setTopic(playerId, 0)
elseif MsgContains(message, "no") and npcHandler:getTopic(playerId) >= 1 then
npcHandler:say("Well, nothing wrong about exploring the town on your own. Let me know if you need something!", npc, creature)
npcHandler:setTopic(playerId, 0)
end
return true
end

keywordHandler:addKeyword({ "information" }, StdModule.say, { npcHandler = npcHandler, text = "Currently, I can tell you all about the town, its temple, the bank, shops - well, warehouses - spell trainers and the depot, as well as about the adventurer's guild, hunting grounds, quests and the world status." })
keywordHandler:addKeyword({ "temple" }, StdModule.say, { npcHandler = npcHandler, text = "The temple is pretty much in the middle of Orario. If you go south from this harbour, you can't miss it." })
keywordHandler:addKeyword({ "bank" }, StdModule.say, { npcHandler = npcHandler, text = "The bank as well as jewel stores can be found in the House of Wealth, in the north-eastern part of Orario. I can mark it on your map if you want." })
keywordHandler:addKeyword({ "shops" }, StdModule.say, { npcHandler = npcHandler, text = "You can buy almost everything here! Visit one of our warehouses for weapons, armors, magical equipment, spells, gems, tools, furniture and everything else you can imagine." })
keywordHandler:addKeyword({ "depot" }, StdModule.say, { npcHandler = npcHandler, text = "The depot is a place where you can safely store your belongings. You are also protected against attacks there. I escort newcomers there." })
keywordHandler:addKeyword({ "job" }, StdModule.say, { npcHandler = npcHandler, text = "I will help you find your way in the buzzing city of Orario. I can mark important locations on your map and give you some information about the town and the world status." })
keywordHandler:addKeyword({ "town" }, StdModule.say, { npcHandler = npcHandler, text = "This trading city has been built directly over a swamp and basically stands on stone pillars. We have many large warehouses here. To speak of 'shops' would be an understatement." })
keywordHandler:addKeyword({ "name" }, StdModule.say, { npcHandler = npcHandler, text = "I'm Elena, sweetheart. I love your name, |PLAYERNAME|." })
-- Customs
keywordHandler:addKeyword({ "discord" }, StdModule.say, { npcHandler = npcHandler, text = "Make sure to join our discord. Invitation Link: {https://discord.com/invite/DyTuuf7zua}" })
keywordHandler:addKeyword({ "social" }, StdModule.say, { npcHandler = npcHandler, text = "All our social media are storaged at {https://allmylinks.com/aerwix}" })

npcHandler:setMessage(MESSAGE_GREET, "Welcome to Orario, |PLAYERNAME| Would you like some information and a {map} guide? Also you can ask for {discord} or our {social} media")
npcHandler:setMessage(MESSAGE_WALKAWAY, "Good bye.")
npcHandler:setMessage(MESSAGE_FAREWELL, "Good bye and enjoy your stay in Orario, |PLAYERNAME|.")

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true)

-- npcType registering the npcConfig table
npcType:register(npcConfig)
Loading
Loading