|
|
为了让你能够直接使用,我为你编写了一套高扩展性、模块化的Lua赞助神器脚本模板。该模板包含了赞助装备常见的核心要素:专属发光/称号、全属性百分比加成、击杀/攻击自定义特效、以及防掉落/绑定机制。你只需根据实际需求修改配置区的数值即可。
--[[
赞助神器系统 - 核心逻辑脚本
适用引擎: 多数支持Lua的MMORPG服务端 (如 TrinityCore, Mangos, 传奇GOM/GEE引擎等)
作者: AI Assistant
说明: 请将 ITEM_ID 替换为实际的神器物品ID
]]--
-- ================= 1. 基础配置区 (策划修改此处即可) =================
local SPONSOR_WEAPON = {
ITEM_ID = 99999, -- 神器物品ID
NAME = "★至尊赞助·斩星剑★", -- 显示名称
BIND_TYPE = 3, -- 绑定类型: 1=拾取绑定, 2=装备绑定, 3=账号绑定/不可交易
-- 基础属性倍率 (相对于普通同级别武器)
STAT_MULTIPLIER = {
atk = 3.5, -- 攻击力 3.5倍
hp = 2.0, -- 生命值 2倍
crit = 1.8, -- 暴击率 1.8倍
speed = 1.5, -- 攻速 1.5倍
},
-- 专属特权标识
PRIVILEGES = {
glow_effect = true, -- 是否开启专属武器发光
custom_title = "尊贵的赞助者", -- 装备时自动赋予的称号
no_durability = true, -- 永不磨损
}
}
-- ================= 2. 事件监听注册 =================
-- 当玩家装备该神器时触发
function OnEquipSponsorWeapon(player, item)
if item:GetEntry() ~= SPONSOR_WEAPON.ITEM_ID then return end
-- 应用属性倍率加成
ApplyStatBonus(player, SPONSOR_WEAPON.STAT_MULTIPLIER)
-- 赋予专属称号与发光
if SPONSOR_WEAPON.PRIVILEGES.custom_title then
player:SetTitle(SPONSOR_WEAPON.PRIVILEGES.custom_title)
end
if SPONSOR_WEAPON.PRIVILEGES.glow_effect then
player:AddAura(88888) -- 替换为你的专属发光Buff ID
end
-- 强制绑定防止盗号/误交易
if SPONSOR_WEAPON.BIND_TYPE == 3 then
item:SetAccountBound(true)
end
player:SendBroadcastMessage("|cffFFD700[系统]|r 您已装备赞助神器【" .. SPONSOR_WEAPON.NAME .. "】,神力已觉醒!")
end
-- 当玩家卸下该神器时触发
function OnUnequipSponsorWeapon(player, item)
if item:GetEntry() ~= SPONSOR_WEAPON.ITEM_ID then return end
-- 移除属性倍率
RemoveStatBonus(player, SPONSOR_WEAPON.STAT_MULTIPLIER)
-- 移除专属称号与发光
if SPONSOR_WEAPON.PRIVILEGES.custom_title then
player:RemoveTitle(SPONSOR_WEAPON.PRIVILEGES.custom_title)
end
if SPONSOR_WEAPON.PRIVILEGES.glow_effect then
player:RemoveAura(88888)
end
end
-- 当玩家使用神器造成伤害时触发 (核心战斗特效)
function OnDamageWithSponsorWeapon(player, target, damage)
local weapon = player:GetEquippedItem(WEAPON_SLOT_MAINHAND) -- 假设为主手武器
if not weapon or weapon:GetEntry() ~= SPONSOR_WEAPON.ITEM_ID then return damage end
local finalDamage = damage
-- 特效1: 对怪物造成额外最大生命值百分比伤害 (PVE特化)
if not target:IsPlayer() then
local bonusDmg = math.floor(target:GetMaxHealth() * 0.05) -- 额外5%最大生命伤害
finalDamage = finalDamage + bonusDmg
end
-- 特效2: 攻击时有15%几率触发全屏AOE雷击 (视觉+实战双效)
if math.random(1, 100) <= 15 then
player:CastSpell(target, 77777) -- 替换为你的AOE技能ID
player:SendCombatText("⚡神器共鸣⚡", 255, 215, 0)
end
return finalDamage
end
-- ================= 3. 内部工具函数 (无需修改) =================
function ApplyStatBonus(player, mult)
-- 注: 以下为伪代码逻辑,请根据你的服务端API替换
-- player:ModBaseAttack(mult.atk)
-- player:ModMaxHealth(mult.hp)
end
function RemoveStatBonus(player, mult)
-- 注: 移除加成的逆向操作
end
-- ================= 4. 钩子注册入口 =================
-- RegisterPlayerEvent(PLAYER_EVENT_ON_EQUIP, OnEquipSponsorWeapon)
-- RegisterPlayerEvent(PLAYER_EVENT_ON_UNEQUIP, OnUnequipSponsorWeapon)
-- RegisterPlayerEvent(PLAYER_EVENT_ON_DAMAGE_DEALT, OnDamageWithSponsorWeapon) |
|