mirror of
https://github.com/ErikasKontenis/SabrehavenServer.git
synced 2025-05-08 12:49:20 +02:00
Merge branch '35-balance-paladins-knights-and-druids' into 'master'
Resolve "Balance Paladins, Knights and Druids" Closes #35 See merge request ErikasKontenis/Sabrehaven!32
This commit is contained in:
commit
3bd1a6f07e
New Text Document.txtconfig.lua
data
XML
actions
creaturescripts
events/scripts
global.luaitems792
lib
monster
781
acolyte of the cult.xmladept of the cult.xmlazure frog.xmlcarrion worm.xmlcoral frog.xmlenlightened of the cult.xmlnovice of the cult.xmlpirate buccaneer.xmlpirate corsair.xmlpirate cutthroat.xmlpirate ghost.xmlpirate marauder.xmlpirate skeleton.xmlquara constrictor scout.xmlquara constrictor.xmlquara hydromancer scout.xmlquara hydromancer.xmlquara mantassin scout.xmlquara mantassin.xmlquara pincher scout.xmlquara pincher.xmlquara predator scout.xmlquara predator.xmlthornback tortoise.xml
790
amazon.xmlancientscarab.xmlbandit.xmlbanshee.xmlbear.xmlbehemoth.xmlbeholder.xmlbluedjinn.xmlbonebeast.xmlbug.xmlcarniphila.xmlcaverat.xmlcrocodile.xmlcyclops.xmldemon.xmldemonskeleton.xmldragon.xmldragonlord.xmldwarf.xmldwarfgeomancer.xmldwarfguard.xmldwarfsoldier.xmlefreet.xmlelderbeholder.xmlelf.xmlelfarcanist.xmlelfscout.xmlfrosttroll.xmlgargoyle.xmlghost.xmlghoul.xmlgiantspider.xmlgoblin.xmlgreendjinn.xmlhero.xmlhyaena.xmlhydra.xmlkongra.xmllarva.xmllich.xmllion.xmllizardsentinel.xmllizardsnakecharmer.xmllizardtemplar.xmlmarid.xmlmerlkin.xmlminotaur.xmlminotaurarcher.xmlminotaurguard.xmlminotaurmage.xmlnecromancer.xmlorc.xmlorcberserker.xmlorcleader.xml@ -1 +1 @@
|
||||
next: 17723
|
||||
next: 17739
|
33
config.lua
33
config.lua
@ -1,6 +1,10 @@
|
||||
-- Custom
|
||||
knightCloseAttackDamageIncreasePercent = 50
|
||||
paladinRangeAttackDamageIncreasePercent = 40
|
||||
clientVersion = 792
|
||||
knightCloseAttackDamageIncreasePercent = 20
|
||||
paladinRangeAttackDamageIncreasePercent = 15
|
||||
-- Min/Max rate spawn is a multiplication of the map spawntime in spawns.xml Regular monster spawn time is 600. The formula would be randomValue = random(600*100, 600*200) which varies between 60s and 120s
|
||||
minRateSpawn = 100
|
||||
maxRateSpawn = 200
|
||||
|
||||
-- Combat settings
|
||||
-- NOTE: valid values for worldType are: "pvp", "no-pvp" and "pvp-enforced"
|
||||
@ -15,15 +19,15 @@ expFromPlayersLevelRange = 75
|
||||
distanceWeaponsDropOnGround = false
|
||||
|
||||
-- Skull System
|
||||
banLength = 30 * 24 * 60 * 60
|
||||
banLength = 2 * 24 * 60 * 60
|
||||
whiteSkullTime = 15 * 60
|
||||
redSkullTime = 30 * 24 * 60 * 60
|
||||
redSkullTime = 7 * 24 * 60 * 60
|
||||
killsDayRedSkull = 3
|
||||
killsWeekRedSkull = 5
|
||||
killsMonthRedSkull = 10
|
||||
killsDayBanishment = 6
|
||||
killsWeekBanishment = 10
|
||||
killsMonthBanishment = 20
|
||||
killsWeekRedSkull = 6
|
||||
killsMonthRedSkull = 99999
|
||||
killsDayBanishment = 1
|
||||
killsWeekBanishment = 12
|
||||
killsMonthBanishment = 99999
|
||||
|
||||
-- Connection Config
|
||||
-- NOTE: maxPlayers set to 0 means no limit
|
||||
@ -32,7 +36,7 @@ bindOnlyGlobalAddress = false
|
||||
loginProtocolPort = 7171
|
||||
gameProtocolPort = 7172
|
||||
statusProtocolPort = 7171
|
||||
maxPlayers = 1000
|
||||
maxPlayers = 0
|
||||
motd = "Welcome to Sabrehaven!"
|
||||
onePlayerOnlinePerAccount = true
|
||||
allowClones = false
|
||||
@ -42,7 +46,6 @@ replaceKickOnLogin = true
|
||||
maxPacketsPerSecond = -1
|
||||
autoStackCumulatives = false
|
||||
moneyRate = 1
|
||||
clientVersion = 792
|
||||
|
||||
-- Deaths
|
||||
-- NOTE: Leave deathLosePercent as -1 if you want to use the default
|
||||
@ -89,7 +92,7 @@ newbieLevelThreshold = 5
|
||||
-- Rates
|
||||
-- NOTE: rateExp is not used if you have enabled stages in data/XML/stages.xml
|
||||
rateExp = 1
|
||||
rateSkill = 5
|
||||
rateSkill = 3
|
||||
rateLoot = 2
|
||||
rateMagic = 2
|
||||
rateSpawn = 0
|
||||
@ -109,7 +112,7 @@ defaultPriority = "high"
|
||||
startupDatabaseOptimization = true
|
||||
|
||||
-- Status server information
|
||||
ownerName = ""
|
||||
ownerName = "Erikas"
|
||||
ownerEmail = ""
|
||||
url = "https://otland.net/"
|
||||
location = "Sweden"
|
||||
url = "https://sabrehaven.com/"
|
||||
location = "Poland"
|
||||
|
@ -446,6 +446,26 @@
|
||||
<mission name="Paw and Fur: Dwarfs" storageid="17703" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Low Undeads" storageid="17704" startvalue="0" endvalue="100" description="You already hunted |STATE|/100 undeads." />
|
||||
<mission name="Paw and Fur: Low Undeads" storageid="17704" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Elves" storageid="17729" startvalue="0" endvalue="200" description="You already hunted |STATE|/200 elves." />
|
||||
<mission name="Paw and Fur: Elves" storageid="17729" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Bugs" storageid="17730" startvalue="0" endvalue="40" description="You already hunted |STATE|/40 bugs." />
|
||||
<mission name="Paw and Fur: Bugs" storageid="17730" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Outlaws" storageid="17731" startvalue="0" endvalue="250" description="You already hunted |STATE|/250 outlaws." />
|
||||
<mission name="Paw and Fur: Outlaws" storageid="17731" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Hyaenas" storageid="17732" startvalue="0" endvalue="30" description="You already hunted |STATE|/30 hyaenas." />
|
||||
<mission name="Paw and Fur: Hyaenas" storageid="17732" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Lions" storageid="17733" startvalue="0" endvalue="20" description="You already hunted |STATE|/20 lions." />
|
||||
<mission name="Paw and Fur: Lions" storageid="17733" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Bears" storageid="17734" startvalue="0" endvalue="35" description="You already hunted |STATE|/35 bears." />
|
||||
<mission name="Paw and Fur: Bears" storageid="17734" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Slimes" storageid="17735" startvalue="0" endvalue="100" description="You already hunted |STATE|/100 slimes." />
|
||||
<mission name="Paw and Fur: Slimes" storageid="17735" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Beholders" storageid="17736" startvalue="0" endvalue="250" description="You already hunted |STATE|/250 beholders." />
|
||||
<mission name="Paw and Fur: Beholders" storageid="17736" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Djinns" storageid="17737" startvalue="0" endvalue="500" description="You already hunted |STATE|/500 djinns." />
|
||||
<mission name="Paw and Fur: Djinns" storageid="17737" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Pirates" storageid="17738" startvalue="0" endvalue="600" description="You already hunted |STATE|/600 pirates." />
|
||||
<mission name="Paw and Fur: Pirates" storageid="17738" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
|
||||
<!--Grizzly Adams: level 50 to 79 -->
|
||||
<mission name="Paw and Fur: Quara Scouts" storageid="17616" startvalue="0" endvalue="200" description="You already hunted |STATE|/200 quara scouts." />
|
||||
@ -459,17 +479,27 @@
|
||||
<mission name="Paw and Fur: Dragons" storageid="17620" startvalue="0" endvalue="200" description="You already hunted |STATE|/200 dragons." />
|
||||
<mission name="Paw and Fur: Dragons" storageid="17620" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Medium Class Orcs" storageid="17712" startvalue="0" endvalue="300" description="You already hunted |STATE|/300 orcs." />
|
||||
<mission name="Paw and Fur: Medium Class Orcs" storageid="17712" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: High Class Minotaurs" storageid="17713" startvalue="0" endvalue="300" description="You already hunted |STATE|/300 minotaurs." />
|
||||
<mission name="Paw and Fur: High Class Minotaurs" storageid="17713" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Lizards" storageid="17714" startvalue="0" endvalue="300" description="You already hunted |STATE|/300 lizards." />
|
||||
<mission name="Paw and Fur: Lizards" storageid="17714" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: High Class Dwarfs" storageid="17715" startvalue="0" endvalue="300" description="You already hunted |STATE|/300 dwarfs." />
|
||||
<mission name="Paw and Fur: High Class Dwarfs" storageid="17715" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Medium Undeads" storageid="17716" startvalue="0" endvalue="200" description="You already hunted |STATE|/200 undeads." />
|
||||
<mission name="Paw and Fur: Medium Undeads" storageid="17716" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
|
||||
<!--Grizzly Adams: level 80 to 129 -->
|
||||
<mission name="Paw and Fur: Quara" storageid="17621" startvalue="0" endvalue="600" description="You already hunted |STATE|/600 quara." />
|
||||
<mission name="Paw and Fur: Quara" storageid="17621" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Giant Spiders" storageid="17622" startvalue="0" endvalue="500" description="You already hunted |STATE|/500 giant spiders." />
|
||||
<mission name="Paw and Fur: Giant Spiders" storageid="17622" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Banshees" storageid="17623" startvalue="0" endvalue="300" description="You already hunted |STATE|/300 banshees." />
|
||||
<mission name="Paw and Fur: Banshees" storageid="17623" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Lichs" storageid="17624" startvalue="0" endvalue="500" description="You already hunted |STATE|/500 lichs." />
|
||||
<mission name="Paw and Fur: Lichs" storageid="17624" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Cults" storageid="17625" startvalue="0" endvalue="500" description="You already hunted |STATE|/500 cults." />
|
||||
<mission name="Paw and Fur: Cults" storageid="17625" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: High Class Orcs" storageid="17717" startvalue="0" endvalue="125" description="You already hunted |STATE|/125 orcs." />
|
||||
<mission name="Paw and Fur: High Class Orcs" storageid="17717" startvalue="99999" endvalue="99999" description="You have finished the task." />
|
||||
<mission name="Paw and Fur: Heros" storageid="17718" startvalue="0" endvalue="150" description="You already hunted |STATE|/150 heros." />
|
||||
|
@ -1,10 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<stages>
|
||||
<config enabled="1"/>
|
||||
<stage minlevel="1" maxlevel="20" multiplier="15" />
|
||||
<stage minlevel="21" maxlevel="40" multiplier="12" />
|
||||
<stage minlevel="41" maxlevel="60" multiplier="10" />
|
||||
<stage minlevel="61" maxlevel="80" multiplier="6" />
|
||||
<stage minlevel="81" maxlevel="100" multiplier="3" />
|
||||
<stage minlevel="101" multiplier="2" />
|
||||
<stage minlevel="1" maxlevel="10" multiplier="10" />
|
||||
<stage minlevel="11" maxlevel="20" multiplier="9" />
|
||||
<stage minlevel="21" maxlevel="30" multiplier="8" />
|
||||
<stage minlevel="31" maxlevel="40" multiplier="7" />
|
||||
<stage minlevel="41" maxlevel="50" multiplier="6" />
|
||||
<stage minlevel="51" maxlevel="60" multiplier="5" />
|
||||
<stage minlevel="61" maxlevel="70" multiplier="4" />
|
||||
<stage minlevel="71" maxlevel="80" multiplier="3" />
|
||||
<stage minlevel="81" multiplier="2" />
|
||||
</stages>
|
@ -239,6 +239,8 @@
|
||||
<action itemid="3031" script="misc/changegold.lua" />
|
||||
<action itemid="3035" script="misc/changegold.lua" />
|
||||
<action itemid="3043" script="misc/changegold.lua" />
|
||||
<action fromaid="17724" toaid="17728" script="misc/skill_trainer.lua" />
|
||||
<action fromid="6506" toid="6508" script="misc/christmas_bundle.lua" />
|
||||
|
||||
<!-- Chests -->
|
||||
<action itemid="2479" script="misc/chests.lua" />
|
||||
|
50
data/actions/scripts/misc/christmas_bundle.lua
Normal file
50
data/actions/scripts/misc/christmas_bundle.lua
Normal file
@ -0,0 +1,50 @@
|
||||
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
|
||||
|
||||
local bundleTypes = {
|
||||
[6506] = { -- red christmas bundle
|
||||
6503
|
||||
},
|
||||
[6507] = { -- blue christmas bundle
|
||||
6504
|
||||
},
|
||||
[6508] = { -- green christmas bundle
|
||||
6502
|
||||
}
|
||||
}
|
||||
|
||||
local common = {
|
||||
{6569, 15}, {3598, 20}, {3599, 10}, {3586, 10}, {3585, 5}, 6500, 6501, 6489, 6387
|
||||
}
|
||||
|
||||
local targetItem = bundleTypes[item.itemid]
|
||||
if not targetItem then
|
||||
return true
|
||||
end
|
||||
|
||||
targetItem = common
|
||||
|
||||
-- In case there's going to be more than one unique item per bundle
|
||||
for i = 1, #bundleTypes[item.itemid] do
|
||||
table.insert(targetItem, bundleTypes[item.itemid][i])
|
||||
end
|
||||
|
||||
local rewards = {}
|
||||
repeat
|
||||
local count = 1
|
||||
local rand = math.random(#targetItem)
|
||||
local gift = targetItem[rand]
|
||||
if type(gift) == "table" then
|
||||
count = gift[2]
|
||||
gift = gift[1]
|
||||
end
|
||||
rewards[#rewards + 1] = {gift, count}
|
||||
table.remove(targetItem, rand)
|
||||
until #rewards == 7
|
||||
|
||||
for i = 1, #rewards do
|
||||
player:addItem(rewards[i][1], rewards[i][2])
|
||||
end
|
||||
item:remove(1)
|
||||
fromPosition:sendMagicEffect(CONST_ME_GIFT_WRAPS)
|
||||
return true
|
||||
end
|
30
data/actions/scripts/misc/skill_trainer.lua
Normal file
30
data/actions/scripts/misc/skill_trainer.lua
Normal file
@ -0,0 +1,30 @@
|
||||
local statues = {
|
||||
[17725] = SKILL_SWORD,
|
||||
[17724] = SKILL_AXE,
|
||||
[17726] = SKILL_CLUB,
|
||||
[17727] = SKILL_DISTANCE,
|
||||
[17728] = SKILL_MAGLEVEL
|
||||
}
|
||||
|
||||
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
|
||||
local skill = statues[item:getActionId()]
|
||||
if not player:isPremium() then
|
||||
player:sendCancelMessage(RETURNVALUE_YOUNEEDPREMIUMACCOUNT)
|
||||
return true
|
||||
end
|
||||
|
||||
if player:isPzLocked() then
|
||||
return false
|
||||
end
|
||||
|
||||
local entreePrice = 1000
|
||||
if player:getBankBalance() < entreePrice then
|
||||
player:sendCancelMessage("You do not have 1000 gold coins in your bank account balance to participate in offline training.")
|
||||
return true
|
||||
end
|
||||
|
||||
player:setOfflineTrainingSkill(skill)
|
||||
player:setBankBalance(player:getBankBalance() - entreePrice)
|
||||
player:remove()
|
||||
return true
|
||||
end
|
@ -6,7 +6,8 @@
|
||||
<event type="login" name="FirstItems" script="firstitems.lua"/>
|
||||
<event type="login" name="RegenerateStamina" script="regeneratestamina.lua" />
|
||||
<event type="death" name="PlayerDeath" script="playerdeath.lua"/>
|
||||
<event type="login" name="OfflineTraining" script="offlinetraining.lua" />
|
||||
|
||||
<!-- Killing In The Name Of Quest -->
|
||||
<event type="kill" name="KillingInTheNameOfKills" script="killing_in_the_name_of.lua" />
|
||||
<event type="death" name="KillingInTheNameOf" script="killing_in_the_name_of.lua" />
|
||||
</creaturescripts>
|
||||
|
@ -40,11 +40,35 @@ local tasks = {
|
||||
['rat'] = {taskerStorage = 17608, progressStorage = 17699, killsRequired = 25},
|
||||
['cave rat'] = {taskerStorage = 17608, progressStorage = 17699, killsRequired = 25},
|
||||
['wolf'] = {taskerStorage = 17608, progressStorage = 17700, killsRequired = 100},
|
||||
['winter wolf'] = {taskerStorage = 17608, progressStorage = 17700, killsRequired = 100},
|
||||
['wasp'] = {taskerStorage = 17608, progressStorage = 17701, killsRequired = 100},
|
||||
['larva'] = {taskerStorage = 17608, progressStorage = 17702, killsRequired = 100},
|
||||
['dwarf'] = {taskerStorage = 17608, progressStorage = 17703, killsRequired = 100},
|
||||
['skeleton'] = {taskerStorage = 17608, progressStorage = 17704, killsRequired = 100},
|
||||
['ghoul'] = {taskerStorage = 17608, progressStorage = 17704, killsRequired = 100},
|
||||
['elf'] = {taskerStorage = 17608, progressStorage = 17729, killsRequired = 200},
|
||||
['elf scout'] = {taskerStorage = 17608, progressStorage = 17729, killsRequired = 200},
|
||||
['elf arcanist'] = {taskerStorage = 17608, progressStorage = 17729, killsRequired = 200},
|
||||
['bug'] = {taskerStorage = 17608, progressStorage = 17730, killsRequired = 40},
|
||||
['smuggler'] = {taskerStorage = 17608, progressStorage = 17731, killsRequired = 250},
|
||||
['wild warrior'] = {taskerStorage = 17608, progressStorage = 17731, killsRequired = 250},
|
||||
['bandit'] = {taskerStorage = 17608, progressStorage = 17731, killsRequired = 250},
|
||||
['hyaena'] = {taskerStorage = 17608, progressStorage = 17732, killsRequired = 30},
|
||||
['lion'] = {taskerStorage = 17608, progressStorage = 17733, killsRequired = 20},
|
||||
['bear'] = {taskerStorage = 17608, progressStorage = 17734, killsRequired = 35},
|
||||
['slime'] = {taskerStorage = 17608, progressStorage = 17735, killsRequired = 100},
|
||||
['beholder'] = {taskerStorage = 17608, progressStorage = 17736, killsRequired = 250},
|
||||
['elder beholder'] = {taskerStorage = 17608, progressStorage = 17736, killsRequired = 250},
|
||||
['green djinn'] = {taskerStorage = 17608, progressStorage = 17737, killsRequired = 500},
|
||||
['blue djinn'] = {taskerStorage = 17608, progressStorage = 17737, killsRequired = 500},
|
||||
['marid'] = {taskerStorage = 17608, progressStorage = 17737, killsRequired = 500},
|
||||
['efreet'] = {taskerStorage = 17608, progressStorage = 17737, killsRequired = 500},
|
||||
['pirate skeleton'] = {taskerStorage = 17608, progressStorage = 17738, killsRequired = 600},
|
||||
['pirate marauder'] = {taskerStorage = 17608, progressStorage = 17738, killsRequired = 600},
|
||||
['pirate cutthroat'] = {taskerStorage = 17608, progressStorage = 17738, killsRequired = 600},
|
||||
['pirate ghost'] = {taskerStorage = 17608, progressStorage = 17738, killsRequired = 600},
|
||||
['pirate buccaneer'] = {taskerStorage = 17608, progressStorage = 17738, killsRequired = 600},
|
||||
['pirate corsair'] = {taskerStorage = 17608, progressStorage = 17738, killsRequired = 600},
|
||||
['orc spearman'] = {taskerStorage = 17608, progressStorage = 17712, killsRequired = 300},
|
||||
['orc shaman'] = {taskerStorage = 17608, progressStorage = 17712, killsRequired = 300},
|
||||
['orc rider'] = {taskerStorage = 17608, progressStorage = 17712, killsRequired = 300},
|
||||
@ -84,56 +108,37 @@ local tasks = {
|
||||
['orc'] = {taskerStorage = 17652, progressStorage = 17651, killsRequired = 50},
|
||||
}
|
||||
|
||||
local function randomSort(arr)
|
||||
local sorted = {}
|
||||
local rand2
|
||||
local rand
|
||||
local mem
|
||||
for i=1,#arr do
|
||||
sorted[i] = arr[i]
|
||||
end
|
||||
if (#arr <= 1) then
|
||||
return sorted;
|
||||
end
|
||||
for i=1,(#arr)^2 do
|
||||
repeat
|
||||
rand = math.random(1,#sorted)
|
||||
rand2 = math.random(1,#sorted)
|
||||
until rand ~= rand2
|
||||
mem = sorted[rand]
|
||||
sorted[rand] = pgtss[rand2]
|
||||
sorted[rand2] = mem
|
||||
end
|
||||
return sorted
|
||||
end
|
||||
|
||||
local maxPlayersInPartyShare = 2
|
||||
-- not tested probably nothing is working
|
||||
function onKill(player, target)
|
||||
if target:isPlayer() or target:getMaster() then
|
||||
|
||||
function onDeath(creature, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)
|
||||
if not creature:isMonster() or creature:getMaster() then
|
||||
return true
|
||||
end
|
||||
|
||||
local targetName = target:getName():lower()
|
||||
local player = mostdamagekiller
|
||||
if not mostdamagekiller:isPlayer() then
|
||||
local master = mostdamagekiller:getMaster()
|
||||
if master and master:isPlayer() then
|
||||
player = master
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local targetName = creature:getName():lower()
|
||||
local task = tasks[targetName]
|
||||
if task ~= nil then
|
||||
|
||||
local players
|
||||
local party = player:getParty()
|
||||
if party ~= nil and party:isSharedExperienceEnabled() then
|
||||
if party ~= nil and party:isSharedExperienceActive() then
|
||||
players = party:getMembers() -- all members of the party
|
||||
players[#players + 1] = party:getLeader() -- don't forget the leader
|
||||
|
||||
if #players > maxPlayersInPartyShare then -- if more than 4 players are in party than shuffle the table and give task bonus only for the first 4 players
|
||||
players = randomSort(players)
|
||||
end
|
||||
else
|
||||
players = { player } -- no party? then just the player
|
||||
end
|
||||
|
||||
for i, member in ipairs(players) do
|
||||
print(i)
|
||||
if i < maxPlayersInPartyShare then
|
||||
if i <= maxPlayersInPartyShare then
|
||||
local inProgressQuest = member:getStorageValue(task.taskerStorage)
|
||||
if inProgressQuest == task.progressStorage then
|
||||
local playerQuestKills = member:getStorageValue(task.progressStorage)
|
||||
|
@ -58,7 +58,6 @@ function onLogin(player)
|
||||
player:registerEvent("PlayerLogout")
|
||||
player:registerEvent("FirstItems")
|
||||
player:registerEvent("RegenerateStamina")
|
||||
player:registerEvent("KillingInTheNameOfKills")
|
||||
|
||||
return true
|
||||
end
|
||||
|
76
data/creaturescripts/scripts/offlinetraining.lua
Normal file
76
data/creaturescripts/scripts/offlinetraining.lua
Normal file
@ -0,0 +1,76 @@
|
||||
function onLogin(player)
|
||||
local lastLogout = player:getLastLogout()
|
||||
local offlineTime = lastLogout ~= 0 and math.min(os.time() - lastLogout, 86400 * 21) or 0
|
||||
local offlineTrainingSkill = player:getOfflineTrainingSkill()
|
||||
if offlineTrainingSkill == -1 then
|
||||
player:addOfflineTrainingTime(offlineTime * 1000)
|
||||
return true
|
||||
end
|
||||
|
||||
player:setOfflineTrainingSkill(-1)
|
||||
|
||||
if offlineTime < 600 then
|
||||
player:setBankBalance(player:getBankBalance() + 1000)
|
||||
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You must be logged out for more than 10 minutes to start offline training. Your 1000 gold coins entree fee were returned to your bank account.")
|
||||
return true
|
||||
end
|
||||
|
||||
local trainingTime = math.max(0, math.min(offlineTime, math.min(43200 / 2, player:getOfflineTrainingTime() / 1000)))
|
||||
player:removeOfflineTrainingTime(trainingTime * 1000)
|
||||
|
||||
local remainder = offlineTime - trainingTime
|
||||
if remainder > 0 then
|
||||
player:addOfflineTrainingTime(remainder * 1000)
|
||||
end
|
||||
|
||||
if trainingTime < 60 then
|
||||
return true
|
||||
end
|
||||
|
||||
local text = "During your absence you trained for"
|
||||
local hours = math.floor(trainingTime / 3600)
|
||||
if hours > 1 then
|
||||
text = string.format("%s %d hours", text, hours)
|
||||
elseif hours == 1 then
|
||||
text = string.format("%s 1 hour", text)
|
||||
end
|
||||
|
||||
local minutes = math.floor((trainingTime % 3600) / 60)
|
||||
if minutes ~= 0 then
|
||||
if hours ~= 0 then
|
||||
text = string.format("%s and", text)
|
||||
end
|
||||
|
||||
if minutes > 1 then
|
||||
text = string.format("%s %d minutes", text, minutes)
|
||||
else
|
||||
text = string.format("%s 1 minute", text)
|
||||
end
|
||||
end
|
||||
|
||||
text = string.format("%s.", text)
|
||||
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, text)
|
||||
|
||||
local vocation = player:getVocation()
|
||||
local promotion = vocation:getPromotion()
|
||||
local topVocation = not promotion and vocation or promotion
|
||||
|
||||
local updateSkills = false
|
||||
if table.contains({SKILL_CLUB, SKILL_SWORD, SKILL_AXE, SKILL_DISTANCE}, offlineTrainingSkill) then
|
||||
local modifier = topVocation:getAttackSpeed() / 1000
|
||||
updateSkills = player:addOfflineTrainingTries(offlineTrainingSkill, (trainingTime / modifier) / (offlineTrainingSkill == SKILL_DISTANCE and 8 or 4))
|
||||
elseif offlineTrainingSkill == SKILL_MAGLEVEL then
|
||||
local gainTicks = topVocation:getManaGainTicks() * 4
|
||||
if gainTicks == 0 then
|
||||
gainTicks = 1
|
||||
end
|
||||
|
||||
updateSkills = player:addOfflineTrainingTries(SKILL_MAGLEVEL, trainingTime * (vocation:getManaGainAmount() / gainTicks))
|
||||
end
|
||||
|
||||
if updateSkills then
|
||||
player:addOfflineTrainingTries(SKILL_SHIELD, trainingTime / 8)
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
@ -20,16 +20,16 @@ function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDama
|
||||
return
|
||||
end
|
||||
|
||||
local byPlayer = 0
|
||||
local byPlayer = false
|
||||
local killerName
|
||||
if killer ~= nil then
|
||||
if killer:isPlayer() then
|
||||
byPlayer = 1
|
||||
byPlayer = true
|
||||
else
|
||||
local master = killer:getMaster()
|
||||
if master and master ~= killer and master:isPlayer() then
|
||||
killer = master
|
||||
byPlayer = 1
|
||||
byPlayer = true
|
||||
end
|
||||
end
|
||||
killerName = killer:getName()
|
||||
@ -55,7 +55,7 @@ function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDama
|
||||
end
|
||||
|
||||
local playerGuid = player:getGuid()
|
||||
db.query("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `is_player`, `mostdamage_by`, `mostdamage_is_player`, `unjustified`, `mostdamage_unjustified`) VALUES (" .. playerGuid .. ", " .. os.time() .. ", " .. player:getLevel() .. ", " .. db.escapeString(killerName) .. ", " .. byPlayer .. ", " .. db.escapeString(mostDamageName) .. ", " .. byPlayerMostDamage .. ", " .. (unjustified and 1 or 0) .. ", " .. (mostDamageUnjustified and 1 or 0) .. ")")
|
||||
db.query("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `is_player`, `mostdamage_by`, `mostdamage_is_player`, `unjustified`, `mostdamage_unjustified`) VALUES (" .. playerGuid .. ", " .. os.time() .. ", " .. player:getLevel() .. ", " .. db.escapeString(killerName) .. ", " .. (byPlayer and 1 or 0) .. ", " .. db.escapeString(mostDamageName) .. ", " .. byPlayerMostDamage .. ", " .. (unjustified and 1 or 0) .. ", " .. (mostDamageUnjustified and 1 or 0) .. ")")
|
||||
local resultId = db.storeQuery("SELECT `player_id` FROM `player_deaths` WHERE `player_id` = " .. playerGuid)
|
||||
|
||||
local deathRecords = 0
|
||||
@ -74,24 +74,13 @@ function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDama
|
||||
db.asyncQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. playerGuid .. " ORDER BY `time` LIMIT " .. limit)
|
||||
end
|
||||
|
||||
if byPlayer == 1 then
|
||||
local targetGuild = player:getGuild()
|
||||
targetGuild = targetGuild and targetGuild:getId() or 0
|
||||
if targetGuild ~= 0 then
|
||||
local killerGuild = killer:getGuild()
|
||||
killerGuild = killerGuild and killerGuild:getId() or 0
|
||||
if killerGuild ~= 0 and targetGuild ~= killerGuild and isInWar(playerId, killer:getId()) then
|
||||
local warId = false
|
||||
resultId = db.storeQuery("SELECT `id` FROM `guild_wars` WHERE `status` = 1 AND ((`guild1` = " .. killerGuild .. " AND `guild2` = " .. targetGuild .. ") OR (`guild1` = " .. targetGuild .. " AND `guild2` = " .. killerGuild .. "))")
|
||||
if resultId ~= false then
|
||||
warId = result.getDataInt(resultId, "id")
|
||||
result.free(resultId)
|
||||
if not byPlayer then
|
||||
return
|
||||
end
|
||||
|
||||
if warId ~= false then
|
||||
db.asyncQuery("INSERT INTO `guildwar_kills` (`killer`, `target`, `killerguild`, `targetguild`, `time`, `warid`) VALUES (" .. db.escapeString(killerName) .. ", " .. db.escapeString(player:getName()) .. ", " .. killerGuild .. ", " .. targetGuild .. ", " .. os.time() .. ", " .. warId .. ")")
|
||||
end
|
||||
end
|
||||
end
|
||||
local warId = guildwars:isInWar(killer, player)
|
||||
if warId ~= 0 then
|
||||
guildwars:processKill(warId, killer, player)
|
||||
end
|
||||
|
||||
end
|
@ -1,5 +1,38 @@
|
||||
local trainingStatues = {17724, 17725, 17726, 17727, 17728}
|
||||
|
||||
function Player:onLook(thing, position, distance)
|
||||
local description = "You see " .. thing:getDescription(distance)
|
||||
|
||||
if thing:isItem() and thing:getId() == 2028 then
|
||||
if isInArray(trainingStatues, thing:getActionId()) then
|
||||
local trainingTime = math.min(43200 / 2, self:getOfflineTrainingTime() / 1000)
|
||||
local text = "You have"
|
||||
local hours = math.floor(trainingTime / 3600)
|
||||
if hours > 1 then
|
||||
text = string.format("%s %d hours", text, hours)
|
||||
elseif hours == 1 then
|
||||
text = string.format("%s 1 hour", text)
|
||||
end
|
||||
|
||||
local minutes = math.floor((trainingTime % 3600) / 60)
|
||||
if minutes ~= 0 then
|
||||
if hours ~= 0 then
|
||||
text = string.format("%s and", text)
|
||||
end
|
||||
|
||||
if minutes > 1 then
|
||||
text = string.format("%s %d minutes", text, minutes)
|
||||
else
|
||||
text = string.format("%s 1 minute", text)
|
||||
end
|
||||
end
|
||||
|
||||
text = string.format(" %s offline training time remaining.", text)
|
||||
|
||||
description = string.format(description .. "%s", text)
|
||||
end
|
||||
end
|
||||
|
||||
if self:getGroup():getAccess() then
|
||||
if thing:isItem() then
|
||||
description = string.format("%s\nItem ID: %d", description, thing:getId())
|
||||
|
@ -49,3 +49,34 @@ end
|
||||
if not nextUseStaminaTime then
|
||||
nextUseStaminaTime = {}
|
||||
end
|
||||
|
||||
function isInArray(array, value, isCaseSensitive)
|
||||
local compareLowerCase = false
|
||||
if value ~= nil and type(value) == "string" and not isCaseSensitive then
|
||||
value = string.lower(value)
|
||||
compareLowerCase = true
|
||||
end
|
||||
if array == nil or value == nil then
|
||||
return (array == value), nil
|
||||
end
|
||||
local t = type(array)
|
||||
if t ~= "table" then
|
||||
if compareLowerCase and t == "string" then
|
||||
return (string.lower(array) == string.lower(value)), nil
|
||||
else
|
||||
return (array == value), nil
|
||||
end
|
||||
end
|
||||
for k,v in pairs(array) do
|
||||
local newV
|
||||
if compareLowerCase and type(v) == "string" then
|
||||
newV = string.lower(v)
|
||||
else
|
||||
newV = v
|
||||
end
|
||||
if newV == value then
|
||||
return true, k
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
@ -11218,17 +11218,17 @@ Attributes = {ChangeTarget=2541,Brightness=0,LightColor=215}
|
||||
TypeID = 2543
|
||||
Name = "a box"
|
||||
Flags = {Chest,Unpass,Unmove,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=2469}
|
||||
Attributes = {DisguiseTarget=2469}
|
||||
|
||||
TypeID = 2544
|
||||
Name = "a wooden coffin"
|
||||
Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=2476}
|
||||
Attributes = {DisguiseTarget=2476}
|
||||
|
||||
TypeID = 2545
|
||||
Name = "a wooden coffin"
|
||||
Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=2474}
|
||||
Attributes = {DisguiseTarget=2474}
|
||||
|
||||
TypeID = 2546
|
||||
Name = "a chest"
|
||||
@ -11268,12 +11268,12 @@ Attributes = {DisguiseTarget=3634}
|
||||
TypeID = 2553
|
||||
Name = "drawers"
|
||||
Flags = {Chest,Unpass,Unmove,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=2433}
|
||||
Attributes = {DisguiseTarget=2433}
|
||||
|
||||
TypeID = 2554
|
||||
Name = "drawers"
|
||||
Flags = {Chest,Unpass,Unmove,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=2434}
|
||||
Attributes = {DisguiseTarget=2434}
|
||||
|
||||
TypeID = 2555
|
||||
Name = "a small hole"
|
||||
@ -11293,27 +11293,27 @@ Attributes = {DisguiseTarget=4285}
|
||||
TypeID = 2558
|
||||
Name = "a bookcase"
|
||||
Flags = {Chest,Unpass,Unmove,Unlay,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=2435}
|
||||
Attributes = {DisguiseTarget=2435}
|
||||
|
||||
TypeID = 2559
|
||||
Name = "a bookcase"
|
||||
Flags = {Chest,Unpass,Unmove,Unlay,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=2438}
|
||||
Attributes = {DisguiseTarget=2438}
|
||||
|
||||
TypeID = 2560
|
||||
Name = "a stone coffin"
|
||||
Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=1983}
|
||||
Attributes = {DisguiseTarget=1983}
|
||||
|
||||
TypeID = 2561
|
||||
Name = "a barrel"
|
||||
Flags = {Chest,Unpass,Unmove,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=2523}
|
||||
Attributes = {DisguiseTarget=2523}
|
||||
|
||||
TypeID = 2562
|
||||
Name = "a hollow stone"
|
||||
Flags = {Bottom,Chest,Unpass,Unmove,Unlay,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=1777}
|
||||
Attributes = {DisguiseTarget=1777}
|
||||
|
||||
TypeID = 2563
|
||||
Name = "a pile of bones"
|
||||
@ -11323,12 +11323,12 @@ Attributes = {DisguiseTarget=4305}
|
||||
TypeID = 2564
|
||||
Name = "a sarcophagus"
|
||||
Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=1994}
|
||||
Attributes = {DisguiseTarget=1994}
|
||||
|
||||
TypeID = 2565
|
||||
Name = "a sarcophagus"
|
||||
Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise}
|
||||
Attributes = {,DisguiseTarget=1992}
|
||||
Attributes = {DisguiseTarget=1992}
|
||||
|
||||
TypeID = 2566
|
||||
Name = "a lever"
|
||||
|
@ -372,6 +372,7 @@ function setPlayerGroupId(cid, groupId) local p = Player(cid) return p ~= nil an
|
||||
function doPlayerSetSex(cid, sex) local p = Player(cid) return p ~= nil and p:setSex(sex) or false end
|
||||
function doPlayerSetGuildLevel(cid, level) local p = Player(cid) return p ~= nil and p:setGuildLevel(level) or false end
|
||||
function doPlayerSetGuildNick(cid, nick) local p = Player(cid) return p ~= nil and p:setGuildNick(nick) or false end
|
||||
function doPlayerSetOfflineTrainingSkill(cid, skillId) local p = Player(cid) return p and p:setOfflineTrainingSkill(skillId) or false end
|
||||
function doShowTextDialog(cid, itemId, text) local p = Player(cid) return p ~= nil and p:showTextDialog(itemId, text) or false end
|
||||
function doPlayerAddItemEx(cid, uid, ...) local p = Player(cid) return p ~= nil and p:addItemEx(Item(uid), ...) or false end
|
||||
function doPlayerRemoveItem(cid, itemid, count, ...) local p = Player(cid) return p ~= nil and p:removeItem(itemid, count, ...) or false end
|
||||
|
@ -10,3 +10,4 @@ dofile('data/lib/core/position.lua')
|
||||
dofile('data/lib/core/teleport.lua')
|
||||
dofile('data/lib/core/tile.lua')
|
||||
dofile('data/lib/core/vocation.lua')
|
||||
dofile('data/lib/core/guildwars.lua')
|
199
data/lib/core/guildwars.lua
Normal file
199
data/lib/core/guildwars.lua
Normal file
@ -0,0 +1,199 @@
|
||||
guildwars = {}
|
||||
|
||||
guildwars.__index = guildwars
|
||||
|
||||
function guildwars:isInWar(player1, player2)
|
||||
if not player1:getGuild() or not player2:getGuild() then
|
||||
return 0
|
||||
end
|
||||
|
||||
if player1:getGuild():getId() == 0 or player2:getGuild():getId() == 0 then
|
||||
return 0
|
||||
end
|
||||
|
||||
if player1:getGuild():getId() == player2:getGuild():getId() then
|
||||
return 0
|
||||
end
|
||||
|
||||
return isInWar(player1:getId(), player2:getId())
|
||||
end
|
||||
|
||||
function guildwars:processKill(warId, killer, player)
|
||||
local fragLimit = self:getFragLimit(warId)
|
||||
|
||||
local killerFrags = self:getKills(warId, killer:getGuild():getId()) + 1
|
||||
local deadFrags = self:getKills(warId, player:getGuild():getId())
|
||||
|
||||
local killerMsg = "Opponent " .. player:getName() .. " of the " .. player:getGuild():getName() .. " was killed by " .. killer:getName() .. ". The new score is " .. killerFrags .. ":" .. deadFrags .. " frags (limit " .. fragLimit .. ")."
|
||||
sendGuildChannelMessage(killer:getGuild():getId(), TALKTYPE_CHANNEL_O, killerMsg)
|
||||
|
||||
local deadMsg = "Guild member " .. player:getName() .. " was killed by " .. killer:getName() .. " of the " .. killer:getGuild():getName() .. ". The new score is " .. deadFrags .. ":" .. killerFrags .. " frags (limit " .. fragLimit .. ")."
|
||||
sendGuildChannelMessage(player:getGuild():getId(), TALKTYPE_CHANNEL_O, deadMsg)
|
||||
|
||||
self:insertKill(warId, killer, player)
|
||||
|
||||
if killerFrags >= fragLimit then
|
||||
self:endWar(warId, killer, player, killerFrags)
|
||||
end
|
||||
end
|
||||
|
||||
function guildwars:getFragLimit(warId)
|
||||
local resultId = db.storeQuery("SELECT `frag_limit` FROM `guild_wars` WHERE `id` = " .. warId)
|
||||
if resultId ~= false then
|
||||
local frag_limit = result.getDataInt(resultId, "frag_limit")
|
||||
result.free(resultId)
|
||||
return frag_limit
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function guildwars:getBounty(warId)
|
||||
local resultId = db.storeQuery("SELECT `bounty` FROM `guild_wars` WHERE `id` = " .. warId)
|
||||
if resultId ~= false then
|
||||
local bounty = result.getDataInt(resultId, "bounty")
|
||||
result.free(resultId)
|
||||
return bounty
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function guildwars:getKills(warId, guildId)
|
||||
local resultId = db.storeQuery("SELECT COUNT(*) as frags FROM `guildwar_kills` WHERE `warid` = " .. warId .. " and `killerguild` = " .. guildId)
|
||||
if resultId ~= false then
|
||||
local frags = result.getDataInt(resultId, "frags")
|
||||
result.free(resultId)
|
||||
return frags
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
function guildwars:insertKill(warId, killer, target)
|
||||
db.asyncQuery("INSERT INTO `guildwar_kills` (`killer`, `target`, `killerguild`, `targetguild`, `warid`, `time`) VALUES (" .. db.escapeString(killer:getName()) .. ", " .. db.escapeString(target:getName()) .. ", " .. killer:getGuild():getId() .. ", " .. target:getGuild():getId() .. ", " .. warId .. ", " .. os.time() .. ")")
|
||||
end
|
||||
|
||||
function guildwars:endWar(warId, killer, player, frags)
|
||||
local winGuildInternalMessage = "Congratulations! You have won the war against " .. player:getGuild():getName() .. " with " .. frags .. " frags."
|
||||
sendGuildChannelMessage(killer:getGuild():getId(), TALKTYPE_CHANNEL_O, winGuildInternalMessage)
|
||||
|
||||
local loseGuildInternalMessage = "You have lost the war against " .. killer:getGuild():getName() .. ". They have reached the limit of " .. frags .. " frags."
|
||||
sendGuildChannelMessage(player:getGuild():getId(), TALKTYPE_CHANNEL_O, loseGuildInternalMessage)
|
||||
|
||||
broadcastMessage(killer:getGuild():getName() .. " have won the war against " .. player:getGuild():getName() .. " with " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE)
|
||||
|
||||
self:updateState(warId, 5)
|
||||
|
||||
self:setWarEmblem(killer:getGuild(), player:getGuild())
|
||||
|
||||
local bounty = self:getBounty(warId)
|
||||
if bounty > 0 then
|
||||
killer:getGuild():increaseBankBalance(bounty * 2)
|
||||
end
|
||||
end
|
||||
|
||||
function guildwars:setWarEmblem(guild1, guild2)
|
||||
guild1:setGuildWarEmblem(guild2)
|
||||
end
|
||||
|
||||
function guildwars:updateState(warId, status)
|
||||
db.query("UPDATE `guild_wars` SET `status` = " .. status .. " WHERE `id` = " .. warId)
|
||||
end
|
||||
|
||||
function guildwars:getPendingInvitation(guild1, guild2)
|
||||
local resultId = db.storeQuery("SELECT `id`, `bounty` FROM `guild_wars` WHERE `guild1` = " .. guild1 .. " AND `guild2` = " .. guild2 .. " AND `status` = 0")
|
||||
|
||||
if resultId then
|
||||
local id = result.getDataInt(resultId, "id")
|
||||
local bounty = result.getDataInt(resultId, "bounty")
|
||||
result.free(resultId)
|
||||
|
||||
return id, bounty
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
function guildwars:startWar(player, warId, guild1, guild2, bounty)
|
||||
if bounty > 0 then
|
||||
local guildBalance = guild1:getBankBalance()
|
||||
if guildBalance < bounty then
|
||||
player:sendCancelMessage("Your guild does not have that much money in the bank account balance to accept this war with the bounty of " .. bounty .. " gold.")
|
||||
return true
|
||||
end
|
||||
|
||||
if not guild1:decreaseBankBalance(bounty) then
|
||||
player:sendCancelMessage("Your guild does not have that much money in the bank account balance to accept this war with the bounty of " .. bounty .. " gold.")
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
self:updateState(warId, 1)
|
||||
|
||||
self:setWarEmblem(guild1, guild2)
|
||||
|
||||
broadcastMessage(guild1:getName() .. " has accepted " .. guild2:getName() .. " invitation to war.", MESSAGE_EVENT_ADVANCE)
|
||||
end
|
||||
|
||||
function guildwars:rejectWar(warId, guild1, guild2, bounty)
|
||||
self:updateState(warId, 2)
|
||||
broadcastMessage(guild1:getName() .. " has rejected " .. guild2:getName() .. " invitation to war.", MESSAGE_EVENT_ADVANCE)
|
||||
|
||||
if bounty > 0 then
|
||||
guild2:increaseBankBalance(bounty)
|
||||
end
|
||||
end
|
||||
|
||||
function guildwars:cancelWar(warId, guild1, guild2, bounty)
|
||||
self:updateState(warId, 3)
|
||||
broadcastMessage(guild1:getName() .. " has canceled invitation to a war with " .. guild2:getName() .. ".", MESSAGE_EVENT_ADVANCE)
|
||||
|
||||
if bounty > 0 then
|
||||
guild1:increaseBankBalance(bounty)
|
||||
end
|
||||
end
|
||||
|
||||
function guildwars:invite(player, guild1, guild2, frags, bounty)
|
||||
local str = ""
|
||||
local tmpQuery = db.storeQuery("SELECT `guild1`, `status` FROM `guild_wars` WHERE `guild1` IN (" .. guild1:getId() .. "," .. guild2:getId() .. ") AND `guild2` IN (" .. guild2:getId() .. "," .. guild1:getId() .. ") AND `status` IN (0, 1)")
|
||||
if tmpQuery then
|
||||
if result.getDataInt(tmpQuery, "status") == 0 then
|
||||
if result.getDataInt(tmpQuery, "guild1") == guild1:getId() then
|
||||
str = "You have already invited " .. guild2:getName() .. " to war."
|
||||
else
|
||||
str = guild2:getName() .. " have already invited you to war."
|
||||
end
|
||||
else
|
||||
str = "You are already on a war with " .. guild2:getName() .. "."
|
||||
end
|
||||
|
||||
result.free(tmpQuery)
|
||||
end
|
||||
|
||||
if str ~= "" then
|
||||
player:sendCancelMessage(str)
|
||||
return true
|
||||
end
|
||||
|
||||
frags = math.max(10, math.min(500, frags))
|
||||
bounty = math.max(0, math.min(10000000, bounty))
|
||||
|
||||
if bounty > 0 then
|
||||
local guildBalance = guild1:getBankBalance()
|
||||
if guildBalance < bounty then
|
||||
player:sendCancelMessage("Your guild does not have that much money in the bank account balance to set this bounty.")
|
||||
return true
|
||||
end
|
||||
|
||||
if not guild1:decreaseBankBalance(bounty) then
|
||||
player:sendCancelMessage("Your guild does not have that much money in the bank account balance to set this bounty.")
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
db.asyncQuery("INSERT INTO `guild_wars` (`guild1`, `guild2`, `frag_limit`, `bounty`) VALUES (" .. guild1:getId() .. ", " .. guild2:getId() .. ", " .. frags .. ", " .. bounty .. ");")
|
||||
|
||||
local message = guild1:getName() .. " has invited " .. guild2:getName() .. " to war for " .. frags .. " frags."
|
||||
if bounty > 0 then
|
||||
message = message .. " The bounty reward is set to " .. bounty .. " gold."
|
||||
end
|
||||
broadcastMessage(message, MESSAGE_EVENT_ADVANCE)
|
||||
end
|
@ -49,4 +49,7 @@
|
||||
<item id="3032" chance="10" /><!-- small emerald -->
|
||||
<item id="3065" chance="7" /><!-- terra rod -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -50,4 +50,7 @@
|
||||
<item id="3566" chance="6" /><!-- red robe -->
|
||||
<item id="3030" chance="7" /><!-- small ruby -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -1,4 +1,4 @@
|
||||
<monster name="Azure Frog" namedescription="a azure frog" race="blood" experience="20" speed="95" manacost="305">
|
||||
<monster name="Azure Frog" nameDescription="a azure frog" race="blood" experience="20" speed="95" manacost="305">
|
||||
<health now="60" max="60" />
|
||||
<look type="226" head="69" body="66" legs="69" feet="66" corpse="6079" />
|
||||
<targetchange interval="1000" chance="50" />
|
||||
|
@ -30,4 +30,7 @@
|
||||
<item id="3492" countmax="2" chance="22" /><!-- worm -->
|
||||
<item id="3577" chance="100" /><!-- meat -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -1,4 +1,4 @@
|
||||
<monster name="Coral Frog" namedescription="a coral frog" race="blood" experience="20" speed="95" manacost="305">
|
||||
<monster name="Coral Frog" nameDescription="a coral frog" race="blood" experience="20" speed="95" manacost="305">
|
||||
<health now="60" max="60" />
|
||||
<look type="226" head="114" body="98" legs="97" feet="114" corpse="6079" />
|
||||
<targetchange interval="1000" chance="50" />
|
||||
|
@ -60,4 +60,7 @@
|
||||
<item id="3055" chance="6" /><!-- platinum amulet -->
|
||||
<item id="2995" chance="5" /><!-- piggy bank -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -45,4 +45,7 @@
|
||||
<item id="3074" chance="11" /><!-- wand of vortex -->
|
||||
<item id="5810" chance="10" /><!-- pirate voodoo doll -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -46,4 +46,7 @@
|
||||
<item id="5792" chance="5" /><!-- dice -->
|
||||
<item id="5552" chance="5" /><!-- rum flask -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -47,4 +47,7 @@
|
||||
<item id="6096" chance="12" /><!-- pirate hat -->
|
||||
<item id="5813" chance="6" /><!-- skull candle -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -43,4 +43,7 @@
|
||||
<item id="5552" chance="6" /><!-- rum flask -->
|
||||
<item id="5792" chance="5" /><!-- dice -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -48,4 +48,7 @@
|
||||
<item id="3271" chance="7" /><!-- spike sword -->
|
||||
<item id="3566" chance="7" /><!-- red robe -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -45,4 +45,7 @@
|
||||
<item id="5928" chance="6" /><!-- goldfish bowl -->
|
||||
<item id="5792" chance="6" /><!-- dice -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -27,4 +27,7 @@
|
||||
<item id="3337" chance="18" /><!-- bone club -->
|
||||
<item id="3264" chance="12" /><!-- sword -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -36,4 +36,7 @@
|
||||
<item id="5895" chance="10" /><!-- fish fin -->
|
||||
<item id="3033" chance="9" /><!-- small amethyst -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -49,4 +49,7 @@
|
||||
<item id="5895" chance="10" /><!-- fish fin -->
|
||||
<item id="3294" chance="70" /><!-- short sword -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -58,4 +58,7 @@
|
||||
<item id="3098" chance="8" /><!-- ring of healing -->
|
||||
<item id="3370" chance="8" /><!-- knight armor -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -64,4 +64,7 @@
|
||||
<item id="3370" chance="8" /><!-- knight armor -->
|
||||
<item id="5895" chance="15" /><!-- fish fin -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -38,4 +38,7 @@
|
||||
<item id="3265" chance="16" /><!-- two handed sword -->
|
||||
<item id="3029" chance="5" /><!-- small sapphire -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -48,4 +48,7 @@
|
||||
<item id="3373" chance="6" /><!-- strange helmet -->
|
||||
<item id="3567" chance="6" /><!-- blue robe -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -45,4 +45,7 @@
|
||||
<item id="3061" chance="10" /><!-- life crystal -->
|
||||
<item id="5895" chance="10" /><!-- fish fin -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -44,4 +44,7 @@
|
||||
<item id="5895" chance="20" /><!-- fish fin -->
|
||||
<item id="3381" chance="8" /><!-- crown armor -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -36,4 +36,7 @@
|
||||
<item id="3028" chance="9" /><!-- small diamond -->
|
||||
<item id="5895" chance="9" /><!-- fish fin -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -45,4 +45,7 @@
|
||||
<item id="3581" chance="54" /><!-- shrimp -->
|
||||
<item id="5895" chance="24" /><!-- fish fin -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -28,4 +28,7 @@
|
||||
<item id="5678" countmax="3" chance="10" /><!-- tortoise egg -->
|
||||
<item id="3279" chance="10" /><!-- war hammer -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -67,4 +67,7 @@
|
||||
<item id="5668" chance="2" /><!-- mysterious voodoo skull -->
|
||||
<item id="3155" countmax="8" chance="42" /><!-- sudden death rune -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -62,4 +62,7 @@
|
||||
<item id="3340" chance="4" /><!-- heavy mace -->
|
||||
<item id="3342" chance="4" /><!-- war axe -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -62,4 +62,7 @@
|
||||
<item id="5668" chance="1" /><!-- mysterious voodoo skull -->
|
||||
<item id="3342" chance="95" /><!-- war axe -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -47,4 +47,7 @@
|
||||
<item id="3071" chance="8" /><!-- wand of inferno -->
|
||||
<item id="3010" chance="5" /><!-- emerald bangle -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -39,4 +39,7 @@
|
||||
<item id="3426" countmax="1" chance="50" /> <!-- a studded shield -->
|
||||
<item id="2920" countmax="1" chance="50" /> <!-- a torch -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -65,4 +65,7 @@
|
||||
<item id="3033" countmax="4" chance="12" /> <!-- a small amethyst -->
|
||||
<item id="3032" countmax="3" chance="6" /> <!-- a small emerald -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -37,4 +37,7 @@
|
||||
<item id="3577" countmax="1" chance="100" /> <!-- meat -->
|
||||
<item id="3279" countmax="1" chance="1" /> <!-- a war hammer -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -68,4 +68,7 @@
|
||||
<item id="3004" countmax="1" chance="5" /> <!-- a wedding ring -->
|
||||
<item id="3026" countmax="1" chance="10" /> <!-- a white pearl -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -31,4 +31,7 @@
|
||||
<item id="5896" countmax="1" chance="25" /> <!-- bear paw -->
|
||||
<item id="5902" countmax="1" chance="10" /> <!-- honeycomb -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -59,4 +59,7 @@
|
||||
<item id="5893" countmax="1" chance="9" /> <!-- perfect behemoth fang -->
|
||||
<item id="5930" countmax="1" chance="9" /> <!-- behemoth claw -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -67,4 +67,7 @@
|
||||
<item id="3412" countmax="1" chance="30" /> <!-- a wooden shield -->
|
||||
<item id="5898" countmax="1" chance="8" /> <!-- beholder eye -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -61,4 +61,7 @@
|
||||
<item id="3029" countmax="4" chance="25" /> <!-- a small sapphire -->
|
||||
<item id="5912" countmax="1" chance="10" /> <!-- a blue piece of cloth -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -55,4 +55,7 @@
|
||||
<item id="3114" countmax="1" chance="200" /> <!-- a skull -->
|
||||
<item id="5925" countmax="1" chance="10" /> <!-- a hardened bone -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -24,4 +24,7 @@
|
||||
<item id="3590" countmax="3" chance="30" /> <!-- a cherry -->
|
||||
<item id="3031" countmax="6" chance="350" /> <!-- a gold coin -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -48,4 +48,7 @@
|
||||
<item id="3738" countmax="1" chance="5" /> <!-- a sling herb -->
|
||||
<item id="3738" countmax="1" chance="5" /> <!-- a sling herb -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -30,4 +30,7 @@
|
||||
<item id="3031" countmax="2" chance="850" /> <!-- a gold coin -->
|
||||
<item id="3492" countmax="3" chance="500" /> <!-- a worm -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -28,4 +28,7 @@
|
||||
<item id="3559" countmax="1" chance="80" /> <!-- leather legs -->
|
||||
<item id="3577" countmax="4" chance="700" /> <!-- meat -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -40,4 +40,7 @@
|
||||
<item id="3294" countmax="1" chance="80" /> <!-- a short sword -->
|
||||
<item id="3012" countmax="1" chance="2" /> <!-- a wolf tooth chain -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -81,4 +81,7 @@
|
||||
<item id="5954" countmax="1" chance="100" /> <!-- a demon horn -->
|
||||
<item id="5776" countmax="1" chance="1" /> <!-- a Sabrehaven talon -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -39,4 +39,7 @@
|
||||
<item id="3287" countmax="3" chance="100" /> <!-- a throwing star -->
|
||||
<item id="2920" countmax="1" chance="500" /> <!-- a torch -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -63,4 +63,7 @@
|
||||
<item id="5877" countmax="1" chance="10" /> <!-- green dragon leather -->
|
||||
<item id="5920" countmax="1" chance="10" /> <!-- green dragon scale -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -64,4 +64,7 @@
|
||||
<item id="5882" countmax="1" chance="18" /> <!-- red dragon scale -->
|
||||
<item id="5948" countmax="1" chance="10" /> <!-- red dragon leather -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -39,4 +39,7 @@
|
||||
<item id="3723" countmax="1" chance="500" /> <!-- a white mushroom -->
|
||||
<item id="5880" countmax="1" chance="7" /> <!-- iron ore -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -53,4 +53,7 @@
|
||||
<item id="3723" countmax="2" chance="600" /> <!-- a white mushroom -->
|
||||
<item id="5880" countmax="1" chance="1" /> <!-- Iron Ore -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -40,4 +40,7 @@
|
||||
<item id="3723" countmax="2" chance="550" /> <!-- a white mushroom -->
|
||||
<item id="5880" countmax="1" chance="8" /> <!-- iron ore -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -42,4 +42,7 @@
|
||||
<item id="3723" countmax="2" chance="400" /> <!-- a white mushroom -->
|
||||
<item id="5880" countmax="1" chance="6" /> <!-- iron ore -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -77,4 +77,7 @@
|
||||
<item id="3071" countmax="1" chance="5" /> <!-- a wand of inferno -->
|
||||
<item id="5910" countmax="1" chance="25" /> <!-- green piece of cloth -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -73,4 +73,7 @@
|
||||
<item id="3265" countmax="1" chance="60" /> <!-- a two handed sword -->
|
||||
<item id="5898" countmax="1" chance="8" /> <!-- beholder eye -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -43,4 +43,7 @@
|
||||
<item id="3376" countmax="1" chance="150" /> <!-- a studded helmet -->
|
||||
<item id="5921" countmax="1" chance="10" /> <!-- a heaven blossom -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -67,4 +67,7 @@
|
||||
<item id="3037" countmax="1" chance="2" /> <!-- a yellow gem -->
|
||||
<item id="5922" countmax="1" chance="25" /> <!-- a holy orchid -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -46,4 +46,7 @@
|
||||
<item id="2901" countmax="1" chance="140" /> <!-- a waterskin -->
|
||||
<item id="5921" countmax="1" chance="10" /> <!-- a heaven blossom -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -34,4 +34,7 @@
|
||||
<item id="3130" countmax="1" chance="80" /> <!-- twigs -->
|
||||
<item id="3412" countmax="1" chance="150" /> <!-- a wooden shield -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -49,4 +49,7 @@
|
||||
<item id="3336" countmax="1" chance="80" /> <!-- a studded club -->
|
||||
<item id="3012" countmax="1" chance="2" /> <!-- a wolf tooth chain -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -43,4 +43,7 @@
|
||||
<item id="3049" countmax="1" chance="2" /> <!-- a stealth ring -->
|
||||
<item id="5909" countmax="1" chance="8" /> <!-- white piece of cloth -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -42,4 +42,7 @@
|
||||
<item id="3492" countmax="6" chance="800" /> <!-- a worm -->
|
||||
<item id="5913" countmax="1" chance="10" /> <!-- a brown piece of cloth -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -49,4 +49,7 @@
|
||||
<item id="3053" countmax="1" chance="7" /> <!-- a time ring -->
|
||||
<item id="5879" countmax="1" chance="21" /> <!-- spider silk -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -43,4 +43,7 @@
|
||||
<item id="3462" countmax="1" chance="100" /> <!-- a small axe -->
|
||||
<item id="1781" countmax="3" chance="300" /> <!-- a small stone -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -62,4 +62,7 @@
|
||||
<item id="2933" countmax="1" chance="75" /> <!-- a small oil lamp -->
|
||||
<item id="5910" countmax="1" chance="25" /> <!-- green piece of cloth -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -63,4 +63,7 @@
|
||||
<item id="3004" countmax="1" chance="50" /> <!-- a wedding ring -->
|
||||
<item id="5911" countmax="1" chance="25" /> <!-- a red piece of cloth -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -28,4 +28,7 @@
|
||||
<item id="3577" countmax="2" chance="500" /> <!-- meat -->
|
||||
<item id="3492" countmax="3" chance="500" /> <!-- a worm -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -60,4 +60,7 @@
|
||||
<item id="3081" countmax="1" chance="8" /> <!-- a stone skin amulet -->
|
||||
<item id="3369" countmax="1" chance="10" /> <!-- a warrior helmet -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -39,4 +39,7 @@
|
||||
<item id="3084" countmax="1" chance="10" /> <!-- a protection amulet -->
|
||||
<item id="5883" countmax="1" chance="8" /> <!-- ape fur -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -28,4 +28,7 @@
|
||||
<item id="3031" countmax="10" chance="350" /> <!-- a gold coin -->
|
||||
<item id="3577" countmax="1" chance="300" /> <!-- meat -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -73,4 +73,7 @@
|
||||
<item id="3373" countmax="1" chance="5" /> <!-- a strange helmet -->
|
||||
<item id="3026" countmax="1" chance="25" /> <!-- a white pearl -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -27,4 +27,7 @@
|
||||
<item id="3582" countmax="2" chance="200" /> <!-- ham -->
|
||||
<item id="3577" countmax="3" chance="450" /> <!-- meat -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -42,4 +42,7 @@
|
||||
<item id="5876" countmax="1" chance="9" /> <!-- lizard leather -->
|
||||
<item id="5881" countmax="1" chance="9" /><!-- lizard scale -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -57,4 +57,7 @@
|
||||
<item id="5876" countmax="1" chance="9" /> <!-- lizard leather -->
|
||||
<item id="5881" countmax="1" chance="9" /><!-- lizard scale -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -39,4 +39,7 @@
|
||||
<item id="5876" countmax="1" chance="10" /> <!-- lizard leather -->
|
||||
<item id="5881" countmax="1" chance="10" /><!-- lizard scale -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -77,4 +77,7 @@
|
||||
<item id="2948" countmax="1" chance="3" /> <!-- a wooden flute -->
|
||||
<item id="5912" countmax="1" chance="25" /> <!-- a blue piece of cloth -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -54,4 +54,7 @@
|
||||
<item id="3072" countmax="1" chance="10" /> <!-- a wand of plague -->
|
||||
<item id="5883" countmax="1" chance="8" /> <!-- ape fur -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -39,4 +39,7 @@
|
||||
<item id="3264" countmax="1" chance="100" /> <!-- a sword -->
|
||||
<item id="5878" countmax="1" chance="8" /> <!-- minotaur leather -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -41,4 +41,7 @@
|
||||
<item id="3375" countmax="1" chance="20" /> <!-- a soldier helmet -->
|
||||
<item id="5878" countmax="1" chance="10" /> <!-- minotaur leather -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -37,4 +37,7 @@
|
||||
<item id="3577" countmax="1" chance="100" /> <!-- meat -->
|
||||
<item id="5878" countmax="1" chance="10" /> <!-- minotaur leather -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -53,4 +53,7 @@
|
||||
<item id="3073" countmax="1" chance="5" /> <!-- a wand of cosmic energy -->
|
||||
<item id="5878" countmax="1" chance="10" /> <!-- minotaur leather -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -55,4 +55,7 @@
|
||||
<item id="3294" countmax="1" chance="150" /> <!-- a short sword -->
|
||||
<item id="3324" countmax="1" chance="1" /> <!-- a skull staff -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -34,4 +34,7 @@
|
||||
<item id="3376" countmax="1" chance="90" /> <!-- a studded helmet -->
|
||||
<item id="3426" countmax="1" chance="100" /> <!-- a studded shield -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -38,4 +38,7 @@
|
||||
<item id="3582" countmax="1" chance="170" /> <!-- ham -->
|
||||
<item id="2914" countmax="1" chance="80" /> <!-- a lamp -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
@ -47,4 +47,7 @@
|
||||
<item id="3298" countmax="4" chance="100" /> <!-- a throwing knife -->
|
||||
<item id="3369" countmax="1" chance="1" /> <!-- a warrior helmet -->
|
||||
</loot>
|
||||
<script>
|
||||
<event name="KillingInTheNameOf" />
|
||||
</script>
|
||||
</monster>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user