-- 定义 Recipe.OnGiveXP 表为空表
Recipe.OnGiveXP = {}

-- 引入其他 Lua 文件
require('NPCs/MainCreationMethods');
require("Items/Distributions");
require("Items/ProceduralDistributions");

-- 定义 playerdatatable 表以及其中的数据
playerdatatable = {}
playerdatatable[0] = { 'MTModVersion', MTModVersion }
playerdatatable[1] = { 'secondwinddisabled', false }
playerdatatable[2] = { 'secondwindrecoveredfatigue', false }
playerdatatable[3] = { 'secondwindcooldown', 0 }
playerdatatable[4] = { 'bToadTraitDepressed', false }
playerdatatable[5] = { 'indefatigablecooldown', 0 }
playerdatatable[6] = { 'indefatigablecuredinfection', false }
playerdatatable[7] = { 'indefatigabledisabled', false }
playerdatatable[8] = { 'bindefatigable', false }
playerdatatable[9] = { 'IndefatigableHasBeenDraggedDown', false }
playerdatatable[10] = { 'bSatedDrink', true }
playerdatatable[11] = { 'iHoursSinceDrink', 0 }
playerdatatable[12] = { 'iTimesCannibal', 0 }
playerdatatable[13] = { 'fPreviousHealthFromFoodTimer', 1000 }
playerdatatable[14] = { 'bWasInfected', false }
playerdatatable[15] = { 'iHardyEndurance', 0 }
playerdatatable[16] = { 'iHardyMaxEndurance', 5 }
playerdatatable[17] = { 'iHardyInterval', 1000 }
playerdatatable[18] = { 'iWithdrawalCooldown', 24 }
playerdatatable[19] = { 'iParanoiaCooldown', 10 }
playerdatatable[20] = { 'SuperImmuneRecovery', 0 }
playerdatatable[21] = { 'SuperImmuneActive', false }
playerdatatable[22] = { 'SuperImmuneMinutesPassed', 0 }
playerdatatable[23] = { 'SuperImmuneTextSaid', false }
playerdatatable[24] = { 'SuperImmuneHealedOnce', false }
playerdatatable[25] = { 'SuperImmuneMinutesWellFed', 0 }
playerdatatable[26] = { 'SuperImmuneAbsoluteWellFedAmount', 0 }
playerdatatable[27] = { 'SuperImmuneInfections', 0 }
playerdatatable[28] = { 'SuperImmuneLethal', false }
playerdatatable[29] = { 'MotionActive', false }
playerdatatable[30] = { 'HasSlept', false }
playerdatatable[31] = { 'FatigueWhenSleeping', 0 }
playerdatatable[32] = { 'NeckHadPain', false }
playerdatatable[33] = { 'ContainerTraitIllegal', false }
playerdatatable[34] = { 'ContainerTraitPlayerCurrentPositionX', 0 }
playerdatatable[35] = { 'ContainerTraitPlayerCurrentPositionY', 0 }
playerdatatable[36] = { 'AlbinoTimeSpentOutside', 0 }
playerdatatable[37] = { 'isMTAlcoholismInitialized', false }
playerdatatable[38] = { 'iBouncercooldown', 0 }
playerdatatable[39] = { 'bisInfected', false }
playerdatatable[40] = { 'bisAlbinoOutside', false }
playerdatatable[41] = { 'bToadTraitDepressed', false }
playerdatatable[42] = { 'bWasJustSprinting', false }
playerdatatable[43] = { 'InjuredBodyList', {} }
playerdatatable[44] = { 'UnwaveringInjurySpeedChanged', false }
playerdatatable[45] = { 'OldCalories', 810 }
playerdatatable[46] = { 'IngenuitiveActivated', false }
playerdatatable[47] = { 'EvasivePlayerInfected', false }
playerdatatable[48] = { 'TraitInjuredBodyList', {} }
playerdatatable[49] = {'fLastHP', 0}
playerdatatable[50] = {'isSleeping', false}



function Recipe.OnCreate.DaGeJiaoXian(items, result, player)
    player:getInventory():AddItems('JingYe',1)
end

function Recipe.OnCreate.BaiNian(items, result, player)
    player:Say(' '..tostring(getText('IGUI_BaiNian')))
    processGeneralMessage(getText('IGUI_BaiNian2'))
end   

function Recipe.OnCreate.HuJiu(items, result, player)
    local Catch = ZombRand(10)
    if Catch == 0 then
        player:Say(' '..tostring(getText('IGUI_AA')))    end
        if Catch == 1 then
            player:Say(' '..tostring(getText('IGUI_BB')))
        end
            if Catch == 2 then
                player:Say(' '..tostring(getText('IGUI_CC')))
            end
            if Catch == 3 then
                player:Say(' '..tostring(getText('IGUI_DD')))
            end
            if Catch == 4 then
                player:Say(' '..tostring(getText('IGUI_EE')))
            end
            if Catch == 5 then
                player:Say(' '..tostring(getText('IGUI_FF')))
            end
            if Catch == 6 then 
                player:Say(' '..tostring(getText('IGUI_GG')))
            end
            if Catch == 7 then 
                player:Say(' '..tostring(getText('IGUI_HH')))
            end
            if Catch == 8 then 
                player:Say(' '..tostring(getText('IGUI_II')))
            end
            if Catch == 9 then 
                player:Say(' '..tostring(getText('IGUI_JJ')))
            end
    
end

--[[
function Recipe.OnCreate.coordinate(items, result, player)
    player:Say(' '..tostring(getText('IGUI_JJ')))
]]



function Recipe.OnCreate.TS_Maintenance(items, result, player)
    local XP = getSandboxOptions():getOptionByName('XP_Maintenance_CM'):getValue()
    player:getXp():AddXP(Perks.Maintenance, XP);  
end

function Recipe.OnCreate.TS_Mechanics(items, result, player)
    local XP = getSandboxOptions():getOptionByName('XP_Mechanics_CM'):getValue()
    player:getXp():AddXP(Perks.Mechanics, XP);  
end

function Recipe.OnCreate.TS_Tailoring(items, result, player)
    local XP = getSandboxOptions():getOptionByName('XP_Tailoring_CM'):getValue()
    player:getXp():AddXP(Perks.Tailoring, XP);  
end

function Recipe.OnCreate.TS_Nimble(items, result, player)
    local XP = getSandboxOptions():getOptionByName('XP_Nimble_CM'):getValue()
    player:getXp():AddXP(Perks.Nimble, XP);  
end

function Recipe.OnCreate.TS_Doctor(items, result, player)
    local XP = getSandboxOptions():getOptionByName('XP_Doctor_CM'):getValue()
    player:getXp():AddXP(Perks.Doctor, XP);  
end



--无限子弹
--[[
local function keepFill_CM()
    local playerObj = getPlayer()
    local gun = playerObj:getInventory():FindAndReturn('DoubleBarrelShotgun_CM')
    if gun then
        gun:setCurrentAmmoCount(gun:getMaxAmmo())
    end
end
Events.EveryOneMinute.Add(keepFill_CM)
]]



local function keepFill_CM()
    local playerObj = getPlayer()
    if not playerObj then return end
    local gun = playerObj:getPrimaryHandItem()
    if gun then
        if gun:getType() == 'DoubleBarrelShotgun_CM' then
            gun:setCurrentAmmoCount(gun:getMaxAmmo())
        end
    end
end
Events.EveryOneMinute.Add(keepFill_CM)
--[[
local function Fill_CM(items, result, player) 
    result:setCurrentAmmoCount(result:getMaxAmmo())
end --装填
]]
--[[
local function delete_ShotgunShells_CM()
    local playerObj = getPlayer()
    if playerObj:getInventory():contains('ShotgunShells_CM') then
        while playerObj:getInventory():contains('ShotgunShells_CM') do
            playerObj:getInventory():Remove('ShotgunShells_CM')
        end
    end
end  --删霰弹
Events.EveryTenMinutes.Add(delete_ShotgunShells_CM)
]]


function Recipe.OnCreate.HongBao(items, result, player)
    local i = ZombRand(11)
    if i == 0 then
    player:getInventory():AddItems('BaiNianPic1',1)  
    end
    if i == 1 then
    player:getInventory():AddItems('BaiNianPic2',1)
    end
    if i == 2 then
        player:getInventory():AddItems('BaiNianPic3',1)
        end
        if i == 3 then
            player:getInventory():AddItems('BaiNianPic4',1)
            end
            if i == 4 then
                player:getInventory():AddItems('BaiNianPic5',1)
                end
                if i == 5 then
                    player:getInventory():AddItems('BaiNianPic6',1)
                    end
                    if i == 6 then
                        player:getInventory():AddItems('BaiNianPic7',1)
                        end
                        if i == 7 then
                            player:getInventory():AddItems('BaiNianPic8',1)
                            end
                            if i == 8 then
                                player:getInventory():AddItems('BaiNianPic9',1)
                                end
                                if i == 9 then
                                    player:getInventory():AddItems('BaiNianPic10',1)
                                    end
                                    if i == 10 then
                                        player:getInventory():AddItems('BaiNianPic11',1)
                                        end
end

function Recipe.OnCreate.TS_gamble(items, result, player)
    local i = ZombRand(100)
    if i <35 then
        player:Say(getText('IGUI_TS_gamble_falied'))
    elseif i<85 then
        player:Say(getText('IGUI_TS_gamble_2'))
        player:getInventory():AddItems('SuiPian',2)
    elseif i<92 then
        player:Say(getText('IGUI_TS_gamble_3'))
        player:getInventory():AddItems('SuiPian',4)
    else
        player:Say(getText('IGUI_TS_gamble_4'))
        player:getInventory():AddItems('SuiPian',8)
    end
end



function Recipe.OnCreate.deleteRandomTraits(items, result, player)
    local goodtra = {}
    local badtra = {}

    for i=0, TraitFactory.getTraits():size()-1 do
        
        local traita = TraitFactory.getTraits():get(i)
        
        if not player:getTraits():contains(traita:getType()) and traita:getCost() >= 0 then
            table.insert(goodtra, traita)
        end
        
        if player:getTraits():contains(traita:getType()) and traita:getCost() < 0 then
            table.insert(badtra, traita)
        end
    end

    local goodtraaa = goodtra[ZombRand(#goodtra) + 1]
    
    local badtraaa = badtra[ZombRand(#badtra) + 1]

    if #goodtra >= 0 and #badtra > 0 then
        player:getTraits():remove(badtraaa:getType())
        
        player:Say(getText('IGUI_TS_trait3') .. badtraaa:getLabel())
    end

    if #goodtra >= 0 and #badtra == 0 then
        player:Say(getText('IGUI_TS_trait1'))
    end

    -- player:getBodyDamage():setOverallBodyHealth(0.8 * player:getBodyDamage():getOverallBodyHealth())
    local aaaa = 1 - ( (1 - player:getStats():getHunger() )* 0.9 )
    local bbbb = 1 - ( (1 - player:getStats():getThirst() )* 0.9 )
    
    player:getStats():setHunger(aaaa)
    player:getStats():setThirst(bbbb)

    getPlayer(player):getNutrition():setWeight(getPlayer(player):getNutrition():getWeight() - 2)

    player:Say(getText('IGUI_TS_trait2'))
end


local SpeedFlag = false

local function bloodAmulet(playerobj)
    local playerObj = getPlayer()
    local player = getPlayer()
        
    if playerObj:getInventory():contains('bloodAmulet') then

        SpeedFlag = false

        caltimeav = 13
        getPlayer():setVariable('runspeed_1', 1.4)
        getPlayer():getBodyDamage():ReduceGeneralHealth(0.0085);
        getPlayer():getStats():setEndurance(getPlayer():getStats():getEndurance() + 0.0012);
        getPlayer():getStats():setDrunkenness(100); 
        getPlayer():getStats():setPanic(getPlayer():getStats():getPanic() + 120);
        --getPlayer():getStats():setBoredom(100);
        if not player:HasTrait('batteringram') then
            local playerdata = player:getModData();
            local Fitnesslvl = player:getPerkLevel(Perks.Fitness);
            if Fitnesslvl == 0 then
                Fitnesslvl = 1;
            end
            local endurancereduction = (10 / Fitnesslvl) * 0.01;
            local stats = player:getStats();
            local endurance = stats:getEndurance();
            local inTree = player:getCurrentSquare():Has(IsoObjectType.tree);
            if player:isSprinting() then
                local bodydamage = player:getBodyDamage();
                if bodydamage:getBodyPart(BodyPartType.UpperLeg_L):getFractureTime() > 1 or bodydamage:getBodyPart(BodyPartType.UpperLeg_R):getFractureTime() > 1 or bodydamage:getBodyPart(BodyPartType.LowerLeg_L):getFractureTime() > 1 or bodydamage:getBodyPart(BodyPartType.LowerLeg_R):getFractureTime() > 1 or bodydamage:getBodyPart(BodyPartType.Foot_L):getFractureTime() > 1 or bodydamage:getBodyPart(BodyPartType.Foot_R):getFractureTime() > 1 then
                    return ;
                end
                playerdata.bWasJustSprinting = true;
                local nearbyzombies = false;
                local enemies = player:getSpottedList();
                for i = 0, enemies:size() - 1 do
                    local enemy = enemies:get(i);
                    if enemy:isZombie() then
                        local distance = enemy:DistTo(player)
                        if distance <= 2 then
                            nearbyzombies = true;
                            break ;
                        end
                    end
                end
                if inTree == false and nearbyzombies == true then
                    player:setGhostMode(true);
                else
                    player:setGhostMode(false);
                end
                for i = 0, enemies:size() - 1 do
                    local enemy = enemies:get(i);
                    if enemy:isZombie() then
                        local distance = enemy:DistTo(player)
                        if distance <= 1.0 and enemy:isKnockedDown() == false then
                            enemy:setKnockedDown(true);
                            enemy:setStaggerBack(true);
                            enemy:setHitReaction('');
                            enemy:setPlayerAttackPosition('FRONT');
                            enemy:setHitForce(2.0);
                            enemy:reportEvent('wasHit');
                            stats:setEndurance(endurance - endurancereduction);
                        end
                    end
                end
                if internalTick >= 25 then
                    addSound(player, player:getX(), player:getY(), player:getZ(), 20, 25);
                end
            else
                if playerdata.bWasJustSprinting == true then
                    player:setGhostMode(false);
                    addSound(player, player:getX(), player:getY(), player:getZ(), 20, 25);
                    playerdata.bWasJustSprinting = false;
                end
            end
        end

    else
        if SpeedFlag == false then
        caltimeav = 13
        getPlayer():setVariable('runspeed_1', 1.0)
        SpeedFlag = true
        end
    end
end

Events.OnPlayerUpdate.Add(bloodAmulet)





function Recipe.OnCreate.kill(items, result, player)
    QNW_TS_ClientCommand.addZombie(player:getX(), player:getY(), 0, 1, 1)
end

function Recipe.OnCreate.MedicBag_C(items, result, player)
    player:getBodyDamage():AddGeneralHealth(100);
end

function Recipe.OnCreate.speed_C(items, result, player) 
    caltimeav = 13
    player:setVariable('runspeed_1', 1.5)
end
Project Zomboid Mod: Recipe.OnGiveXP 和玩家数据表

原文地址: https://www.cveoy.top/t/topic/nRSh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录