From 598e32c26794c5cbc8604e8344d3d6d98d5905b6 Mon Sep 17 00:00:00 2001 From: Ino Date: Mon, 30 Jun 2025 14:08:37 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8A=A4=ED=85=8C=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=EC=97=90=20=EB=AF=B8=EC=85=98=208=EA=B0=9C?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/Resources/.CloudScript.js | 57 ++++++++++++++++--- Assets/Script/Character/Mob/MobActor.cs | 3 + Assets/Script/Info/DropItemInfo.cs | 24 ++++++++ Assets/Script/Server/ServerInfo.cs | 20 ++++++- 4 files changed, 95 insertions(+), 9 deletions(-) diff --git a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js index fb196427a..88c70f1ef 100644 --- a/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js +++ b/Assets/PlayFabEditorExtensions/Editor/Resources/.CloudScript.js @@ -253,10 +253,10 @@ function Use_Item(urod, itemid, amount) } return false; } -function Add_MissionCount(urod, purpose, conditionvalue, count, setValue) { +function Add_MissionCount(table, urod, purpose, conditionvalue, count, setValue) { if (count <= 0) return; - var table = Get_MissionTable(); // 전체 미션 테이블 + //var table = Get_MissionTable(); // 전체 미션 테이블을 외부에서 받는 걸로 변경 (1번만 호출하기 위함) var matchingMissions = []; // 조건에 맞는 미션만 추림 @@ -286,6 +286,11 @@ function Add_MissionCount(urod, purpose, conditionvalue, count, setValue) { else urod.Mission[key1][key2][1] += count; } } + + // 가이드 퀘스트 체크 + var guideData = table.find(f=>f.n_MissionGroupId == 0 && f.n_MissionIndex == urod.Common[10]); + if (guideData && guideData.e_MissionConditionType == purpose) + urod.Common[11] += count; } function Get_Exp(lv) { @@ -371,6 +376,7 @@ handlers.Save_StageResult = function(args) { if (error < 0) return Get_Return(error); var urod = Get_JsonUserData(); + var table = Get_MissionTable(); // 경험치 처리 urod.PC.Exp += args.Exp; @@ -388,10 +394,45 @@ handlers.Save_StageResult = function(args) { urod.Item[itemId][0] += itemCount; urod.Item[itemId][1] += itemCount; + + Add_MissionCount(table, urod, "TAKE_GOODS", itemId, itemCount, false); + Add_MissionCount(table, urod, "TAKE_GOODS_LIMIT", itemId, itemCount, false); + Add_MissionCount(table, urod, "TAKE_GOODS_ACC", itemId, itemCount, false); } - Set_JsonUserData(urod); + // 몬스터 킬 처리 + var mobcount = 0; + for (var key in args.Mob) { + var Id = key; + var Count = args.Mob[key]; + mobcount += Count; + Add_MissionCount(table, urod, "KILL_MONSTER", Id, Count, false); + } + var elitemobcount = 0; + for (var key in args.Elite) { + var Id = key; + var Count = args.Elite[key]; + elitemobcount += Count; + Add_MissionCount(table, urod, "KILL_MONSTER", Id, Count, false); + } + var bossmobcount = 0; + for (var key in args.Boss) { + var Id = key; + var Count = args.Boss[key]; + bossmobcount += Count; + Add_MissionCount(table, urod, "KILL_MONSTER", Id, Count, false); + } + Add_MissionCount(table, urod, "KILL_MONSTER_ALL", 0, mobcount + elitemobcount + bossmobcount, false); + Add_MissionCount(table, urod, "KILL_MONSTER_ACC", 0, mobcount + elitemobcount + bossmobcount, false); + Add_MissionCount(table, urod, "KILL_MONSTER_GRADE", 1, mobcount, false); + Add_MissionCount(table, urod, "KILL_MONSTER_GRADE", 2, elitemobcount, false); + Add_MissionCount(table, urod, "KILL_MONSTER_GRADE", 3, bossmobcount, false); + Add_MissionCount(table, urod, "KILL_MONSTER_GRADE_ACC", 1, mobcount, false); + Add_MissionCount(table, urod, "KILL_MONSTER_GRADE_ACC", 2, elitemobcount, false); + Add_MissionCount(table, urod, "KILL_MONSTER_GRADE_ACC", 3, bossmobcount, false); + + Set_JsonUserData(urod); return Get_Return(0); } @@ -420,7 +461,7 @@ handlers.Save_PC_Stat = function(args) for (var i = 0; i < 4; i++) { urod.PC.Stat[i] += args.UsePoint[i]; } - Add_MissionCount(urod, "HERO_STAT_UPGRADE_ACC", 0, curUsePoint, false); + Add_MissionCount(Get_MissionTable(), urod, "HERO_STAT_UPGRADE_ACC", 0, curUsePoint, false); Set_JsonUserData(urod); return Get_Return(0); } else { @@ -484,12 +525,12 @@ handlers.Save_PC_Ability = function(args) ++urod.Ability[args.AbilityID]; // 미션 카운트 - Add_MissionCount(urod, "HERO_ABILITY_UPGRADE_CLASS_LIMIT", args.nBattleType, 1, false); - Add_MissionCount(urod, "HERO_ABILITY_UPGRADE_ALL", 0, 1, false); - Add_MissionCount(urod, "HERO_ABILITY_UPGRADE_ACC", 0, 1, false); + var table = Get_MissionTable(); + Add_MissionCount(table, urod, "HERO_ABILITY_UPGRADE_CLASS_LIMIT", args.nBattleType, 1, false); + Add_MissionCount(table, urod, "HERO_ABILITY_UPGRADE_ALL", 0, 1, false); + Add_MissionCount(table, urod, "HERO_ABILITY_UPGRADE_ACC", 0, 1, false); Set_JsonUserData(urod); - return Get_Return(0); } else diff --git a/Assets/Script/Character/Mob/MobActor.cs b/Assets/Script/Character/Mob/MobActor.cs index 91cfbe867..40aa86eb7 100644 --- a/Assets/Script/Character/Mob/MobActor.cs +++ b/Assets/Script/Character/Mob/MobActor.cs @@ -419,6 +419,9 @@ public class MobActor : Actor StartCoroutine(Co_Dissolve()); MonsterSimpleInfo.Ins.DeadTarget(this); + // 킬 수 + DropItemInfo.Ins.Add_MobKill(m_SubRole, m_ID); + // 골드 드랍 DropItemInfo.Ins.Drop_DropItem(2, m_MonsterAppearData.n_DropGold, Get_position()); diff --git a/Assets/Script/Info/DropItemInfo.cs b/Assets/Script/Info/DropItemInfo.cs index e893d4693..604afcd94 100644 --- a/Assets/Script/Info/DropItemInfo.cs +++ b/Assets/Script/Info/DropItemInfo.cs @@ -13,6 +13,9 @@ public class DropItemInfo : MonoBehaviourSingletonTemplate { 2, "Assets/Res_Addr/Obj/DropItem_Coin.prefab" }, }; List list_dropitems = new List(); + Dictionary Mob = new Dictionary(); + Dictionary Elite = new Dictionary(); + Dictionary Boss = new Dictionary(); public StageDropData m_StageDropData = new StageDropData(); @@ -25,12 +28,33 @@ public class DropItemInfo : MonoBehaviourSingletonTemplate public void AllOff() { m_StageDropData.Init(); + Mob.Clear(); + Elite.Clear(); + Boss.Clear(); foreach (var item in dic_dropitem) for (int i = 0; i < item.Value.Count; i++) item.Value[i].gameObject.SetActive(false); } + public void Add_MobKill(eSubRol subRol, int id) + { + var mob = Mob; + switch (subRol) + { + case eSubRol.Elite: mob = Elite; break; + case eSubRol.Boss: mob = Boss; break; + } + if (!mob.ContainsKey(id)) + mob.Add(id, 0); + ++mob[id]; + mob[id].RandomizeCryptoKey(); + } + public Dictionary Get_Mob() { return Mob; } + public Dictionary Get_Elite() { return Elite; } + public Dictionary Get_Boss() { return Boss; } + + void Make_DropItem(int key, int count) { AddrResourceMgr.Ins.LoadObject(dic_addrPath[key], handle => diff --git a/Assets/Script/Server/ServerInfo.cs b/Assets/Script/Server/ServerInfo.cs index 60d5bf990..23eb4aff5 100644 --- a/Assets/Script/Server/ServerInfo.cs +++ b/Assets/Script/Server/ServerInfo.cs @@ -794,6 +794,21 @@ public class ServerInfo : MyCoroutine foreach (var item in dropitem) items.Add(item.Key.ToString(), item.Value.GetDecrypted()); + Dictionary MobKill = new Dictionary(); + var mob = DropItemInfo.Ins.Get_Mob(); + foreach (var item in mob) + MobKill.Add(item.Key.ToString(), item.Value.GetDecrypted()); + + Dictionary EliteKill = new Dictionary(); + var elite = DropItemInfo.Ins.Get_Elite(); + foreach (var item in elite) + EliteKill.Add(item.Key.ToString(), item.Value.GetDecrypted()); + + Dictionary BossKill = new Dictionary(); + var boss = DropItemInfo.Ins.Get_Boss(); + foreach (var item in boss) + BossKill.Add(item.Key.ToString(), item.Value.GetDecrypted()); + PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest { FunctionName = "Save_StageResult", @@ -802,7 +817,10 @@ public class ServerInfo : MyCoroutine { Token = m_LoginInfo.EntityToken.EntityToken, Exp = DropItemInfo.Ins.m_StageDropData.GetExp.GetDecrypted(), - Item = items + Item = items, + Mob = MobKill, + Elite = EliteKill, + Boss = BossKill } }, result =>