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
|
|