QBCore 永久死亡系统 适合具有永久死亡机制的硬核 RP 服务器

QBCore 永久死亡系统 适合具有永久死亡机制的硬核 RP 服务器

QBCore 永久死亡系统 适合具有永久死亡机制的硬核 RP 服务器

一个轻量级且有效的 Perma-Kill 系统,适用于基于 QBCore 的服务器,可让您永久杀死角色而不删除其数据。该系统可防止在登录时选择死字符,同时通过恢复命令为服务器管理员提供控制。

🧠 特征

  • 🔒 标记为 dead 的 Perma-Death 强制
    字符无法通过 选择。
    qb-multicharacter

  • 📁 数据保留
    字符不会被删除,只会被标记。非常适合角色扮演上诉工作流程。

  • 🔄 管理员命令

    • /permakill [citizenid]:将角色标记为永久死亡。
    • /unpermakill [citizenid]:恢复字符。
  • 🧩 无缝 UI 反馈
    正常阻止角色选择,并在角色死亡时显示游戏内通知。


⚙️ 安装

1. 更新您的数据库

运行以下查询:

ALTER TABLE players ADD COLUMN permakilled TINYINT(1) DEFAULT 0;
ALTER TABLE players ADD COLUMN permakilled TINYINT(1) DEFAULT 0;
ALTER TABLE players ADD COLUMN permakilled TINYINT(1) DEFAULT 0;

2. 修改多角色逻辑

qb-multicharacter/html/index.html

Replace 函数:play_character()

play_character: function() {
if (this.selectedCharacter && this.selectedCharacter !== -1) {
var data = this.characters[this.selectedCharacter];
if (data !== undefined) {
axios.post('https://qb-multicharacter/selectCharacter', {
cData: data
}).then((response) => {
if (response.data === "ok") {
setTimeout(function() {
viewmodel.show.characters = false;
}, 500);
} else if (response.data === "cancel") {
console.log("Character selection cancelled due to permakill.");
}
});
} else {
this.registerData.firstname = undefined;
this.registerData.lastname = undefined;
this.registerData.nationality = undefined;
this.registerData.gender = undefined;
this.registerData.date = (new Date(Date.now() - (new Date()).getTimezoneOffset() * 60000)).toISOString().substr(0, 10);
this.show.characters = false;
this.show.register = true;
}
}
}
play_character: function() {
    if (this.selectedCharacter && this.selectedCharacter !== -1) {
        var data = this.characters[this.selectedCharacter];

        if (data !== undefined) {
            axios.post('https://qb-multicharacter/selectCharacter', {
                cData: data
            }).then((response) => {
                if (response.data === "ok") {
                    setTimeout(function() {
                        viewmodel.show.characters = false;
                    }, 500);
                } else if (response.data === "cancel") {
                    console.log("Character selection cancelled due to permakill.");
                }
            });
        } else {
            this.registerData.firstname = undefined;
            this.registerData.lastname = undefined;
            this.registerData.nationality = undefined;
            this.registerData.gender = undefined;
            this.registerData.date = (new Date(Date.now() - (new Date()).getTimezoneOffset() * 60000)).toISOString().substr(0, 10);

            this.show.characters = false;
            this.show.register = true;
        }
    }
}
play_character: function() { if (this.selectedCharacter && this.selectedCharacter !== -1) { var data = this.characters[this.selectedCharacter]; if (data !== undefined) { axios.post('https://qb-multicharacter/selectCharacter', { cData: data }).then((response) => { if (response.data === "ok") { setTimeout(function() { viewmodel.show.characters = false; }, 500); } else if (response.data === "cancel") { console.log("Character selection cancelled due to permakill."); } }); } else { this.registerData.firstname = undefined; this.registerData.lastname = undefined; this.registerData.nationality = undefined; this.registerData.gender = undefined; this.registerData.date = (new Date(Date.now() - (new Date()).getTimezoneOffset() * 60000)).toISOString().substr(0, 10); this.show.characters = false; this.show.register = true; } } }

qb-multicharacter/client/main.lua

Replace 回调:selectCharacter

RegisterNUICallback('selectCharacter', function(data, cb)
local cData = data.cData
QBCore.Functions.TriggerCallback('moon-permakill:checkPermakill', function(isDead)
if isDead then
TriggerEvent("QBCore:Notify", "This character is dead. Appeal on Discord.", "error")
cb("cancel")
return
end
DoScreenFadeOut(10)
TriggerServerEvent('qb-multicharacter:server:loadUserData', cData)
openCharMenu(false)
SetEntityAsMissionEntity(charPed, true, true)
DeleteEntity(charPed)
cb("ok")
end, cData.citizenid)
end)
RegisterNUICallback('selectCharacter', function(data, cb)
    local cData = data.cData

    QBCore.Functions.TriggerCallback('moon-permakill:checkPermakill', function(isDead)
        if isDead then
            TriggerEvent("QBCore:Notify", "This character is dead. Appeal on Discord.", "error")
            cb("cancel")
            return
        end

        DoScreenFadeOut(10)
        TriggerServerEvent('qb-multicharacter:server:loadUserData', cData)
        openCharMenu(false)
        SetEntityAsMissionEntity(charPed, true, true)
        DeleteEntity(charPed)
        cb("ok")
    end, cData.citizenid)
end)
RegisterNUICallback('selectCharacter', function(data, cb) local cData = data.cData QBCore.Functions.TriggerCallback('moon-permakill:checkPermakill', function(isDead) if isDead then TriggerEvent("QBCore:Notify", "This character is dead. Appeal on Discord.", "error") cb("cancel") return end DoScreenFadeOut(10) TriggerServerEvent('qb-multicharacter:server:loadUserData', cData) openCharMenu(false) SetEntityAsMissionEntity(charPed, true, true) DeleteEntity(charPed) cb("ok") end, cData.citizenid) end)

📦 命令

命令 描述
/permakill [citizenid] 永久将角色标记为死亡
/unpermakill [citizenid] 通过取消标记来恢复角色

🧪 使用案例

  • 具有永久死亡机制的硬核 RP 服务器
  • 帮派战争、警察枪战或长期伤害后果
  • 不删除数据库的角色封禁
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 共2条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复