mirror of
https://github.com/ErikasKontenis/SabrehavenServer.git
synced 2025-10-14 06:34:55 +02:00
introduce changes from streamside fork
This commit is contained in:
11
data/events/scripts/creature.lua
Normal file
11
data/events/scripts/creature.lua
Normal file
@@ -0,0 +1,11 @@
|
||||
function Creature:onChangeOutfit(outfit)
|
||||
return true
|
||||
end
|
||||
|
||||
function Creature:onAreaCombat(tile, isAggressive)
|
||||
return RETURNVALUE_NOERROR
|
||||
end
|
||||
|
||||
function Creature:onTargetCombat(target)
|
||||
return RETURNVALUE_NOERROR
|
||||
end
|
35
data/events/scripts/party.lua
Normal file
35
data/events/scripts/party.lua
Normal file
@@ -0,0 +1,35 @@
|
||||
function Party:onJoin(player)
|
||||
return true
|
||||
end
|
||||
|
||||
function Party:onLeave(player)
|
||||
return true
|
||||
end
|
||||
|
||||
function Party:onDisband()
|
||||
return true
|
||||
end
|
||||
|
||||
function Party:onShareExperience(exp)
|
||||
local sharedExperienceMultiplier = 1.20 --20%
|
||||
local vocationsIds = {}
|
||||
|
||||
local vocationId = self:getLeader():getVocation():getBase():getId()
|
||||
if vocationId ~= VOCATION_NONE then
|
||||
table.insert(vocationsIds, vocationId)
|
||||
end
|
||||
|
||||
for _, member in ipairs(self:getMembers()) do
|
||||
vocationId = member:getVocation():getBase():getId()
|
||||
if not table.contains(vocationsIds, vocationId) and vocationId ~= VOCATION_NONE then
|
||||
table.insert(vocationsIds, vocationId)
|
||||
end
|
||||
end
|
||||
|
||||
local size = #vocationsIds
|
||||
if size > 1 then
|
||||
sharedExperienceMultiplier = 1.0 + ((size * (5 * (size - 1) + 10)) / 100)
|
||||
end
|
||||
|
||||
return (exp * sharedExperienceMultiplier) / (#self:getMembers() + 1)
|
||||
end
|
169
data/events/scripts/player.lua
Normal file
169
data/events/scripts/player.lua
Normal file
@@ -0,0 +1,169 @@
|
||||
function Player:onLook(thing, position, distance)
|
||||
local description = "You see " .. thing:getDescription(distance)
|
||||
if self:getGroup():getAccess() then
|
||||
if thing:isItem() then
|
||||
description = string.format("%s\nItem ID: %d", description, thing:getId())
|
||||
|
||||
local actionId = thing:getActionId()
|
||||
if actionId ~= 0 then
|
||||
description = string.format("%s, Action ID: %d", description, actionId)
|
||||
end
|
||||
|
||||
local uniqueId = thing:getAttribute(ITEM_ATTRIBUTE_MOVEMENTID)
|
||||
if uniqueId > 0 and uniqueId < 65536 then
|
||||
description = string.format("%s, Movement ID: %d", description, uniqueId)
|
||||
end
|
||||
|
||||
local itemType = thing:getType()
|
||||
|
||||
local transformEquipId = itemType:getTransformEquipId()
|
||||
local transformDeEquipId = itemType:getTransformDeEquipId()
|
||||
if transformEquipId ~= 0 then
|
||||
description = string.format("%s\nTransforms to: %d (onEquip)", description, transformEquipId)
|
||||
elseif transformDeEquipId ~= 0 then
|
||||
description = string.format("%s\nTransforms to: %d (onDeEquip)", description, transformDeEquipId)
|
||||
end
|
||||
|
||||
local decayId = itemType:getDecayId()
|
||||
if decayId ~= -1 then
|
||||
description = string.format("%s\nDecays to: %d", description, decayId)
|
||||
end
|
||||
if thing:getAttribute(ITEM_ATTRIBUTE_DECAYSTATE) == 1 then
|
||||
description = string.format("%s\nDecaying in %d minutes (%d seconds).", description, thing:getAttribute(ITEM_ATTRIBUTE_DURATION) / 1000 / 60, thing:getAttribute(ITEM_ATTRIBUTE_DURATION) / 1000)
|
||||
end
|
||||
elseif thing:isCreature() then
|
||||
local str = "%s\nHealth: %d / %d"
|
||||
if thing:isPlayer() and thing:getMaxMana() > 0 then
|
||||
str = string.format("%s, Mana: %d / %d", str, thing:getMana(), thing:getMaxMana())
|
||||
end
|
||||
description = string.format(str, description, thing:getHealth(), thing:getMaxHealth()) .. "."
|
||||
end
|
||||
|
||||
local position = thing:getPosition()
|
||||
description = string.format(
|
||||
"%s\nPosition: %d, %d, %d",
|
||||
description, position.x, position.y, position.z
|
||||
)
|
||||
|
||||
if thing:isCreature() then
|
||||
if thing:isPlayer() then
|
||||
description = string.format("%s\nIP: %s.", description, Game.convertIpToString(thing:getIp()))
|
||||
end
|
||||
end
|
||||
end
|
||||
self:sendTextMessage(MESSAGE_INFO_DESCR, description)
|
||||
end
|
||||
|
||||
function Player:onLookInBattleList(creature, distance)
|
||||
local description = "You see " .. creature:getDescription(distance)
|
||||
if self:getGroup():getAccess() then
|
||||
local str = "%s\nHealth: %d / %d"
|
||||
if creature:isPlayer() and creature:getMaxMana() > 0 then
|
||||
str = string.format("%s, Mana: %d / %d", str, creature:getMana(), creature:getMaxMana())
|
||||
end
|
||||
description = string.format(str, description, creature:getHealth(), creature:getMaxHealth()) .. "."
|
||||
|
||||
local position = creature:getPosition()
|
||||
description = string.format(
|
||||
"%s\nPosition: %d, %d, %d",
|
||||
description, position.x, position.y, position.z
|
||||
)
|
||||
|
||||
if creature:isPlayer() then
|
||||
description = string.format("%s\nIP: %s", description, Game.convertIpToString(creature:getIp()))
|
||||
end
|
||||
end
|
||||
self:sendTextMessage(MESSAGE_INFO_DESCR, description)
|
||||
end
|
||||
|
||||
function Player:onLookInTrade(partner, item, distance)
|
||||
self:sendTextMessage(MESSAGE_INFO_DESCR, "You see " .. item:getDescription(distance))
|
||||
end
|
||||
|
||||
function Player:onMoveItem(item, count, fromPosition, toPosition, fromCylinder, toCylinder)
|
||||
return true
|
||||
end
|
||||
|
||||
function Player:onItemMoved(item, count, fromPosition, toPosition, fromCylinder, toCylinder)
|
||||
end
|
||||
|
||||
function Player:onMoveCreature(creature, fromPosition, toPosition)
|
||||
return true
|
||||
end
|
||||
|
||||
function Player:onReportBug(message, position, category)
|
||||
if self:getAccountType() == ACCOUNT_TYPE_NORMAL then
|
||||
return false
|
||||
end
|
||||
|
||||
local name = self:getName()
|
||||
local file = io.open("data/reports/bugs/" .. name .. " report.txt", "a")
|
||||
|
||||
if not file then
|
||||
self:sendTextMessage(MESSAGE_EVENT_DEFAULT, "There was an error when processing your report, please contact a gamemaster.")
|
||||
return true
|
||||
end
|
||||
|
||||
io.output(file)
|
||||
io.write("------------------------------\n")
|
||||
io.write("Name: " .. name)
|
||||
if category == BUG_CATEGORY_MAP then
|
||||
io.write(" [Map position: " .. position.x .. ", " .. position.y .. ", " .. position.z .. "]")
|
||||
end
|
||||
local playerPosition = self:getPosition()
|
||||
io.write(" [Player Position: " .. playerPosition.x .. ", " .. playerPosition.y .. ", " .. playerPosition.z .. "]\n")
|
||||
io.write("Comment: " .. message .. "\n")
|
||||
io.close(file)
|
||||
|
||||
self:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Your report has been sent to " .. configManager.getString(configKeys.SERVER_NAME) .. ".")
|
||||
return true
|
||||
end
|
||||
|
||||
function Player:onTurn(direction)
|
||||
return true
|
||||
end
|
||||
|
||||
function Player:onTradeRequest(target, item)
|
||||
return true
|
||||
end
|
||||
|
||||
function Player:onTradeAccept(target, item, targetItem)
|
||||
return true
|
||||
end
|
||||
|
||||
local soulCondition = Condition(CONDITION_SOUL, CONDITIONID_DEFAULT)
|
||||
soulCondition:setTicks(4 * 60 * 1000)
|
||||
soulCondition:setParameter(CONDITION_PARAM_SOULGAIN, 1)
|
||||
|
||||
function Player:onGainExperience(source, exp, rawExp)
|
||||
if not source or source:isPlayer() then
|
||||
return exp
|
||||
end
|
||||
|
||||
-- Soul regeneration
|
||||
local vocation = self:getVocation()
|
||||
if self:getSoul() < vocation:getMaxSoul() and exp >= self:getLevel() then
|
||||
soulCondition:setParameter(CONDITION_PARAM_SOULTICKS, vocation:getSoulGainTicks() * 1000)
|
||||
self:addCondition(soulCondition)
|
||||
end
|
||||
|
||||
-- Apply experience stage multiplier
|
||||
exp = exp * Game.getExperienceStage(self:getLevel())
|
||||
|
||||
return exp
|
||||
end
|
||||
|
||||
function Player:onLoseExperience(exp)
|
||||
return exp
|
||||
end
|
||||
|
||||
function Player:onGainSkillTries(skill, tries)
|
||||
if APPLY_SKILL_MULTIPLIER == false then
|
||||
return tries
|
||||
end
|
||||
|
||||
if skill == SKILL_MAGLEVEL then
|
||||
return tries * configManager.getNumber(configKeys.RATE_MAGIC)
|
||||
end
|
||||
return tries * configManager.getNumber(configKeys.RATE_SKILL)
|
||||
end
|
Reference in New Issue
Block a user