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:
Erikas Kontenis 2021-02-25 15:46:44 +00:00
commit 3bd1a6f07e
168 changed files with 2312 additions and 588 deletions

View File

@ -1 +1 @@
next: 17723 next: 17739

View File

@ -1,6 +1,10 @@
-- Custom -- Custom
knightCloseAttackDamageIncreasePercent = 50 clientVersion = 792
paladinRangeAttackDamageIncreasePercent = 40 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 -- Combat settings
-- NOTE: valid values for worldType are: "pvp", "no-pvp" and "pvp-enforced" -- NOTE: valid values for worldType are: "pvp", "no-pvp" and "pvp-enforced"
@ -15,15 +19,15 @@ expFromPlayersLevelRange = 75
distanceWeaponsDropOnGround = false distanceWeaponsDropOnGround = false
-- Skull System -- Skull System
banLength = 30 * 24 * 60 * 60 banLength = 2 * 24 * 60 * 60
whiteSkullTime = 15 * 60 whiteSkullTime = 15 * 60
redSkullTime = 30 * 24 * 60 * 60 redSkullTime = 7 * 24 * 60 * 60
killsDayRedSkull = 3 killsDayRedSkull = 3
killsWeekRedSkull = 5 killsWeekRedSkull = 6
killsMonthRedSkull = 10 killsMonthRedSkull = 99999
killsDayBanishment = 6 killsDayBanishment = 1
killsWeekBanishment = 10 killsWeekBanishment = 12
killsMonthBanishment = 20 killsMonthBanishment = 99999
-- Connection Config -- Connection Config
-- NOTE: maxPlayers set to 0 means no limit -- NOTE: maxPlayers set to 0 means no limit
@ -32,7 +36,7 @@ bindOnlyGlobalAddress = false
loginProtocolPort = 7171 loginProtocolPort = 7171
gameProtocolPort = 7172 gameProtocolPort = 7172
statusProtocolPort = 7171 statusProtocolPort = 7171
maxPlayers = 1000 maxPlayers = 0
motd = "Welcome to Sabrehaven!" motd = "Welcome to Sabrehaven!"
onePlayerOnlinePerAccount = true onePlayerOnlinePerAccount = true
allowClones = false allowClones = false
@ -42,7 +46,6 @@ replaceKickOnLogin = true
maxPacketsPerSecond = -1 maxPacketsPerSecond = -1
autoStackCumulatives = false autoStackCumulatives = false
moneyRate = 1 moneyRate = 1
clientVersion = 792
-- Deaths -- Deaths
-- NOTE: Leave deathLosePercent as -1 if you want to use the default -- NOTE: Leave deathLosePercent as -1 if you want to use the default
@ -89,7 +92,7 @@ newbieLevelThreshold = 5
-- Rates -- Rates
-- NOTE: rateExp is not used if you have enabled stages in data/XML/stages.xml -- NOTE: rateExp is not used if you have enabled stages in data/XML/stages.xml
rateExp = 1 rateExp = 1
rateSkill = 5 rateSkill = 3
rateLoot = 2 rateLoot = 2
rateMagic = 2 rateMagic = 2
rateSpawn = 0 rateSpawn = 0
@ -109,7 +112,7 @@ defaultPriority = "high"
startupDatabaseOptimization = true startupDatabaseOptimization = true
-- Status server information -- Status server information
ownerName = "" ownerName = "Erikas"
ownerEmail = "" ownerEmail = ""
url = "https://otland.net/" url = "https://sabrehaven.com/"
location = "Sweden" location = "Poland"

View File

@ -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: 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="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: 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 --> <!--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." /> <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="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: 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="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="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="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="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="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 --> <!--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="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="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="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="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="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="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: 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." /> <mission name="Paw and Fur: Heros" storageid="17718" startvalue="0" endvalue="150" description="You already hunted |STATE|/150 heros." />

View File

@ -1,10 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<stages> <stages>
<config enabled="1"/> <config enabled="1"/>
<stage minlevel="1" maxlevel="20" multiplier="15" /> <stage minlevel="1" maxlevel="10" multiplier="10" />
<stage minlevel="21" maxlevel="40" multiplier="12" /> <stage minlevel="11" maxlevel="20" multiplier="9" />
<stage minlevel="41" maxlevel="60" multiplier="10" /> <stage minlevel="21" maxlevel="30" multiplier="8" />
<stage minlevel="61" maxlevel="80" multiplier="6" /> <stage minlevel="31" maxlevel="40" multiplier="7" />
<stage minlevel="81" maxlevel="100" multiplier="3" /> <stage minlevel="41" maxlevel="50" multiplier="6" />
<stage minlevel="101" multiplier="2" /> <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> </stages>

View File

@ -239,6 +239,8 @@
<action itemid="3031" script="misc/changegold.lua" /> <action itemid="3031" script="misc/changegold.lua" />
<action itemid="3035" script="misc/changegold.lua" /> <action itemid="3035" script="misc/changegold.lua" />
<action itemid="3043" 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 --> <!-- Chests -->
<action itemid="2479" script="misc/chests.lua" /> <action itemid="2479" script="misc/chests.lua" />

View 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

View 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

View File

@ -6,7 +6,8 @@
<event type="login" name="FirstItems" script="firstitems.lua"/> <event type="login" name="FirstItems" script="firstitems.lua"/>
<event type="login" name="RegenerateStamina" script="regeneratestamina.lua" /> <event type="login" name="RegenerateStamina" script="regeneratestamina.lua" />
<event type="death" name="PlayerDeath" script="playerdeath.lua"/> <event type="death" name="PlayerDeath" script="playerdeath.lua"/>
<event type="login" name="OfflineTraining" script="offlinetraining.lua" />
<!-- Killing In The Name Of Quest --> <!-- 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> </creaturescripts>

View File

@ -40,11 +40,35 @@ local tasks = {
['rat'] = {taskerStorage = 17608, progressStorage = 17699, killsRequired = 25}, ['rat'] = {taskerStorage = 17608, progressStorage = 17699, killsRequired = 25},
['cave rat'] = {taskerStorage = 17608, progressStorage = 17699, killsRequired = 25}, ['cave rat'] = {taskerStorage = 17608, progressStorage = 17699, killsRequired = 25},
['wolf'] = {taskerStorage = 17608, progressStorage = 17700, killsRequired = 100}, ['wolf'] = {taskerStorage = 17608, progressStorage = 17700, killsRequired = 100},
['winter wolf'] = {taskerStorage = 17608, progressStorage = 17700, killsRequired = 100},
['wasp'] = {taskerStorage = 17608, progressStorage = 17701, killsRequired = 100}, ['wasp'] = {taskerStorage = 17608, progressStorage = 17701, killsRequired = 100},
['larva'] = {taskerStorage = 17608, progressStorage = 17702, killsRequired = 100}, ['larva'] = {taskerStorage = 17608, progressStorage = 17702, killsRequired = 100},
['dwarf'] = {taskerStorage = 17608, progressStorage = 17703, killsRequired = 100}, ['dwarf'] = {taskerStorage = 17608, progressStorage = 17703, killsRequired = 100},
['skeleton'] = {taskerStorage = 17608, progressStorage = 17704, killsRequired = 100}, ['skeleton'] = {taskerStorage = 17608, progressStorage = 17704, killsRequired = 100},
['ghoul'] = {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 spearman'] = {taskerStorage = 17608, progressStorage = 17712, killsRequired = 300},
['orc shaman'] = {taskerStorage = 17608, progressStorage = 17712, killsRequired = 300}, ['orc shaman'] = {taskerStorage = 17608, progressStorage = 17712, killsRequired = 300},
['orc rider'] = {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}, ['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 local maxPlayersInPartyShare = 2
-- not tested probably nothing is working
function onKill(player, target) function onDeath(creature, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)
if target:isPlayer() or target:getMaster() then if not creature:isMonster() or creature:getMaster() then
return true return true
end 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] local task = tasks[targetName]
if task ~= nil then if task ~= nil then
local players local players
local party = player:getParty() 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 = party:getMembers() -- all members of the party
players[#players + 1] = party:getLeader() -- don't forget the leader 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 else
players = { player } -- no party? then just the player players = { player } -- no party? then just the player
end end
for i, member in ipairs(players) do for i, member in ipairs(players) do
print(i) if i <= maxPlayersInPartyShare then
if i < maxPlayersInPartyShare then
local inProgressQuest = member:getStorageValue(task.taskerStorage) local inProgressQuest = member:getStorageValue(task.taskerStorage)
if inProgressQuest == task.progressStorage then if inProgressQuest == task.progressStorage then
local playerQuestKills = member:getStorageValue(task.progressStorage) local playerQuestKills = member:getStorageValue(task.progressStorage)

View File

@ -58,7 +58,6 @@ function onLogin(player)
player:registerEvent("PlayerLogout") player:registerEvent("PlayerLogout")
player:registerEvent("FirstItems") player:registerEvent("FirstItems")
player:registerEvent("RegenerateStamina") player:registerEvent("RegenerateStamina")
player:registerEvent("KillingInTheNameOfKills")
return true return true
end end

View 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

View File

@ -20,16 +20,16 @@ function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDama
return return
end end
local byPlayer = 0 local byPlayer = false
local killerName local killerName
if killer ~= nil then if killer ~= nil then
if killer:isPlayer() then if killer:isPlayer() then
byPlayer = 1 byPlayer = true
else else
local master = killer:getMaster() local master = killer:getMaster()
if master and master ~= killer and master:isPlayer() then if master and master ~= killer and master:isPlayer() then
killer = master killer = master
byPlayer = 1 byPlayer = true
end end
end end
killerName = killer:getName() killerName = killer:getName()
@ -55,7 +55,7 @@ function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDama
end end
local playerGuid = player:getGuid() 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 resultId = db.storeQuery("SELECT `player_id` FROM `player_deaths` WHERE `player_id` = " .. playerGuid)
local deathRecords = 0 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) db.asyncQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. playerGuid .. " ORDER BY `time` LIMIT " .. limit)
end end
if byPlayer == 1 then if not byPlayer then
local targetGuild = player:getGuild() return
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)
end end
if warId ~= false then local warId = guildwars:isInWar(killer, player)
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 .. ")") if warId ~= 0 then
end guildwars:processKill(warId, killer, player)
end
end
end end
end end

View File

@ -1,5 +1,38 @@
local trainingStatues = {17724, 17725, 17726, 17727, 17728}
function Player:onLook(thing, position, distance) function Player:onLook(thing, position, distance)
local description = "You see " .. thing:getDescription(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 self:getGroup():getAccess() then
if thing:isItem() then if thing:isItem() then
description = string.format("%s\nItem ID: %d", description, thing:getId()) description = string.format("%s\nItem ID: %d", description, thing:getId())

View File

@ -49,3 +49,34 @@ end
if not nextUseStaminaTime then if not nextUseStaminaTime then
nextUseStaminaTime = {} nextUseStaminaTime = {}
end 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

View File

@ -11218,17 +11218,17 @@ Attributes = {ChangeTarget=2541,Brightness=0,LightColor=215}
TypeID = 2543 TypeID = 2543
Name = "a box" Name = "a box"
Flags = {Chest,Unpass,Unmove,Height,Disguise} Flags = {Chest,Unpass,Unmove,Height,Disguise}
Attributes = {,DisguiseTarget=2469} Attributes = {DisguiseTarget=2469}
TypeID = 2544 TypeID = 2544
Name = "a wooden coffin" Name = "a wooden coffin"
Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise} Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise}
Attributes = {,DisguiseTarget=2476} Attributes = {DisguiseTarget=2476}
TypeID = 2545 TypeID = 2545
Name = "a wooden coffin" Name = "a wooden coffin"
Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise} Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise}
Attributes = {,DisguiseTarget=2474} Attributes = {DisguiseTarget=2474}
TypeID = 2546 TypeID = 2546
Name = "a chest" Name = "a chest"
@ -11268,12 +11268,12 @@ Attributes = {DisguiseTarget=3634}
TypeID = 2553 TypeID = 2553
Name = "drawers" Name = "drawers"
Flags = {Chest,Unpass,Unmove,Height,Disguise} Flags = {Chest,Unpass,Unmove,Height,Disguise}
Attributes = {,DisguiseTarget=2433} Attributes = {DisguiseTarget=2433}
TypeID = 2554 TypeID = 2554
Name = "drawers" Name = "drawers"
Flags = {Chest,Unpass,Unmove,Height,Disguise} Flags = {Chest,Unpass,Unmove,Height,Disguise}
Attributes = {,DisguiseTarget=2434} Attributes = {DisguiseTarget=2434}
TypeID = 2555 TypeID = 2555
Name = "a small hole" Name = "a small hole"
@ -11293,27 +11293,27 @@ Attributes = {DisguiseTarget=4285}
TypeID = 2558 TypeID = 2558
Name = "a bookcase" Name = "a bookcase"
Flags = {Chest,Unpass,Unmove,Unlay,Height,Disguise} Flags = {Chest,Unpass,Unmove,Unlay,Height,Disguise}
Attributes = {,DisguiseTarget=2435} Attributes = {DisguiseTarget=2435}
TypeID = 2559 TypeID = 2559
Name = "a bookcase" Name = "a bookcase"
Flags = {Chest,Unpass,Unmove,Unlay,Height,Disguise} Flags = {Chest,Unpass,Unmove,Unlay,Height,Disguise}
Attributes = {,DisguiseTarget=2438} Attributes = {DisguiseTarget=2438}
TypeID = 2560 TypeID = 2560
Name = "a stone coffin" Name = "a stone coffin"
Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise} Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise}
Attributes = {,DisguiseTarget=1983} Attributes = {DisguiseTarget=1983}
TypeID = 2561 TypeID = 2561
Name = "a barrel" Name = "a barrel"
Flags = {Chest,Unpass,Unmove,Height,Disguise} Flags = {Chest,Unpass,Unmove,Height,Disguise}
Attributes = {,DisguiseTarget=2523} Attributes = {DisguiseTarget=2523}
TypeID = 2562 TypeID = 2562
Name = "a hollow stone" Name = "a hollow stone"
Flags = {Bottom,Chest,Unpass,Unmove,Unlay,Height,Disguise} Flags = {Bottom,Chest,Unpass,Unmove,Unlay,Height,Disguise}
Attributes = {,DisguiseTarget=1777} Attributes = {DisguiseTarget=1777}
TypeID = 2563 TypeID = 2563
Name = "a pile of bones" Name = "a pile of bones"
@ -11323,12 +11323,12 @@ Attributes = {DisguiseTarget=4305}
TypeID = 2564 TypeID = 2564
Name = "a sarcophagus" Name = "a sarcophagus"
Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise} Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise}
Attributes = {,DisguiseTarget=1994} Attributes = {DisguiseTarget=1994}
TypeID = 2565 TypeID = 2565
Name = "a sarcophagus" Name = "a sarcophagus"
Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise} Flags = {Bottom,Chest,Unpass,Unmove,Height,Disguise}
Attributes = {,DisguiseTarget=1992} Attributes = {DisguiseTarget=1992}
TypeID = 2566 TypeID = 2566
Name = "a lever" Name = "a lever"

View File

@ -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 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 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 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 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 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 function doPlayerRemoveItem(cid, itemid, count, ...) local p = Player(cid) return p ~= nil and p:removeItem(itemid, count, ...) or false end

View File

@ -10,3 +10,4 @@ dofile('data/lib/core/position.lua')
dofile('data/lib/core/teleport.lua') dofile('data/lib/core/teleport.lua')
dofile('data/lib/core/tile.lua') dofile('data/lib/core/tile.lua')
dofile('data/lib/core/vocation.lua') dofile('data/lib/core/vocation.lua')
dofile('data/lib/core/guildwars.lua')

199
data/lib/core/guildwars.lua Normal file
View 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

View File

@ -49,4 +49,7 @@
<item id="3032" chance="10" /><!-- small emerald --> <item id="3032" chance="10" /><!-- small emerald -->
<item id="3065" chance="7" /><!-- terra rod --> <item id="3065" chance="7" /><!-- terra rod -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -50,4 +50,7 @@
<item id="3566" chance="6" /><!-- red robe --> <item id="3566" chance="6" /><!-- red robe -->
<item id="3030" chance="7" /><!-- small ruby --> <item id="3030" chance="7" /><!-- small ruby -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -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" /> <health now="60" max="60" />
<look type="226" head="69" body="66" legs="69" feet="66" corpse="6079" /> <look type="226" head="69" body="66" legs="69" feet="66" corpse="6079" />
<targetchange interval="1000" chance="50" /> <targetchange interval="1000" chance="50" />

View File

@ -30,4 +30,7 @@
<item id="3492" countmax="2" chance="22" /><!-- worm --> <item id="3492" countmax="2" chance="22" /><!-- worm -->
<item id="3577" chance="100" /><!-- meat --> <item id="3577" chance="100" /><!-- meat -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -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" /> <health now="60" max="60" />
<look type="226" head="114" body="98" legs="97" feet="114" corpse="6079" /> <look type="226" head="114" body="98" legs="97" feet="114" corpse="6079" />
<targetchange interval="1000" chance="50" /> <targetchange interval="1000" chance="50" />

View File

@ -60,4 +60,7 @@
<item id="3055" chance="6" /><!-- platinum amulet --> <item id="3055" chance="6" /><!-- platinum amulet -->
<item id="2995" chance="5" /><!-- piggy bank --> <item id="2995" chance="5" /><!-- piggy bank -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -45,4 +45,7 @@
<item id="3074" chance="11" /><!-- wand of vortex --> <item id="3074" chance="11" /><!-- wand of vortex -->
<item id="5810" chance="10" /><!-- pirate voodoo doll --> <item id="5810" chance="10" /><!-- pirate voodoo doll -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -46,4 +46,7 @@
<item id="5792" chance="5" /><!-- dice --> <item id="5792" chance="5" /><!-- dice -->
<item id="5552" chance="5" /><!-- rum flask --> <item id="5552" chance="5" /><!-- rum flask -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -47,4 +47,7 @@
<item id="6096" chance="12" /><!-- pirate hat --> <item id="6096" chance="12" /><!-- pirate hat -->
<item id="5813" chance="6" /><!-- skull candle --> <item id="5813" chance="6" /><!-- skull candle -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -43,4 +43,7 @@
<item id="5552" chance="6" /><!-- rum flask --> <item id="5552" chance="6" /><!-- rum flask -->
<item id="5792" chance="5" /><!-- dice --> <item id="5792" chance="5" /><!-- dice -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -48,4 +48,7 @@
<item id="3271" chance="7" /><!-- spike sword --> <item id="3271" chance="7" /><!-- spike sword -->
<item id="3566" chance="7" /><!-- red robe --> <item id="3566" chance="7" /><!-- red robe -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -45,4 +45,7 @@
<item id="5928" chance="6" /><!-- goldfish bowl --> <item id="5928" chance="6" /><!-- goldfish bowl -->
<item id="5792" chance="6" /><!-- dice --> <item id="5792" chance="6" /><!-- dice -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -27,4 +27,7 @@
<item id="3337" chance="18" /><!-- bone club --> <item id="3337" chance="18" /><!-- bone club -->
<item id="3264" chance="12" /><!-- sword --> <item id="3264" chance="12" /><!-- sword -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -36,4 +36,7 @@
<item id="5895" chance="10" /><!-- fish fin --> <item id="5895" chance="10" /><!-- fish fin -->
<item id="3033" chance="9" /><!-- small amethyst --> <item id="3033" chance="9" /><!-- small amethyst -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -49,4 +49,7 @@
<item id="5895" chance="10" /><!-- fish fin --> <item id="5895" chance="10" /><!-- fish fin -->
<item id="3294" chance="70" /><!-- short sword --> <item id="3294" chance="70" /><!-- short sword -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -58,4 +58,7 @@
<item id="3098" chance="8" /><!-- ring of healing --> <item id="3098" chance="8" /><!-- ring of healing -->
<item id="3370" chance="8" /><!-- knight armor --> <item id="3370" chance="8" /><!-- knight armor -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -64,4 +64,7 @@
<item id="3370" chance="8" /><!-- knight armor --> <item id="3370" chance="8" /><!-- knight armor -->
<item id="5895" chance="15" /><!-- fish fin --> <item id="5895" chance="15" /><!-- fish fin -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -38,4 +38,7 @@
<item id="3265" chance="16" /><!-- two handed sword --> <item id="3265" chance="16" /><!-- two handed sword -->
<item id="3029" chance="5" /><!-- small sapphire --> <item id="3029" chance="5" /><!-- small sapphire -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -48,4 +48,7 @@
<item id="3373" chance="6" /><!-- strange helmet --> <item id="3373" chance="6" /><!-- strange helmet -->
<item id="3567" chance="6" /><!-- blue robe --> <item id="3567" chance="6" /><!-- blue robe -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -45,4 +45,7 @@
<item id="3061" chance="10" /><!-- life crystal --> <item id="3061" chance="10" /><!-- life crystal -->
<item id="5895" chance="10" /><!-- fish fin --> <item id="5895" chance="10" /><!-- fish fin -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -44,4 +44,7 @@
<item id="5895" chance="20" /><!-- fish fin --> <item id="5895" chance="20" /><!-- fish fin -->
<item id="3381" chance="8" /><!-- crown armor --> <item id="3381" chance="8" /><!-- crown armor -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -36,4 +36,7 @@
<item id="3028" chance="9" /><!-- small diamond --> <item id="3028" chance="9" /><!-- small diamond -->
<item id="5895" chance="9" /><!-- fish fin --> <item id="5895" chance="9" /><!-- fish fin -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -45,4 +45,7 @@
<item id="3581" chance="54" /><!-- shrimp --> <item id="3581" chance="54" /><!-- shrimp -->
<item id="5895" chance="24" /><!-- fish fin --> <item id="5895" chance="24" /><!-- fish fin -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -28,4 +28,7 @@
<item id="5678" countmax="3" chance="10" /><!-- tortoise egg --> <item id="5678" countmax="3" chance="10" /><!-- tortoise egg -->
<item id="3279" chance="10" /><!-- war hammer --> <item id="3279" chance="10" /><!-- war hammer -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -67,4 +67,7 @@
<item id="5668" chance="2" /><!-- mysterious voodoo skull --> <item id="5668" chance="2" /><!-- mysterious voodoo skull -->
<item id="3155" countmax="8" chance="42" /><!-- sudden death rune --> <item id="3155" countmax="8" chance="42" /><!-- sudden death rune -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -62,4 +62,7 @@
<item id="3340" chance="4" /><!-- heavy mace --> <item id="3340" chance="4" /><!-- heavy mace -->
<item id="3342" chance="4" /><!-- war axe --> <item id="3342" chance="4" /><!-- war axe -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -62,4 +62,7 @@
<item id="5668" chance="1" /><!-- mysterious voodoo skull --> <item id="5668" chance="1" /><!-- mysterious voodoo skull -->
<item id="3342" chance="95" /><!-- war axe --> <item id="3342" chance="95" /><!-- war axe -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -47,4 +47,7 @@
<item id="3071" chance="8" /><!-- wand of inferno --> <item id="3071" chance="8" /><!-- wand of inferno -->
<item id="3010" chance="5" /><!-- emerald bangle --> <item id="3010" chance="5" /><!-- emerald bangle -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -39,4 +39,7 @@
<item id="3426" countmax="1" chance="50" /> <!-- a studded shield --> <item id="3426" countmax="1" chance="50" /> <!-- a studded shield -->
<item id="2920" countmax="1" chance="50" /> <!-- a torch --> <item id="2920" countmax="1" chance="50" /> <!-- a torch -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -65,4 +65,7 @@
<item id="3033" countmax="4" chance="12" /> <!-- a small amethyst --> <item id="3033" countmax="4" chance="12" /> <!-- a small amethyst -->
<item id="3032" countmax="3" chance="6" /> <!-- a small emerald --> <item id="3032" countmax="3" chance="6" /> <!-- a small emerald -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -37,4 +37,7 @@
<item id="3577" countmax="1" chance="100" /> <!-- meat --> <item id="3577" countmax="1" chance="100" /> <!-- meat -->
<item id="3279" countmax="1" chance="1" /> <!-- a war hammer --> <item id="3279" countmax="1" chance="1" /> <!-- a war hammer -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -68,4 +68,7 @@
<item id="3004" countmax="1" chance="5" /> <!-- a wedding ring --> <item id="3004" countmax="1" chance="5" /> <!-- a wedding ring -->
<item id="3026" countmax="1" chance="10" /> <!-- a white pearl --> <item id="3026" countmax="1" chance="10" /> <!-- a white pearl -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -31,4 +31,7 @@
<item id="5896" countmax="1" chance="25" /> <!-- bear paw --> <item id="5896" countmax="1" chance="25" /> <!-- bear paw -->
<item id="5902" countmax="1" chance="10" /> <!-- honeycomb --> <item id="5902" countmax="1" chance="10" /> <!-- honeycomb -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -59,4 +59,7 @@
<item id="5893" countmax="1" chance="9" /> <!-- perfect behemoth fang --> <item id="5893" countmax="1" chance="9" /> <!-- perfect behemoth fang -->
<item id="5930" countmax="1" chance="9" /> <!-- behemoth claw --> <item id="5930" countmax="1" chance="9" /> <!-- behemoth claw -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -67,4 +67,7 @@
<item id="3412" countmax="1" chance="30" /> <!-- a wooden shield --> <item id="3412" countmax="1" chance="30" /> <!-- a wooden shield -->
<item id="5898" countmax="1" chance="8" /> <!-- beholder eye --> <item id="5898" countmax="1" chance="8" /> <!-- beholder eye -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -61,4 +61,7 @@
<item id="3029" countmax="4" chance="25" /> <!-- a small sapphire --> <item id="3029" countmax="4" chance="25" /> <!-- a small sapphire -->
<item id="5912" countmax="1" chance="10" /> <!-- a blue piece of cloth --> <item id="5912" countmax="1" chance="10" /> <!-- a blue piece of cloth -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -55,4 +55,7 @@
<item id="3114" countmax="1" chance="200" /> <!-- a skull --> <item id="3114" countmax="1" chance="200" /> <!-- a skull -->
<item id="5925" countmax="1" chance="10" /> <!-- a hardened bone --> <item id="5925" countmax="1" chance="10" /> <!-- a hardened bone -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -24,4 +24,7 @@
<item id="3590" countmax="3" chance="30" /> <!-- a cherry --> <item id="3590" countmax="3" chance="30" /> <!-- a cherry -->
<item id="3031" countmax="6" chance="350" /> <!-- a gold coin --> <item id="3031" countmax="6" chance="350" /> <!-- a gold coin -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -48,4 +48,7 @@
<item id="3738" countmax="1" chance="5" /> <!-- a sling herb --> <item id="3738" countmax="1" chance="5" /> <!-- a sling herb -->
<item id="3738" countmax="1" chance="5" /> <!-- a sling herb --> <item id="3738" countmax="1" chance="5" /> <!-- a sling herb -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -30,4 +30,7 @@
<item id="3031" countmax="2" chance="850" /> <!-- a gold coin --> <item id="3031" countmax="2" chance="850" /> <!-- a gold coin -->
<item id="3492" countmax="3" chance="500" /> <!-- a worm --> <item id="3492" countmax="3" chance="500" /> <!-- a worm -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -28,4 +28,7 @@
<item id="3559" countmax="1" chance="80" /> <!-- leather legs --> <item id="3559" countmax="1" chance="80" /> <!-- leather legs -->
<item id="3577" countmax="4" chance="700" /> <!-- meat --> <item id="3577" countmax="4" chance="700" /> <!-- meat -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -40,4 +40,7 @@
<item id="3294" countmax="1" chance="80" /> <!-- a short sword --> <item id="3294" countmax="1" chance="80" /> <!-- a short sword -->
<item id="3012" countmax="1" chance="2" /> <!-- a wolf tooth chain --> <item id="3012" countmax="1" chance="2" /> <!-- a wolf tooth chain -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -81,4 +81,7 @@
<item id="5954" countmax="1" chance="100" /> <!-- a demon horn --> <item id="5954" countmax="1" chance="100" /> <!-- a demon horn -->
<item id="5776" countmax="1" chance="1" /> <!-- a Sabrehaven talon --> <item id="5776" countmax="1" chance="1" /> <!-- a Sabrehaven talon -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -39,4 +39,7 @@
<item id="3287" countmax="3" chance="100" /> <!-- a throwing star --> <item id="3287" countmax="3" chance="100" /> <!-- a throwing star -->
<item id="2920" countmax="1" chance="500" /> <!-- a torch --> <item id="2920" countmax="1" chance="500" /> <!-- a torch -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -63,4 +63,7 @@
<item id="5877" countmax="1" chance="10" /> <!-- green dragon leather --> <item id="5877" countmax="1" chance="10" /> <!-- green dragon leather -->
<item id="5920" countmax="1" chance="10" /> <!-- green dragon scale --> <item id="5920" countmax="1" chance="10" /> <!-- green dragon scale -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -64,4 +64,7 @@
<item id="5882" countmax="1" chance="18" /> <!-- red dragon scale --> <item id="5882" countmax="1" chance="18" /> <!-- red dragon scale -->
<item id="5948" countmax="1" chance="10" /> <!-- red dragon leather --> <item id="5948" countmax="1" chance="10" /> <!-- red dragon leather -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -39,4 +39,7 @@
<item id="3723" countmax="1" chance="500" /> <!-- a white mushroom --> <item id="3723" countmax="1" chance="500" /> <!-- a white mushroom -->
<item id="5880" countmax="1" chance="7" /> <!-- iron ore --> <item id="5880" countmax="1" chance="7" /> <!-- iron ore -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -53,4 +53,7 @@
<item id="3723" countmax="2" chance="600" /> <!-- a white mushroom --> <item id="3723" countmax="2" chance="600" /> <!-- a white mushroom -->
<item id="5880" countmax="1" chance="1" /> <!-- Iron Ore --> <item id="5880" countmax="1" chance="1" /> <!-- Iron Ore -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -40,4 +40,7 @@
<item id="3723" countmax="2" chance="550" /> <!-- a white mushroom --> <item id="3723" countmax="2" chance="550" /> <!-- a white mushroom -->
<item id="5880" countmax="1" chance="8" /> <!-- iron ore --> <item id="5880" countmax="1" chance="8" /> <!-- iron ore -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -42,4 +42,7 @@
<item id="3723" countmax="2" chance="400" /> <!-- a white mushroom --> <item id="3723" countmax="2" chance="400" /> <!-- a white mushroom -->
<item id="5880" countmax="1" chance="6" /> <!-- iron ore --> <item id="5880" countmax="1" chance="6" /> <!-- iron ore -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -77,4 +77,7 @@
<item id="3071" countmax="1" chance="5" /> <!-- a wand of inferno --> <item id="3071" countmax="1" chance="5" /> <!-- a wand of inferno -->
<item id="5910" countmax="1" chance="25" /> <!-- green piece of cloth --> <item id="5910" countmax="1" chance="25" /> <!-- green piece of cloth -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -73,4 +73,7 @@
<item id="3265" countmax="1" chance="60" /> <!-- a two handed sword --> <item id="3265" countmax="1" chance="60" /> <!-- a two handed sword -->
<item id="5898" countmax="1" chance="8" /> <!-- beholder eye --> <item id="5898" countmax="1" chance="8" /> <!-- beholder eye -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -43,4 +43,7 @@
<item id="3376" countmax="1" chance="150" /> <!-- a studded helmet --> <item id="3376" countmax="1" chance="150" /> <!-- a studded helmet -->
<item id="5921" countmax="1" chance="10" /> <!-- a heaven blossom --> <item id="5921" countmax="1" chance="10" /> <!-- a heaven blossom -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -67,4 +67,7 @@
<item id="3037" countmax="1" chance="2" /> <!-- a yellow gem --> <item id="3037" countmax="1" chance="2" /> <!-- a yellow gem -->
<item id="5922" countmax="1" chance="25" /> <!-- a holy orchid --> <item id="5922" countmax="1" chance="25" /> <!-- a holy orchid -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -46,4 +46,7 @@
<item id="2901" countmax="1" chance="140" /> <!-- a waterskin --> <item id="2901" countmax="1" chance="140" /> <!-- a waterskin -->
<item id="5921" countmax="1" chance="10" /> <!-- a heaven blossom --> <item id="5921" countmax="1" chance="10" /> <!-- a heaven blossom -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -34,4 +34,7 @@
<item id="3130" countmax="1" chance="80" /> <!-- twigs --> <item id="3130" countmax="1" chance="80" /> <!-- twigs -->
<item id="3412" countmax="1" chance="150" /> <!-- a wooden shield --> <item id="3412" countmax="1" chance="150" /> <!-- a wooden shield -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -49,4 +49,7 @@
<item id="3336" countmax="1" chance="80" /> <!-- a studded club --> <item id="3336" countmax="1" chance="80" /> <!-- a studded club -->
<item id="3012" countmax="1" chance="2" /> <!-- a wolf tooth chain --> <item id="3012" countmax="1" chance="2" /> <!-- a wolf tooth chain -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -43,4 +43,7 @@
<item id="3049" countmax="1" chance="2" /> <!-- a stealth ring --> <item id="3049" countmax="1" chance="2" /> <!-- a stealth ring -->
<item id="5909" countmax="1" chance="8" /> <!-- white piece of cloth --> <item id="5909" countmax="1" chance="8" /> <!-- white piece of cloth -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -42,4 +42,7 @@
<item id="3492" countmax="6" chance="800" /> <!-- a worm --> <item id="3492" countmax="6" chance="800" /> <!-- a worm -->
<item id="5913" countmax="1" chance="10" /> <!-- a brown piece of cloth --> <item id="5913" countmax="1" chance="10" /> <!-- a brown piece of cloth -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -49,4 +49,7 @@
<item id="3053" countmax="1" chance="7" /> <!-- a time ring --> <item id="3053" countmax="1" chance="7" /> <!-- a time ring -->
<item id="5879" countmax="1" chance="21" /> <!-- spider silk --> <item id="5879" countmax="1" chance="21" /> <!-- spider silk -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -43,4 +43,7 @@
<item id="3462" countmax="1" chance="100" /> <!-- a small axe --> <item id="3462" countmax="1" chance="100" /> <!-- a small axe -->
<item id="1781" countmax="3" chance="300" /> <!-- a small stone --> <item id="1781" countmax="3" chance="300" /> <!-- a small stone -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -62,4 +62,7 @@
<item id="2933" countmax="1" chance="75" /> <!-- a small oil lamp --> <item id="2933" countmax="1" chance="75" /> <!-- a small oil lamp -->
<item id="5910" countmax="1" chance="25" /> <!-- green piece of cloth --> <item id="5910" countmax="1" chance="25" /> <!-- green piece of cloth -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -63,4 +63,7 @@
<item id="3004" countmax="1" chance="50" /> <!-- a wedding ring --> <item id="3004" countmax="1" chance="50" /> <!-- a wedding ring -->
<item id="5911" countmax="1" chance="25" /> <!-- a red piece of cloth --> <item id="5911" countmax="1" chance="25" /> <!-- a red piece of cloth -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -28,4 +28,7 @@
<item id="3577" countmax="2" chance="500" /> <!-- meat --> <item id="3577" countmax="2" chance="500" /> <!-- meat -->
<item id="3492" countmax="3" chance="500" /> <!-- a worm --> <item id="3492" countmax="3" chance="500" /> <!-- a worm -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -60,4 +60,7 @@
<item id="3081" countmax="1" chance="8" /> <!-- a stone skin amulet --> <item id="3081" countmax="1" chance="8" /> <!-- a stone skin amulet -->
<item id="3369" countmax="1" chance="10" /> <!-- a warrior helmet --> <item id="3369" countmax="1" chance="10" /> <!-- a warrior helmet -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -39,4 +39,7 @@
<item id="3084" countmax="1" chance="10" /> <!-- a protection amulet --> <item id="3084" countmax="1" chance="10" /> <!-- a protection amulet -->
<item id="5883" countmax="1" chance="8" /> <!-- ape fur --> <item id="5883" countmax="1" chance="8" /> <!-- ape fur -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -28,4 +28,7 @@
<item id="3031" countmax="10" chance="350" /> <!-- a gold coin --> <item id="3031" countmax="10" chance="350" /> <!-- a gold coin -->
<item id="3577" countmax="1" chance="300" /> <!-- meat --> <item id="3577" countmax="1" chance="300" /> <!-- meat -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -73,4 +73,7 @@
<item id="3373" countmax="1" chance="5" /> <!-- a strange helmet --> <item id="3373" countmax="1" chance="5" /> <!-- a strange helmet -->
<item id="3026" countmax="1" chance="25" /> <!-- a white pearl --> <item id="3026" countmax="1" chance="25" /> <!-- a white pearl -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -27,4 +27,7 @@
<item id="3582" countmax="2" chance="200" /> <!-- ham --> <item id="3582" countmax="2" chance="200" /> <!-- ham -->
<item id="3577" countmax="3" chance="450" /> <!-- meat --> <item id="3577" countmax="3" chance="450" /> <!-- meat -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -42,4 +42,7 @@
<item id="5876" countmax="1" chance="9" /> <!-- lizard leather --> <item id="5876" countmax="1" chance="9" /> <!-- lizard leather -->
<item id="5881" countmax="1" chance="9" /><!-- lizard scale --> <item id="5881" countmax="1" chance="9" /><!-- lizard scale -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -57,4 +57,7 @@
<item id="5876" countmax="1" chance="9" /> <!-- lizard leather --> <item id="5876" countmax="1" chance="9" /> <!-- lizard leather -->
<item id="5881" countmax="1" chance="9" /><!-- lizard scale --> <item id="5881" countmax="1" chance="9" /><!-- lizard scale -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -39,4 +39,7 @@
<item id="5876" countmax="1" chance="10" /> <!-- lizard leather --> <item id="5876" countmax="1" chance="10" /> <!-- lizard leather -->
<item id="5881" countmax="1" chance="10" /><!-- lizard scale --> <item id="5881" countmax="1" chance="10" /><!-- lizard scale -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -77,4 +77,7 @@
<item id="2948" countmax="1" chance="3" /> <!-- a wooden flute --> <item id="2948" countmax="1" chance="3" /> <!-- a wooden flute -->
<item id="5912" countmax="1" chance="25" /> <!-- a blue piece of cloth --> <item id="5912" countmax="1" chance="25" /> <!-- a blue piece of cloth -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -54,4 +54,7 @@
<item id="3072" countmax="1" chance="10" /> <!-- a wand of plague --> <item id="3072" countmax="1" chance="10" /> <!-- a wand of plague -->
<item id="5883" countmax="1" chance="8" /> <!-- ape fur --> <item id="5883" countmax="1" chance="8" /> <!-- ape fur -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -39,4 +39,7 @@
<item id="3264" countmax="1" chance="100" /> <!-- a sword --> <item id="3264" countmax="1" chance="100" /> <!-- a sword -->
<item id="5878" countmax="1" chance="8" /> <!-- minotaur leather --> <item id="5878" countmax="1" chance="8" /> <!-- minotaur leather -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -41,4 +41,7 @@
<item id="3375" countmax="1" chance="20" /> <!-- a soldier helmet --> <item id="3375" countmax="1" chance="20" /> <!-- a soldier helmet -->
<item id="5878" countmax="1" chance="10" /> <!-- minotaur leather --> <item id="5878" countmax="1" chance="10" /> <!-- minotaur leather -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -37,4 +37,7 @@
<item id="3577" countmax="1" chance="100" /> <!-- meat --> <item id="3577" countmax="1" chance="100" /> <!-- meat -->
<item id="5878" countmax="1" chance="10" /> <!-- minotaur leather --> <item id="5878" countmax="1" chance="10" /> <!-- minotaur leather -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -53,4 +53,7 @@
<item id="3073" countmax="1" chance="5" /> <!-- a wand of cosmic energy --> <item id="3073" countmax="1" chance="5" /> <!-- a wand of cosmic energy -->
<item id="5878" countmax="1" chance="10" /> <!-- minotaur leather --> <item id="5878" countmax="1" chance="10" /> <!-- minotaur leather -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -55,4 +55,7 @@
<item id="3294" countmax="1" chance="150" /> <!-- a short sword --> <item id="3294" countmax="1" chance="150" /> <!-- a short sword -->
<item id="3324" countmax="1" chance="1" /> <!-- a skull staff --> <item id="3324" countmax="1" chance="1" /> <!-- a skull staff -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -34,4 +34,7 @@
<item id="3376" countmax="1" chance="90" /> <!-- a studded helmet --> <item id="3376" countmax="1" chance="90" /> <!-- a studded helmet -->
<item id="3426" countmax="1" chance="100" /> <!-- a studded shield --> <item id="3426" countmax="1" chance="100" /> <!-- a studded shield -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -38,4 +38,7 @@
<item id="3582" countmax="1" chance="170" /> <!-- ham --> <item id="3582" countmax="1" chance="170" /> <!-- ham -->
<item id="2914" countmax="1" chance="80" /> <!-- a lamp --> <item id="2914" countmax="1" chance="80" /> <!-- a lamp -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

View File

@ -47,4 +47,7 @@
<item id="3298" countmax="4" chance="100" /> <!-- a throwing knife --> <item id="3298" countmax="4" chance="100" /> <!-- a throwing knife -->
<item id="3369" countmax="1" chance="1" /> <!-- a warrior helmet --> <item id="3369" countmax="1" chance="1" /> <!-- a warrior helmet -->
</loot> </loot>
<script>
<event name="KillingInTheNameOf" />
</script>
</monster> </monster>

Some files were not shown because too many files have changed in this diff Show More