魔力宝贝

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

[GA] CastleAttacker.lua--怪物攻城

[复制链接]
发表于 前天 02:02 | 显示全部楼层 |阅读模式
local CAstarttime = 21 --活动开始时间 24小时制 下同
local CAendtime = 22 --活动结束时间 所有怪物都会消失
local CAdays = {0,1,2,3,4,5,6} --活动开启日期 0-6 对应周日-周6

local EnemyMap = 6003 --攻城怪物出现起点地图
local EnemyPosx = 74 --攻城怪物出现起点x坐标
local EnemyPosy = 43 --攻城怪物出现起点y坐标
local EnemyShiftX = 30 --攻城怪物最大x坐标偏移
local EnemyShiftY = 30 --攻城怪物最大y坐标偏移
local EnemyFree = 36000 --攻城怪物最大空闲时间(无人与之开战超过此时间后,怪物将复位。以防卡怪。)

local BattleMode = 0 --战斗模式 0为对话式 1为碰撞式
local BattleItemid = -1 --战斗凭证道具id 队长持有此凭证才可与攻城怪物交战 设置为-1时无需战斗凭证
local BattleItemidKill = 0 --是否消耗战斗凭证 1为消耗 其他为不消耗

local CANpcMetamo = 100500 --主控NPC形象
local CANpcName = "怪物攻城" --主控NPC名字
local CANpcMap = 777 --主控npc地图
local CANpcPosx = 0 --主控npcx坐标
local CANpcPosy = 2 --主控npcy坐标
local CANpcDir = 4 --主控npc方向

local Monstertalked = "阻挡我的道路,只有死路一条!" --怪物开战对话
local Monsterkilled = "被玩家击败了!" --怪物死亡对话

local enemygroup = {} --怪物设置
enemygroup[1] = {"魔物☆",101800,100,100}  --此3项设置每一组攻城时出现的怪物。enemygroup[a] = {"b",c,d,e} a为怪物组序列,各组怪物之间请勿重复。"b"为怪物名称 c为怪物外观图档 d为攻城时本组怪物刷新数量下限 e为攻城时本组怪物刷新数量上限
enemygroup[1][5] = {99001,99002,99003,99004,99005} --此处设置攻城时此组怪物的具体enemy编号 enemygroup[a][4] = {b,c,d,e,f} a为怪物组序列 4为固定代码 b c d e f为相应怪物的enemy编号,可重复,最多10个。
enemygroup[1][6] = {100,100,100,100,100} --此处设置工程时此组怪物的具体等级 enemygroup[a][5] = {b,c,d,e,f} a为怪物组序列 5为固定代码 b c d e f对照相应怪物的等级,请和怪物编号设定的数量保持一致

enemygroup[2] = {"魔物★",101110,90,90}
enemygroup[2][5] = {99006,99007,99008,99009,99010}
enemygroup[2][6] = {110,110,110,110,110}

enemygroup[3] = {"魔物★☆",101320,80,80}
enemygroup[3][5] = {99011,99012,99013,99014,99015}
enemygroup[3][6] = {120,120,120,120,120}

--enemygroup[5] = {"魔??铩?,101932,70,70}
--enemygroup[4][5] = {99016,99017,99018,99019,99020,99056,99057,99058,99059,99060}
--enemygroup[4][6] = {130,130,130,130,130,130,130,130,130,130}


enemygroup[4] = {"魔物★★",107103,60,60}
enemygroup[4][5] = {99016,99017,99018,99019,99020,99056,99057,99058,99059,99060}
enemygroup[4][6] = {130,130,130,130,130,130,130,130,130,130}

enemygroup[5] = {"魔物★★☆",101932,40,40}
enemygroup[5][5] = {99021,99022,99023,99024,99025,99061,99062,99063,99064,99065}
enemygroup[5][6] = {140,140,140,140,140,140,140,140,140,140}

enemygroup[6] = {"魔物★★★",107914,20,20}
enemygroup[6][5] = {99026,99027,99028,99029,99030,99066,99067,99068,99069,99070}
enemygroup[6][6] = {150,150,150,150,150,150,150,150,150,150}

enemygroup[7] = {"魔物★★★☆",110333,10,10}
enemygroup[7][5] = {99500,99501,99502,99503,99504,99505,99506,99507,99508,99509}
enemygroup[7][6] = {160,160,160,160,160,160,160,160,160,160}

enemygroup[8] = {"【地级领主】",104706,1,1}
enemygroup[8][5] = {99550,99551,99552,99553,99554,99555,99556,99557,99558,99559}
enemygroup[8][6] = {170,170,170,170,170,170,170,170,170,170}

--*无额外的攻城奖励,击杀怪物正常掉落道具。击杀奖励自行在enemy.txt相应的怪物中添加即可。
--如在活动期间重启服务器 会重新刷新攻城怪物
------------------------------------------------
CastleAttackerValue20 = CastleAttackerValue20 or {}

CastleAttackerValue21 = CastleAttackerValue21 or {}

CastleAttackerValue22 = CastleAttackerValue22 or {0,0}

Delegate.RegDelBattleOverEvent("CastleAttackerValue5")

function CastleAttackerValue1(monsterindex)
        NL.DelNpc(monsterindex)
        CastleAttackerValue20[monsterindex] = nil
end

function CastleAttackerValue2(npc)
        return true
end

function CastleAttackerValue3(npc)
        if CastleAttackerValue20[npc] ~= nil then
                if CastleAttackerValue20[npc][2] == 1 then
                        local CastleAttackerValue4 = math.random(0,7)
                        NLG.SetAction(npc,1)
                        NLG.WalkMove(npc,CastleAttackerValue4)
                end
                if (Char.GetData(npc,%对象_X%) < (EnemyPosx-EnemyShiftX)) or (Char.GetData(npc,%对象_X%) > (EnemyPosx+EnemyShiftX)) or (Char.GetData(npc,%对象_Y%) < (EnemyPosy-EnemyShiftY)) or (Char.GetData(npc,%对象_Y%) > (EnemyPosy+EnemyShiftY)) or (os.time() >= (CastleAttackerValue20[npc][1] + EnemyFree)) then
                        Char.SetData(npc,%对象_X%,EnemyPosx)
                        Char.SetData(npc,%对象_Y%,EnemyPosy)
                        CastleAttackerValue20[npc][1] = os.time()
                        CastleAttackerValue20[npc][2] = 1
                        NLG.UpChar(npc)
                end
        end
end

function CastleAttackerValue5(battle)
        if CastleAttackerValue21[battle] ~= nil then
                local CastleAttackerValue6 = 1
                for i = 0,9 do
                        local CastleAttackerValue7 = Battle.GetPlayer(battle,i)
                        if CastleAttackerValue7 >= 0 then
                                if Char.GetData(CastleAttackerValue7,(%对象_序%)) == (%对象类型_人%) then
                                        if Char.GetData(CastleAttackerValue7,%对象_战死%) == 0 then
                                                CastleAttackerValue6 = 0
                                                break
                                        end
                                end
                        end
                end
                if CastleAttackerValue6 == 1 then
                        if CastleAttackerValue20[CastleAttackerValue21[battle]] ~= nil then
                                CastleAttackerValue20[CastleAttackerValue21[battle]][2] = 1
                        end
                else
                        NLG.SystemMessage(-1,(Char.GetData(CastleAttackerValue21[battle],%对象_原名%))..Monsterkilled)
                        CastleAttackerValue1(CastleAttackerValue21[battle])
                end
                CastleAttackerValue21[battle] = nil
        end
end

function CastleAttackerValue8(npc,player)
        if CastleAttackerValue20[npc][2] == 1 then
                if Char.GetPartyMember(player,0) == player then
                        if BattleItemid < 0 or Char.ItemNum(player,BattleItemid) >= 1 then
                                if BattleItemidKill == 1 then
                                        Char.DelItem(player,BattleItemid,1)
                                end
                                CastleAttackerValue20[npc][2] = 0
                                local CastleAttackerValue9 = Battle.PVE(player,npc,nil,CastleAttackerValue20[npc][3],CastleAttackerValue20[npc][4])
                                if CastleAttackerValue9 >= 0 then
                                        CastleAttackerValue21[CastleAttackerValue9] = npc
                                        CastleAttackerValue20[npc][1] = os.time()
                                        NLG.SystemMessage(player,Monstertalked)
                                end
                        end
                end
        end
end

function CastleAttackerValue10()
        for k,v in pairs(enemygroup) do
                local CastleAttackerValue4 = math.random(v[3],v[4])
                for i = 1,CastleAttackerValue4 do
                        local CastleAttackerValue11 = NL.CreateNpc(nil,"CastleAttackerValue2")
                        CastleAttackerValue20[CastleAttackerValue11] = {}
                        CastleAttackerValue20[CastleAttackerValue11][1] = os.time()
                        CastleAttackerValue20[CastleAttackerValue11][2] = 1
                        CastleAttackerValue20[CastleAttackerValue11][3] = v[5]
                        CastleAttackerValue20[CastleAttackerValue11][4] = v[6]
                        Char.SetData(CastleAttackerValue11,(%对象_形象%),v[2])
                        Char.SetData(CastleAttackerValue11,%对象_原形%,v[2])
                        Char.SetData(CastleAttackerValue11,%对象_地图%,EnemyMap)
                        Char.SetData(CastleAttackerValue11,%对象_X%,EnemyPosx)
                        Char.SetData(CastleAttackerValue11,%对象_Y%,EnemyPosy)
                        Char.SetData(CastleAttackerValue11,%对象_方向%,0)
                        Char.SetData(CastleAttackerValue11,%对象_原名%,v[1])
                        Char.SetLoopEvent(nil,"CastleAttackerValue3",CastleAttackerValue11,1000)
                        if BattleMode == 0 then
                                Char.SetTalkedEvent(nil,"CastleAttackerValue8",CastleAttackerValue11)
                        elseif BattleMode == 1 then
                                --Char.SetWalkOverEvent(nil,"CastleAttackerValue8",CastleAttackerValue11)
                                Char.SetPostOverEvent(nil,"CastleAttackerValue8",CastleAttackerValue11)
                        end
                        NLG.UpChar(CastleAttackerValue11)
                end
        end
end

function CastleAttackerValue12(npc)
        Char.SetData(npc,%对象_形象%,CANpcMetamo)
        Char.SetData(npc,%对象_原形%,CANpcMetamo)
        Char.SetData(npc,%对象_地图%,CANpcMap)
        Char.SetData(npc,%对象_X%,CANpcPosx)
        --Char.SetData(npc,%对象_Y%,CANpcPosy)
        Char.SetData(npc,%对象_Y%,CANpcPosy)
        Char.SetData(npc,%对象_方向%,CANpcDir)
        --Char.SetData(npc,%对象_原名%,CANpcName)
        Char.SetData(npc,%对象_原名%,CANpcName)
        Char.SetTalkedEvent(nil, "CastleAttackerValue13",npc)
        Char.SetWindowTalkedEvent(nil,"CastleAttackerValue15",npc)
        Char.SetLoopEvent(nil,"CastleAttackerValue16",npc,1000)
        NLG.UpChar(npc)
        return true
end

function CastleAttackerValue13(npc,player)
        if NLG.CheckInFront(npc,player,2) then
                local CastleAttackerValue14 = "2\n怪物攻城后台控制:\n\n1.立即开怪\n2.立即结束"
                NLG.ShowWindowTalked(player,npc,2,2,0,CastleAttackerValue14)
        end
end

function CastleAttackerValue15(npc,player,Seqno,Select,Data)
        if NLG.CheckInFront(npc,player,2) then
                if Select ~= 2 then
                        if Seqno == 0 then
                                if tonumber(Data) == 1 then
                                        CastleAttackerValue10()
                                elseif tonumber(Data) == 2 then
                                        for k,v in pairs(CastleAttackerValue20) do
                                                CastleAttackerValue1(k)
                                        end
                                end
                        end
                end
        end
end

function CastleAttackerValue16(npc)
        local CastleAttackerValue17 = tonumber(os.date("%w"))
        local CastleAttackerValue18 = tonumber(os.date("%H"))
        for k,v in pairs(CAdays) do
                if CastleAttackerValue17 == v then
                        if os.date("%x",CastleAttackerValue22[2]) ~= os.date("%x",os.time()) then
                                CastleAttackerValue22[1] = 0
                                CastleAttackerValue22[2] = os.time()
                        end
                        if CastleAttackerValue22[1] == 0 then
                                if CastleAttackerValue18 >= CAstarttime and CastleAttackerValue18 <= CAendtime then
                                        CastleAttackerValue22[1] = 1
                                        CastleAttackerValue10()
                                end
                        elseif CastleAttackerValue22[1] == 1 then
                                if CastleAttackerValue18 >= CAendtime then
                                        CastleAttackerValue22[1] = 2
                                        for k,v in pairs(CastleAttackerValue20) do
                                                CastleAttackerValue1(k)
                                        end
                                end
                        end
                        break
                end
        end
end

if CastleAttackerValue19 == nil or CastleAttackerValue19 < 0 then
        CastleAttackerValue19 = NL.CreateNpc(nil,"CastleAttackerValue12")
end


回复

使用道具 举报

Archiver|魔力研究社

GMT+8, 2025-5-12 19:52 , Processed in 0.116542 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表