Update - 1.7.0.89

EN: 1.7.0.89
CN: 1.7.0.91
JP: 1.7.0.92
KR: 1.7.0.95
This commit is contained in:
SL1900
2026-02-28 15:00:00 +09:00
parent 86d82306fe
commit e01012cbcc
92 changed files with 1562 additions and 936 deletions
@@ -38,6 +38,7 @@ function JointDrillLevelData_2:Init(parent, nLevelId, nBuildId, nCurLevel, nLeve
self.mapFloor = nil
self.nGameTime = self.parent:GetGameTime()
self.bInResult = false
self.bAllBossDead = false
self.bChangeLevel = self.nLevelType == AllEnum.JointDrillLevelStartType.ChangeLevel
self.bRestart = self.nLevelType == AllEnum.JointDrillLevelStartType.Restart
if not self.bChangeLevel then
@@ -333,6 +334,10 @@ function JointDrillLevelData_2:OnEvent_BossDeath(nBattleLv, nTotalTime, nDamageV
if nBattleLv < self.nCurLevel then
return
end
if nBattleLv == nParam then
self.bAllBossDead = true
return
end
local nLastLevel = self.nCurLevel
nTotalTime = math.min(self.mapLevel.BattleTime * 1000, self:GetSyncGameTime(nTotalTime))
self.nCurLevel = nParam
@@ -362,6 +367,9 @@ function JointDrillLevelData_2:OnEvent_BossDeath(nBattleLv, nTotalTime, nDamageV
})
end
function JointDrillLevelData_2:OnEvent_BattleLvsToggle()
if self.bInResult or self.bAllBossDead or self.bChangeLevel then
return
end
self.bChangeLevel = true
self.bRestart = false
AdventureModuleHelper.LevelStateChanged(false)
@@ -212,7 +212,7 @@ function ThrowGiftLevelSelectCtrl:RefreshLevelInfoGrid()
local bPass = self.mapRecordLevelData[nLevelId] ~= nil and self.mapRecordLevelData[nLevelId].FirstComplete or false
local bShowRedDot = false
if self.actData ~= nil then
self.actData:GetLevelNewState(nLevelId)
bShowRedDot = self.actData:GetLevelNewState(nLevelId)
if bShowRedDot then
self.actData:SetLevelNew(nLevelId)
end
@@ -213,9 +213,9 @@ function SpringFestivalThemeCtrl:OnDisable()
TimerManager.Remove(self.taskRemainTimer)
self.taskRemainTimer = nil
end
if nil ~= self.eatingAnimationTimer then
TimerManager.Remove(self.eatingAnimationTimer)
self.eatingAnimationTimer = nil
if nil ~= self.updateTimer then
self.updateTimer:Cancel()
self.updateTimer = nil
end
end
function SpringFestivalThemeCtrl:RefreshPanel()
@@ -595,30 +595,51 @@ function SpringFestivalThemeCtrl:StartEatingAnimation()
self._mapNode.Eat_01:SetActive(false)
self._mapNode.Eat_02:SetActive(false)
self._mapNode.Eat_03:SetActive(false)
self:PlayRandomEatingAnimation()
self.eatingAnimationTimer = self:AddTimer(0, 4, function()
self:PlayRandomEatingAnimation()
end, true, true, false)
self.nEatingElapsed = 0
self.nEatingDelay = 0
self.nEatShowElapsed = nil
self.selectedEat = nil
if self.updateTimer ~= nil then
self.updateTimer:Cancel()
self.updateTimer = nil
end
self.updateTimer = self:AddTimer(0, 0, "OnUpdate", true, true, true)
end
function SpringFestivalThemeCtrl:PlayRandomEatingAnimation()
self._mapNode.Eat_01:SetActive(false)
self._mapNode.Eat_02:SetActive(false)
self._mapNode.Eat_03:SetActive(false)
local randomValue = math.random(1, 100)
local selectedEat
if randomValue <= 50 then
selectedEat = self._mapNode.Eat_03
self.selectedEat = self._mapNode.Eat_03
elseif randomValue <= 85 then
selectedEat = self._mapNode.Eat_02
self.selectedEat = self._mapNode.Eat_02
else
selectedEat = self._mapNode.Eat_01
self.selectedEat = self._mapNode.Eat_01
end
self._mapNode.Chensha_Expression_02:SetActive(selectedEat ~= self._mapNode.Eat_01)
self._mapNode.Chensha_Expression_01:SetActive(selectedEat == self._mapNode.Eat_01)
if selectedEat then
self:AddTimer(1, 0.13, function()
selectedEat:SetActive(true)
end, true, true, true)
self._mapNode.Chensha_Expression_02:SetActive(self.selectedEat ~= self._mapNode.Eat_01)
self._mapNode.Chensha_Expression_01:SetActive(self.selectedEat == self._mapNode.Eat_01)
self.nEatShowElapsed = 0
end
function SpringFestivalThemeCtrl:OnUpdate()
if self.updateTimer == nil then
return
end
local nDeltaTime = self.updateTimer:GetDelTime()
if self.nEatShowElapsed ~= nil then
self.nEatShowElapsed = self.nEatShowElapsed + nDeltaTime
if self.nEatShowElapsed >= 0.13 then
if self.selectedEat ~= nil then
self.selectedEat:SetActive(true)
end
self.nEatShowElapsed = nil
end
end
self.nEatingElapsed = self.nEatingElapsed + nDeltaTime
if self.nEatingElapsed >= self.nEatingDelay then
self.nEatingElapsed = 0
self.nEatingDelay = 4
self:PlayRandomEatingAnimation()
end
end
return SpringFestivalThemeCtrl
+1 -1
View File
@@ -5862,7 +5862,7 @@ return {
param = {
0,
"avg1_112",
"魔<r=mowang></r>王大人这么厉害,恶灵什么的伤不到的啦!",
"魔<r=mowang></r>王大人这么厉害,恶灵什么的伤不到==SEX1==的啦!",
0,
"",
false,
+3 -3
View File
@@ -1374,7 +1374,7 @@ return {
cmd = "SetPhoneMsgChoiceBegin",
param = {
"1",
"什么什么,两个人之间小秘密?",
"什么什么,两个人之间小秘密?",
"我保证!",
"",
"",
@@ -1392,7 +1392,7 @@ return {
param = {
1,
"avg3_100",
"什么什么,两个人之间小秘密?",
"什么什么,两个人之间小秘密?",
"0",
"",
false,
@@ -1520,7 +1520,7 @@ return {
param = {
1,
"avg3_100",
"你在哪,我这就喊上尘沙琥珀一起过去。",
"你在哪,我这就喊上尘沙琥珀一起过去。",
"0",
"",
false,
+1 -1
View File
@@ -1674,7 +1674,7 @@ return {
param = {
0,
"avg1_132",
"影中的各方的形象都比现实强太多了,但片子还挺精彩",
"中的各方的形象都比现实强太多了,但片子还挺精彩",
"0",
"",
false,
+1 -1
View File
@@ -376,7 +376,7 @@ return {
param = {
"1",
"那我要过去一探究竟咯?",
"那我要给你打电话咯?",
"那我要打你手机咯?",
"",
"",
"",
+2 -2
View File
@@ -2019,7 +2019,7 @@ return {
param = {
0,
"avg1_135",
"如果报道这么写——“新型诈骗集团落网,联合种业助力菲莱安全”,那对公司来说不也扬名了吗?",
"如果报道这么写——“新型诈骗集团落网,恩赐意志助力菲莱安全”,那对公司来说不也扬名了吗?",
0,
"",
false,
@@ -2051,7 +2051,7 @@ return {
param = {
1,
"avg3_100",
"算盘打得不错嘛……不管结果如何,对联合种业都有好处。",
"算盘打得不错嘛……不管结果如何,对恩赐意志都有好处。",
1,
"",
false,
+1 -1
View File
@@ -6107,7 +6107,7 @@ return {
"",
false,
"",
"”。",
"",
""
}
},
+7 -3
View File
@@ -10557,7 +10557,7 @@ return {
"music_avg_volume100_3s",
0,
"m13",
"1000ms",
"2000ms",
0.0,
false
}
@@ -10739,6 +10739,10 @@ return {
nil
}
},
{
cmd = "Wait",
param = {0.6}
},
{
cmd = "SetTrans",
param = {
@@ -10748,8 +10752,8 @@ return {
"Linear",
false,
false,
0.1,
true,
0.5,
false,
"default"
}
},
+1 -1
View File
@@ -1484,7 +1484,7 @@ return {
cmd = "SetTalk",
param = {
0,
"Anxious Server",
"Hasty Server",
"",
0,
"",
+1 -1
View File
@@ -1927,7 +1927,7 @@ return {
"",
false,
"",
"The movie portrayals of each side are way more impressive than their counterparts in reality, but it makes for a very exciting film",
"The Stella Drama portrayals of each side are way more impressive than their counterparts in reality, but it makes for a very exciting Drama",
""
}
},
+2 -2
View File
@@ -4,8 +4,8 @@ return {
param = {
"ep_mainline_001",
"Act One",
"Slipped into Sunlight (Part I)",
"Dona, who has always championed teamwork, has been avoiding everyone lately and acting on her own. Could it be that the Post Haste is facing a crisis too dangerous to speak of?!",
"Slipping into Sunlight (Part I)",
"Donna, who has always championed teamwork, has been avoiding everyone lately and acting on her own. Could it be that the Post Haste is facing a crisis too dangerous to speak of?!",
0
}
},
+1 -1
View File
@@ -4,7 +4,7 @@ return {
param = {
"ep_mainline_001",
"Act Three",
"Slipped into Sunlight (Part III)",
"Slipping into Sunlight (Part III)",
"Post Haste is a whole—whether joy or toil, it only gains meaning when shared together.",
0
}
+7 -7
View File
@@ -4407,7 +4407,7 @@ return {
"",
false,
"",
"Boss, rumor has it Arbiter food is spelled. Eat it and you end up spilling your guts. That's how they interrogate people!",
"Boss… Don't eat Arbiter food.",
""
}
},
@@ -4420,8 +4420,8 @@ return {
param = {
1,
0,
"025",
"none",
"007",
"avg_emoji_symbol",
"none",
"z",
0.0,
@@ -4439,7 +4439,7 @@ return {
"",
false,
"",
"What's the play? She's offering it right to my face. If I refuse, is she gonna turn hostile?",
"Eh? I-Is it dangerous?!",
""
}
},
@@ -4496,7 +4496,7 @@ return {
"",
false,
"",
"If it comes to that... We will buy you time to escape.",
"I will protect you.",
""
}
},
@@ -4528,7 +4528,7 @@ return {
"",
false,
"",
"Too dangerous. Wait,==W== she doesn't know I'm immune to magic. I'll take the first bite.",
"That's not good...==W== Wait, she doesn't know I'm immune to magic. I'll take the first bite.",
""
}
},
@@ -11638,7 +11638,7 @@ return {
"",
false,
"",
"Always charging the front line... Another good boy. Heresy Score: zero.",
"Always charging the front line... Another good kid. Heresy Score: zero.",
""
}
},
+8 -4
View File
@@ -3879,7 +3879,7 @@ return {
"",
false,
"",
"A Stellaroid?! Does that mean the Trekker who called us is already...",
"Stellaroids?! Does that mean the Trekker who called us is already...",
""
}
},
@@ -10557,7 +10557,7 @@ return {
"music_avg_volume100_3s",
0,
"m13",
"1000ms",
"2000ms",
0.0,
false
}
@@ -10739,6 +10739,10 @@ return {
nil
}
},
{
cmd = "Wait",
param = {0.6}
},
{
cmd = "SetTrans",
param = {
@@ -10748,8 +10752,8 @@ return {
"Linear",
false,
false,
0.1,
true,
0.5,
false,
"default"
}
},
+1 -1
View File
@@ -7363,7 +7363,7 @@ return {
false,
"",
"魔王さんのおかげで、いい買い物ができたよ。==RT==あらためて、今日はありがとう。",
"魔王くんのおかげで、いい買い物ができたよ。==RT==あらめて、今日はありがとう。"
"魔王くんのおかげで、いい買い物ができたよ。==RT==あらめて、今日はありがとう。"
}
},
{
+1 -1
View File
@@ -10773,7 +10773,7 @@ return {
"Linear",
false,
false,
0.1,
0.5,
true,
"default"
}
+51 -11
View File
@@ -3221,10 +3221,10 @@ return {
cmd = "SetBg",
param = {
0,
"traveller_camp_a_daylight",
"BG_Black",
"0",
"Linear",
1.0,
0.5,
true,
"default",
0
@@ -3244,6 +3244,46 @@ return {
"default"
}
},
{
cmd = "SetAudio",
param = {
0,
"se_055",
0.0,
false
}
},
{
cmd = "SetTalk",
param = {
8,
"0",
"",
0,
"",
false,
"",
"몇 분 전",
""
}
},
{
cmd = "Wait",
param = {1.0}
},
{
cmd = "SetBg",
param = {
0,
"traveller_camp_a_daylight",
"16",
"Linear",
1.0,
true,
"AvgStageEffect_clockwise",
0
}
},
{
cmd = "SetAudio",
param = {
@@ -3480,7 +3520,7 @@ return {
cmd = "SetTalk",
param = {
0,
"기념품 노점상",
"",
"",
0,
"",
@@ -3880,7 +3920,7 @@ return {
cmd = "SetTalk",
param = {
0,
"기념품 노점상",
"",
"",
0,
"",
@@ -4282,7 +4322,7 @@ return {
cmd = "SetTalk",
param = {
0,
"기념품 노점상",
"",
"",
0,
"",
@@ -4718,7 +4758,7 @@ return {
cmd = "SetTalk",
param = {
0,
"기념품 노점상",
"",
"",
0,
"",
@@ -4980,7 +5020,7 @@ return {
"",
false,
"",
"정말 화낼 거예요?",
"정말 화낸다?",
""
}
},
@@ -5017,7 +5057,7 @@ return {
cmd = "SetTalk",
param = {
0,
"기념품 노점상",
"",
"",
0,
"",
@@ -5867,7 +5907,7 @@ return {
cmd = "SetTalk",
param = {
0,
"당황한 여행가",
"불안한 여행가",
"",
0,
"",
@@ -5957,7 +5997,7 @@ return {
cmd = "SetTalk",
param = {
0,
"불안한 여행가",
"당황한 여행가",
"",
0,
"",
@@ -6000,7 +6040,7 @@ return {
cmd = "SetTalk",
param = {
0,
"당황한 여행가",
"",
"",
0,
"",
+2 -2
View File
@@ -2272,7 +2272,7 @@ return {
"",
false,
"",
"네가 늘 쓰는 그 총검 역시 같은 이유야?",
"네가 늘 쓰는 그 건블레이드 역시 같은 이유야?",
""
}
},
@@ -2388,7 +2388,7 @@ return {
"",
false,
"",
"기억도 무기처럼 아서 희미해지는 걸까",
"기억도 무기처럼 아서 희미해지는 걸까",
""
}
},
+1 -1
View File
@@ -5949,7 +5949,7 @@ return {
"",
false,
"",
"그, 그렇구나……==W== 나는 다들 든든하고 맛있게 먹을 수만 있다면, 어떤 방식이든 상관없다고 생각하는데……",
"그, 그렇구나……==W== 내 소원은 모두가 배불리 먹을 수 있는 것만으로도 충분하지만, 만약 재료가 더 신선하다면, 모두가 더 행복해질 거야……",
""
}
},
+1 -1
View File
@@ -2965,7 +2965,7 @@ return {
"",
false,
"",
"아…… 괜찮아. 지금 우리 요로즈 택배는 인수합병이 필요하지 않아!",
"아…… 괜찮아. 지금 우리 요로즈 택배는 인수 합병이 필요하지 않아!",
""
}
},
+4 -4
View File
@@ -1106,7 +1106,7 @@ return {
"",
false,
"",
"짜잔! 방금 쿠키 구웠어! 먹을래!",
"짜잔! 방금 쿠키 구웠어! 먹을래?",
""
}
},
@@ -1623,7 +1623,7 @@ return {
"",
false,
"",
"명이서 탈 수 있는 교통수단……==W== 그런 게 있어요?",
"3명이서 탈 수 있는 교통수단……==W== 그런 게 있어요?",
""
}
},
@@ -1696,7 +1696,7 @@ return {
"",
false,
"",
"하하, 있어! 전에 편지 배달하면서 1대 본 적 있어!",
"하하, 있어! 전에 편지 배달하면서 대 본 적 있어!",
""
}
},
@@ -5978,7 +5978,7 @@ return {
"",
false,
"",
"이름하여…… ‘토나의 깜짝선물’! 정말 완벽해~ 역시 나는 최고야~",
"이름하여…… ‘토나의 깜짝 선물’! 정말 완벽해~ 역시 나는 최고야~",
""
}
},
+3 -3
View File
@@ -849,7 +849,7 @@ return {
"",
false,
"",
"아이고, 토나야 오늘은 왜 이렇게 일찍……",
"아이고, 토나야, 오늘은 왜 이렇게 일찍……",
""
}
},
@@ -4812,7 +4812,7 @@ return {
"",
false,
"",
"말도 안 되는 소리! 내가 너희에게 얼마나 많은 도움을 받고 있는데!==W== 나는 그냥 너희에게 깜짝선물을 해주고 싶었을…… 뿐이야.",
"말도 안 되는 소리! 내가 너희에게 얼마나 많은 도움을 받고 있는데!==W== 나는 그냥 너희에게 깜짝 선물을 해주고 싶었을…… 뿐이야.",
""
}
},
@@ -7963,7 +7963,7 @@ return {
"",
false,
"",
"앗 내가 잘못했어!!",
", 내가 잘못했어!!",
""
}
},
+1 -1
View File
@@ -8496,7 +8496,7 @@ return {
"",
false,
"",
"그런데 최근 들어 갑자기 활발하게 곳곳을 조사하기 시작했고, 아모르 주변에서 실종 사건이 발생했. 최근 2주 사이에 여행가 팀 4~5개가 황야에서 사라졌고",
"그런데 최근 들어 갑자기 활발하게 곳곳을 조사하기 시작했고, 아모르 주변에서 실종 사건이 발생했. 최근 2주 사이에 여행가 팀 4~5개가 황야에서 사라졌고",
""
}
},
+6 -6
View File
@@ -5,7 +5,7 @@ return {
"ep_mainline_001",
"02",
"눈동자에 비친 서로의 모습",
"의뢰를 진행하면서 당신은 그레이에 대 새로운 사실을 알게 되었지만, 그녀는 당신 마왕이라는 사실을 더욱 의심하게 된다. 바로 그때, 당신들에게 구조 신호가 도착하는데……",
"의뢰를 진행하면서 그레이에 대 새로운 사실을 알게 되었지만, 그녀는 당신 마왕 신분을 더욱 의심하게 된다. 바로 그때, 구조 신호가 도착하는데……",
0
}
},
@@ -4407,7 +4407,7 @@ return {
"",
false,
"",
"보스…… 심판관이 주는 음식은 먹지 마.",
"보스, 심판관이 주는 음식은…… 먹지 마.",
""
}
},
@@ -4439,7 +4439,7 @@ return {
"",
false,
"",
"어, 위험한 거야?!",
"왜? 위험한 거야?",
""
}
},
@@ -4496,7 +4496,7 @@ return {
"",
false,
"",
"아무튼…… 보스를 지켜줄 거야.",
"어쨌든…… 내가 보스를 보호해 줄게.",
""
}
},
@@ -4528,7 +4528,7 @@ return {
"",
false,
"",
"그건 너무 위험해. ==W==아, 맞다. 그레이는 내가 ‘마력 차단’ 체질인 걸 모르니까, 내가 먼저 먹어볼게.",
"그건 너무 위험해. 아, 맞다. ==W==그레이는 내가 ‘마력 차단’ 체질인 걸 모르니까, 내가 먼저 먹어볼게.",
""
}
},
@@ -10454,7 +10454,7 @@ return {
"",
false,
"",
"여행가에게 성해 처리 의뢰를 맡긴 게 규정을 지키기 위해서였다니…… 그리고 우리를 계속 쳐다본 건 말할 타이밍을 찾 거구나.==W== 그렇다면…… 우리가 쓸데없는 상상을 했네.",
"여행가에게 성해 처리 의뢰를 맡긴 게 규정을 지키기 위해서였다니…… 그리고 우리를 계속 쳐다본 건 말할 타이밍을 찾구나.==W== 그렇다면…… 우리가 쓸데없는 상상을 했네.",
""
}
},
+10 -6
View File
@@ -2486,7 +2486,7 @@ return {
"",
false,
"",
"점수가 오를 걸 겁내면서도 동료들을 변호하다니. 전설 속의 마왕님도 의리 있고, 난관에 정면 맞서는 인물이었어. 그래서 10점 추가.",
"점수가 오를 걸 겁내면서도 동료들을 변호하다니. 전설 속의 마왕님도 의리 있고, 난관에 정면으로 맞서는 인물이었어. 그래서 10점 추가.",
""
}
},
@@ -10557,7 +10557,7 @@ return {
"music_avg_volume100_3s",
0,
"m13",
"1000ms",
"2000ms",
0.0,
false
}
@@ -10739,6 +10739,10 @@ return {
nil
}
},
{
cmd = "Wait",
param = {0.6}
},
{
cmd = "SetTrans",
param = {
@@ -10748,8 +10752,8 @@ return {
"Linear",
false,
false,
0.1,
true,
0.5,
false,
"default"
}
},
@@ -11364,7 +11368,7 @@ return {
"",
false,
"",
"그건 내가 특수한 ‘마력 차단’ 체질이라……소환된 마법 속박 도구가 나한테 통하지 않는 거야.",
"그건 내가 특수한 ‘마력 차단’ 체질이라…… 소환된 마법 속박 도구가 나한테 통하지 않는 거야.",
""
}
},
@@ -11672,7 +11676,7 @@ return {
"",
false,
"",
"하나 더 좋은 거 알려줄까? 내 목에 걸린 이거는 ‘교수형 올가미’ 같은 게 아니라, 성물인 ‘영혼의 밧줄’이지.",
"하나 더 좋은 거 알려줄까? 내 목에 걸린 이거는 ‘교수형 올가미’ 같은 게 아니라, 성물인 ‘소울 칼라’지.",
""
}
},
+13 -13
View File
@@ -1644,7 +1644,7 @@ return {
"",
false,
"",
"그레이, 다른 사람을 돕고 싶은 네 마음은 잘 알겠어. 하지만…… 은혜의 신의…… 은혜는 은혜의지만 줄 수 있는 거야.",
"그레이, 다른 사람을 돕고 싶은 네 마음은 잘 알겠어. 하지만…… 은혜의 신의 은혜는 은혜의지만 줄 수 있는 거야.",
""
}
},
@@ -5461,7 +5461,7 @@ return {
"",
false,
"",
"왜…… 당신에게는 영혼의 밧줄이 안 통하는 거지?",
"왜…… 당신에게는 소울 칼라가 안 통하는 거지?",
""
}
},
@@ -6420,7 +6420,7 @@ return {
"",
false,
"",
"감히…… 신성한 영혼의 밧줄’에 손을 대다니!",
"감히…… 신성한 소울 칼라’에 손을 대다니!",
""
}
},
@@ -6850,7 +6850,7 @@ return {
"",
false,
"",
"마력이 모두 빠져나간다니…… 설마 내가 ‘영혼의 밧줄’에 직접 닿아 있어서 그런 건가?",
"마력이 모두 빠져나간다니…… 설마 내가 ‘소울 칼라’에 직접 닿아 있어서 그런 건가?",
""
}
},
@@ -6882,7 +6882,7 @@ return {
"",
false,
"",
"나는 마력 차단 체질이라, 영혼의 밧줄’ 효과가 없어. 하지만 밧줄은 나한테 계속해서 마법을 걸려고 할 테니, 그레이의 마력이 계속해서 소모되고 있는 거야.",
"나는 마력 차단 체질이라, 소울 칼라’는 내게 통하지 않아. 하지만 밧줄은 나한테 계속해서 마법을 걸려고 할 테니, 그레이의 마력이 계속해서 소모되고 있는 거야.",
""
}
},
@@ -10350,7 +10350,7 @@ return {
"",
false,
"",
"좋아. 마왕님에 대해 묻고 싶은 거?",
"좋아. 마왕님에 대해 묻고 싶은 거?",
""
}
},
@@ -10393,7 +10393,7 @@ return {
"",
false,
"",
"그전에, 영혼의 밧줄’을 왜 사용했는지, 왜 그렇게 많이 사용했는지 먼저 설명해.",
"그전에, 소울 칼라’를 왜 사용했는지, 왜 그렇게 많이 사용했는지 먼저 설명해.",
""
}
},
@@ -10436,7 +10436,7 @@ return {
"",
false,
"",
"별의 탑에 성해가 너무 많았어. 영혼의 밧줄’을 사용해야 가장 빠르게 해치울 수 있었거든.",
"별의 탑에 성해가 너무 많았어. 소울 칼라’를 사용해야 가장 빠르게 해치울 수 있었거든.",
""
}
},
@@ -10479,7 +10479,7 @@ return {
"",
false,
"",
"어차피 성해는 영혼도 없고, 감정과 욕망의 파편이 합쳐진 혼돈일 뿐이잖아. 이걸 쓴 게 규정 위반은 아니?",
"어차피 성해는 영혼도 없고, 감정과 욕망의 파편이 합쳐진 혼돈일 뿐이잖아. 이걸 쓴 게 규정 위반은 아니?",
""
}
},
@@ -10676,7 +10676,7 @@ return {
"",
false,
"",
"그 사람은 이단 점수가 부족해. 이단이 아니라 그냥 운 좋게 은혜 인장을 얻고 ‘마력 차단’ 체질까지 가진 불쌍한 사람이. 그런 사람이 무슨 마왕이겠어?",
"그 사람은 이단 점수가 부족해. 이단이 아니라 그냥 운 좋게 은혜 인장을 얻고 ‘마력 차단’ 체질까지 가진 불쌍한 사람이. 그런 사람이 무슨 마왕이겠어?",
""
}
},
@@ -10762,7 +10762,7 @@ return {
"",
false,
"",
"마음대로 하시죠.",
"마음대로 .",
""
}
},
@@ -10866,7 +10866,7 @@ return {
"",
false,
"",
"잊지 마. 앞으로 내 명령 없이는 ‘영혼의 밧줄’을 사용해서는 안 돼!",
"잊지 마. 앞으로 내 명령 없이는 ‘소울 칼라’를 사용해서는 안 돼!",
""
}
},
@@ -11078,7 +11078,7 @@ return {
"",
false,
"",
"흥, 참견은…… 이 ‘성물’을 다룰 수 있는 건 나뿐이야. 어떻게 사용할지는 내가 정할 거야.",
"흥, 참견은…… 이 ‘성물’을 다룰 수 있는 건 나뿐이야. 어떻게 사용할지는 내가 정.",
""
}
},
+1 -1
View File
@@ -58,7 +58,7 @@ end
function JointDrillBattlePanel:OnEnable()
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
EventManager.Hit(EventId.OpenPanel, PanelId.Hud)
EventManager.Hit(EventId.OpenPanel, PanelId.Hud, self.nType)
EventManager.Hit(EventId.ClosePanel, PanelId.MainlineFormation)
EventManager.Hit(EventId.ClosePanel, PanelId.RegionBossFormation)
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
+41 -151
View File
@@ -920,41 +920,6 @@ function DispatchCtrl:can_meet_requirements(role_tags, requirements)
end
return true
end
function DispatchCtrl:calculate_role_score(role_tags, normal_req, extra_req)
local score = 0
local tag_count = {}
for _, tag in ipairs(role_tags) do
tag_count[tag] = (tag_count[tag] or 0) + 1
end
for _, req in ipairs(normal_req) do
if tag_count[req] and 0 < tag_count[req] then
score = score + 10
tag_count[req] = tag_count[req] - 1
end
end
for _, req in ipairs(extra_req) do
if tag_count[req] and 0 < tag_count[req] then
score = score + 3
tag_count[req] = tag_count[req] - 1
end
end
return score
end
function DispatchCtrl:count_remaining_requirements(selected_tags, requirements)
local tag_count = {}
for _, tag in ipairs(selected_tags) do
tag_count[tag] = (tag_count[tag] or 0) + 1
end
local remaining = {}
for _, req in ipairs(requirements) do
if not tag_count[req] or tag_count[req] <= 0 then
table.insert(remaining, req)
else
tag_count[req] = tag_count[req] - 1
end
end
return remaining
end
function DispatchCtrl:concat_tags(selected_roles)
local combined_tags = {}
for _, role in ipairs(selected_roles) do
@@ -964,136 +929,61 @@ function DispatchCtrl:concat_tags(selected_roles)
end
return combined_tags
end
function DispatchCtrl:enumerate_combinations(roles, count, callback)
local n = #roles
if count > n then
return nil
end
local indices = {}
for i = 1, count do
indices[i] = i
end
while true do
local combo = {}
for i = 1, count do
combo[i] = roles[indices[i]]
end
if callback(combo) then
return combo
end
local pos = count
while 1 <= pos and indices[pos] == n - count + pos do
pos = pos - 1
end
if pos < 1 then
break
end
indices[pos] = indices[pos] + 1
for i = pos + 1, count do
indices[i] = indices[i - 1] + 1
end
end
return nil
end
function DispatchCtrl:find_min_roles_greedy(roles, normal_req, extra_req)
if #roles == 0 then
return nil
end
for target_count = 1, 3 do
local result = self:greedy_select_roles_with_limit(roles, normal_req, extra_req, true, target_count)
for count = 1, 3 do
local result = self:enumerate_combinations(roles, count, function(combo)
local tags = self:concat_tags(combo)
return self:can_meet_requirements(tags, normal_req) and self:can_meet_requirements(tags, extra_req)
end)
if result then
return result
end
end
for target_count = 1, 3 do
local result = self:greedy_select_roles_with_limit(roles, normal_req, {}, false, target_count)
for count = 1, 3 do
local result = self:enumerate_combinations(roles, count, function(combo)
local tags = self:concat_tags(combo)
return self:can_meet_requirements(tags, normal_req)
end)
if result then
return result
end
end
return nil
end
function DispatchCtrl:greedy_select_roles_with_limit(roles, normal_req, extra_req, check_both, max_count)
if #normal_req == 0 and #extra_req == 0 then
return {}
end
local scored_roles = {}
for _, role in ipairs(roles) do
local score = self:calculate_role_score(role.tags, normal_req, extra_req)
if 0 < score then
table.insert(scored_roles, {role = role, score = score})
end
end
if #scored_roles == 0 then
return nil
end
table.sort(scored_roles, function(a, b)
return a.score > b.score
end)
return self:try_combinations_greedy(scored_roles, normal_req, extra_req, check_both, max_count)
end
function DispatchCtrl:try_combinations_greedy(scored_roles, normal_req, extra_req, check_both, target_count)
local max_attempts = math.min(100, #scored_roles * target_count)
local attempt_count = 0
local selected = {}
local selected_tags = {}
for _, scored_role in ipairs(scored_roles) do
if target_count <= #selected then
break
end
attempt_count = attempt_count + 1
if max_attempts < attempt_count then
break
end
local remaining_normal = self:count_remaining_requirements(selected_tags, normal_req)
local remaining_extra = self:count_remaining_requirements(selected_tags, extra_req)
if #remaining_normal == 0 and #remaining_extra == 0 then
break
end
local can_help = DispatchCtrl.role_can_help(scored_role.role.tags, remaining_normal, remaining_extra)
if can_help then
table.insert(selected, scored_role.role)
for _, tag in ipairs(scored_role.role.tags) do
table.insert(selected_tags, tag)
end
end
end
if #selected == target_count then
if check_both then
if self:can_meet_requirements(selected_tags, normal_req) and self:can_meet_requirements(selected_tags, extra_req) then
return selected
end
elseif self:can_meet_requirements(selected_tags, normal_req) then
return selected
end
end
if target_count <= 2 and target_count <= #scored_roles then
for start_idx = 1, math.min(5, #scored_roles - target_count + 1) do
attempt_count = attempt_count + 1
if max_attempts < attempt_count then
break
end
local test_selected = {}
local test_tags = {}
table.insert(test_selected, scored_roles[start_idx].role)
for _, tag in ipairs(scored_roles[start_idx].role.tags) do
table.insert(test_tags, tag)
end
for i = 1, #scored_roles do
if target_count <= #test_selected then
break
end
if i ~= start_idx then
local remaining_normal = self:count_remaining_requirements(test_tags, normal_req)
local remaining_extra = self:count_remaining_requirements(test_tags, extra_req)
if #remaining_normal == 0 and #remaining_extra == 0 then
break
end
if DispatchCtrl.role_can_help(scored_roles[i].role.tags, remaining_normal, remaining_extra) then
table.insert(test_selected, scored_roles[i].role)
for _, tag in ipairs(scored_roles[i].role.tags) do
table.insert(test_tags, tag)
end
end
end
end
if #test_selected == target_count then
if check_both then
if self:can_meet_requirements(test_tags, normal_req) and self:can_meet_requirements(test_tags, extra_req) then
return test_selected
end
elseif self:can_meet_requirements(test_tags, normal_req) then
return test_selected
end
end
end
end
return nil
end
function DispatchCtrl.role_can_help(role_tags, remaining_normal, remaining_extra)
for _, tag in ipairs(role_tags) do
for _, req in ipairs(remaining_normal) do
if tag == req then
return true
end
end
for _, req in ipairs(remaining_extra) do
if tag == req then
return true
end
end
end
return false
end
function DispatchCtrl:OnEvent_OpenBuildList(dispatchId)
self.bOpenBuild = true
self:RefreshSelectList(true, dispatchId)
+7 -2
View File
@@ -996,8 +996,13 @@ function GachaCtrl:GetGachaItem(mapData, nStorageId, bGetFirstTenReward)
exItem = tbGiveItems
})
local mapItem = ConfigTable.GetData_Item(v.Card.Tid)
if mapItem ~= nil and rare > mapItem.Rarity then
rare = mapItem.Rarity
if mapItem ~= nil then
if rare > mapItem.Rarity then
rare = mapItem.Rarity
end
if mapItem.Stype == GameEnum.itemStype.Char then
PlayerData.Talent:UpdateCharTalentRedDot(v.Card.Tid)
end
end
if v.Rewards ~= nil and #v.Rewards > 0 then
for _, mapItem in ipairs(v.Rewards) do
+4 -1
View File
@@ -173,7 +173,10 @@ function HudMainCtrl:OnEvent_ShowBossHUD(bossId, nType, showed, nDataId, nBloodT
self:MonsterAdvShowChanged(bossId, showed, nType, nDataId, true)
end
function HudMainCtrl:OnEvent_MonsterHUDChange(id, nType, showed, nDataId)
if nType == GameEnum.monsterBloodType.BOSSRUSH or nType == GameEnum.monsterBloodType.JOINTDRILLBOSS then
if nType == GameEnum.monsterBloodType.BOSSRUSH then
return
end
if nType == GameEnum.monsterBloodType.JOINTDRILLBOSS and (self.jointDrillType == nil or self.jointDrillType == GameEnum.JointDrillMode.JointDrill_Mode_1) then
return
end
if nType == GameEnum.monsterBloodType.SIMPLE or nType == GameEnum.monsterBloodType.SIMPLE2 then
@@ -686,6 +686,9 @@ function JointDrillLevelSelectCtrl:OnEnable()
self:Refresh()
self:StartTicketsRefreshTimer()
self:RefreshAvgInfo()
if self.nActStatus == AllEnum.JointDrillActStatus.Start then
PlayerData.JointDrill_2:SendJointDrillRankMsg()
end
end
function JointDrillLevelSelectCtrl:OnDisable()
if self.ticketRefreshTimer ~= nil then
+3 -3
View File
@@ -50,7 +50,7 @@ function ChapterLineCtrl:Awake()
self:Refresh()
self:AddTimer(1, 0.5, function()
if self.bNeedPlayUnlockAnim or self.bNeedPlayBranchAnim then
if self.bNeedPlayBranchAnim then
if self.bNeedPlayBranchAnim and self.tbNeedPlayUnlockAnimGird[1] ~= nil then
self.curShouldPlayDepth = self.tbNeedPlayUnlockAnimGird[1].depth
end
self:DoPlayUnlockAnim(self.curShouldPlayDepth)
@@ -704,7 +704,7 @@ function ChapterLineCtrl:OnClickGrid(avgId)
end
function ChapterLineCtrl:OnEvent_Story_RewardClosed()
if self.bNeedPlayUnlockAnim or self.bNeedPlayBranchAnim then
if self.bNeedPlayBranchAnim then
if self.bNeedPlayBranchAnim and self.tbNeedPlayUnlockAnimGird[1] ~= nil then
self.curShouldPlayDepth = self.tbNeedPlayUnlockAnimGird[1].depth
end
self:DoPlayUnlockAnim(self.curShouldPlayDepth)
@@ -712,7 +712,7 @@ function ChapterLineCtrl:OnEvent_Story_RewardClosed()
end
function ChapterLineCtrl:OnEvent_Story_Done(bHasReward)
if not bHasReward and (self.bNeedPlayUnlockAnim or self.bNeedPlayBranchAnim) then
if self.bNeedPlayBranchAnim then
if self.bNeedPlayBranchAnim and self.tbNeedPlayUnlockAnimGird[1] ~= nil then
self.curShouldPlayDepth = self.tbNeedPlayUnlockAnimGird[1].depth
end
self:AddTimer(1, 1.5, function()
@@ -565,19 +565,16 @@ function FormationDisc_ListCtrl:PlayDiscBGM(nDiscId, tbMain, tbSub)
if mapDiscCfg ~= nil then
tbCharInDisc = mapDiscCfg.CharId
end
local nRandomCharId = self.tbCharId[math.random(1, #self.tbCharId)]
local bInTeam = false
for _, v in ipairs(tbCharInDisc) do
if nRandomCharId == v then
for _, v in ipairs(self.tbCharId) do
if table.indexof(tbCharInDisc, v) > 0 then
bInTeam = true
break
sVoiceKey = "uniMusic"
return v
end
end
if not bInTeam then
sVoiceKey = "music"
else
sVoiceKey = "uniMusic"
end
local nRandomCharId = self.tbCharId[math.random(1, #self.tbCharId)]
sVoiceKey = "music"
return nRandomCharId
end
if nDiscId == nil then
+11 -2
View File
@@ -125,6 +125,11 @@ function PenguinCard:SetDesc(mapCfg)
end
end
local result = string.gsub(mapCfg.Desc, "%b{}", function(token)
local content = string.match(token, "^{(.-)}$")
local sParameterKey, lang, langIdx = ParseLanguageParam(content)
if lang ~= nil then
token = string.format("{%s}", sParameterKey)
end
if token == "{TriggerProbability}" then
return mapCfg.TriggerProbability
elseif token == "{TriggerLimitParam}" then
@@ -133,12 +138,16 @@ function PenguinCard:SetDesc(mapCfg)
local trigIdx = string.match(token, "^{TriggerParam_(%d+)}$")
if trigIdx then
local idx = tonumber(trigIdx)
return ParseTriggerParam(decodeJson(mapCfg.TriggerParam), idx)
local str = ParseTriggerParam(decodeJson(mapCfg.TriggerParam), idx)
str = LanguagePost(lang, langIdx, str)
return str
end
local effectIdx = string.match(token, "^{EffectParam_(%d+)}$")
if effectIdx then
local idx = tonumber(effectIdx)
return ParseEffectParam(decodeJson(mapCfg.EffectParam), idx)
local str = ParseEffectParam(decodeJson(mapCfg.EffectParam), idx)
str = LanguagePost(lang, langIdx, str)
return str
end
return token
end)
@@ -82,18 +82,16 @@ function PenguinCardActData:CreateQuest(mapQuestData)
elseif mapQuestData.Status == 2 then
tbQuestData.nStatus = AllEnum.ActQuestStatus.Received
end
if tbQuestData.nStatus == AllEnum.ActQuestStatus.Received then
tbQuestData.nCur = tbQuestData.nMax
end
return tbQuestData
end
function PenguinCardActData:GetQuestMaxProgress(nId)
local nMax = 0
local mapCfg = ConfigTable.GetData("ActivityPenguinCardQuest", nId)
if mapCfg then
if mapCfg.FinishType == GameEnum.activityQuestCompleteCond.ActivityPenguinCardLevelPassedScore then
nMax = 1
elseif mapCfg.FinishType == GameEnum.activityQuestCompleteCond.ActivityPenguinCardLevelPassedWithStar then
local tbParam = decodeJson(mapCfg.FinishParams)
nMax = tbParam[2]
end
if mapCfg and (mapCfg.FinishType == GameEnum.activityQuestCompleteCond.ActivityPenguinCardLevelPassedScore or mapCfg.FinishType == GameEnum.activityQuestCompleteCond.ActivityPenguinCardLevelPassedWithStar) then
nMax = 1
end
return nMax
end
@@ -424,7 +424,7 @@ end
function PlayerTalentData:UpdateCharTalentRedDotByItem(mapChange)
for _, v in ipairs(mapChange) do
local charId = self.FragmentsToChar[v.Tid]
if charId and v.Qty > 0 then
if charId then
self:UpdateCharTalentRedDot(charId)
end
end
+17 -14
View File
@@ -599,6 +599,19 @@ function AddKrParticle(str, nParticleIdx)
end
return str
end
function ParseLanguageParam(sParam)
local param, lang, num = sParam:match("^(.-)_([a-zA-Z]+)(%d+)$")
if not param then
return sParam, nil, nil
end
return param, lang, tonumber(num)
end
function LanguagePost(sLang, nIdx, sStr)
if sLang == "kr" and nIdx ~= nil then
return AddKrParticle(sStr, nIdx)
end
return sStr
end
local DecodeChangeInfo = function(mapChangeInfo)
local mapDecodedChangeInfo = {}
if type(mapChangeInfo) ~= "table" then
@@ -1236,19 +1249,6 @@ local ParseDesc = function(mapDescConfig, nCompareLevelType, nCompareLevel, bSim
end
return sDesc
end
local ParseLanguageParam = function(sParam)
local param, lang, num = sParam:match("^(.-)_([a-zA-Z]+)(%d+)$")
if not param then
return sParam, nil, nil
end
return param, lang, tonumber(num)
end
local LanguagePost = function(sLang, nIdx, sStr)
if sLang == "kr" and nIdx ~= nil then
return AddKrParticle(sStr, nIdx)
end
return sStr
end
local mapWord = {}
for word in string.gmatch(linkStr, "&.-&") do
local sParameterKeyOrigin = string.gsub(word, "&", "")
@@ -2091,5 +2091,8 @@ _G.UTILS = {
GetBBSUrl = GetBBSUrl,
GetToolBoxUrl = GetToolBoxUrl,
GetExchangeCodeUrl = GetExchangeCodeUrl,
CheckChannelList_Notice = CheckChannelList_Notice
CheckChannelList_Notice = CheckChannelList_Notice,
AddKrParticle = AddKrParticle,
LanguagePost = LanguagePost,
ParseLanguageParam = ParseLanguageParam
}