帮我写一个自定义组队经验代码
🤖 回答引擎: 热血江湖Lua |
🕒 时间: 2026-05-25 00:13:52 |
👁️ 阅读: 0
以下是一个基于热血江湖引擎的自定义组队经验分配代码示例:
```lua
-- 自定义组队经验触发函数
-- @param actor object 玩家对象ID
-- @param monId object 怪物对象ID
-- @param exp number 基础经验值
-- @return boolean 是否使用自定义经验计算
function custcalexp(actor, monId, exp)
-- 检查是否有队伍
local groupId = getgroupid(actor)
if not groupId or groupId == 0 then
-- 没有队伍,使用默认经验计算
return false
end
-- 获取队伍成员
local teamMembers = getgroupmembers(actor)
if not teamMembers or #teamMembers == 0 then
return false
end
-- 获取队伍人数
local memberCount = #teamMembers
-- 自定义经验分配规则
local totalExp = exp
local leaderBonus = 1.2 -- 队长额外加成20%
local levelBonus = 1.1 -- 等级相近加成10%
-- 获取队长ID
local leaderId = groupmasterid(actor)
local isLeader = (leaderId == actor)
-- 计算每个队员应得的经验
for _, memberId in pairs(teamMembers) do
local memberExp = totalExp / memberCount
-- 队长额外加成
if memberId == leaderId then
memberExp = memberExp * leaderBonus
end
-- 等级相近加成(示例:等级差在5级以内)
local memberLevel = currabil(memberId, 0)
local monsterLevel = currabil(monId, 0)
if math.abs(memberLevel - monsterLevel) <= 5 then
memberExp = memberExp * levelBonus
end
-- 给予经验
changeabillity(memberId, 0, "+", math.floor(memberExp))
-- 发送经验获取提示
sendmsg(memberId, 6, string.format("获得组队经验:%d", math.floor(memberExp)))
end
-- 记录组队杀怪日志
local monsterName = getmonsterinfo(monId, 0) -- 获取怪物名称
for _, memberId in pairs(teamMembers) do
local memberName = getname(memberId)
print(string.format("组队杀怪:%s 的队伍击杀了 %s,获得经验:%d",
memberName, monsterName, math.floor(totalExp / memberCount)))
end
-- 返回true表示使用自定义经验计算,不再执行默认逻辑
return true
end
-- 组队杀怪触发函数(可选,用于记录组队杀怪事件)
function groupkillmon(actor, monId)
-- 这里可以添加组队杀怪时的额外逻辑
-- 例如:组队杀怪成就、组队任务进度等
local groupId = getgroupid(actor)
if groupId and groupId ~= 0 then
local teamMembers = getgroupmembers(actor)
if teamMembers then
-- 记录组队杀怪次数
for _, memberId in pairs(teamMembers) do
-- 这里可以增加组队杀怪计数
-- setcustomdata(memberId, "team_kill_count", "+", 1)
end
end
end
end
```
**代码说明:**
1. **custcalexp函数**:这是自定义组队经验计算的核心函数,当返回`true`时,引擎会使用自定义的经验分配逻辑,不再执行默认计算。
2. **组队判断**:首先检查玩家是否有队伍,没有队伍则返回`false`使用默认经验计算。
3. **经验分配规则**:
- 基础经验平均分配
- 队长获得20%额外加成
- 等级与怪物相近的玩家获得10%额外加成
4. **经验发放**:使用`changeabillity`函数给每个队员发放计算后的经验。
5. **提示信息**:使用`sendmsg`给每个队员发送经验获取提示。
6. **日志记录**:在控制台打印组队杀怪日志。
7. **groupkillmon函数**:这是一个可选函数,用于处理组队杀怪时的额外逻辑。
**使用说明:**
1. 将此代码放入服务端的相应脚本文件中
2. 当玩家组队杀怪时,会触发`custcalexp`函数
3. 函数会按照自定义规则分配经验
4. 返回`true`表示使用自定义计算,返回`false`则使用引擎默认计算
**可扩展功能:**
- 添加距离判断:只给范围内的队员分配经验
- 添加职业加成:不同职业获得不同比例的经验
- 添加VIP加成:VIP玩家获得额外经验
- 添加时间加成:特定时间段经验翻倍
- 添加连续杀怪加成:连续杀怪经验递增
你可以根据实际需求调整经验分配规则和加成比例。
← 返回问答库