웨이브 몬스터 골드 추가, 힘민지 레벨업 추가

This commit is contained in:
Ino 2025-02-03 11:14:02 +09:00
parent 269475c9e3
commit 4d120fc538
10 changed files with 310 additions and 33 deletions

View File

@ -67,4 +67,9 @@ messageinfo 엄청 느린 버그
- 랭킹 15분마다 갱신
몬스터 웨이브
-
- 맵 최적화
- 점수 (기본 1점만 주는 중)
- 결과 (점수 주고 점수가 일정 이상이면 보상 지급)
- 특정 오브젝트와 상호 작용 시 즉시 몬스터 생성
- 몬스터 패트롤 거리 조절
- 인게임 (골드 추가, 골드로 강화 추가)

View File

@ -60413,6 +60413,7 @@ RectTransform:
m_Children:
- {fileID: 2456301549684164057}
- {fileID: 7974969539412733797}
- {fileID: 9181343301977338825}
m_Father: {fileID: 4024768543662385231}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@ -60435,6 +60436,7 @@ MonoBehaviour:
texts:
- {fileID: 5901097485763957288}
- {fileID: 210471489378237102}
m_Gold: {fileID: 8622814369425716572}
--- !u!1 &5309185614019593321
GameObject:
m_ObjectHideFlags: 0
@ -104900,6 +104902,82 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_localtextKey: 222
--- !u!1 &9130502448240892602
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 9181343301977338825}
- component: {fileID: 6143312310331753383}
- component: {fileID: 5414385158663453451}
m_Layer: 5
m_Name: gold
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &9181343301977338825
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9130502448240892602}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4280608280561797897}
m_Father: {fileID: 5407752627791140537}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 200, y: -460}
m_SizeDelta: {x: 400, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &6143312310331753383
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9130502448240892602}
m_CullTransparentMesh: 1
--- !u!114 &5414385158663453451
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9130502448240892602}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.78431374}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 65f581562538e304cbbfe8ee3beab09c, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &9133757427431203074
GameObject:
m_ObjectHideFlags: 0
@ -123232,6 +123310,142 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: b055af6abeefd104995ea4fdfcd9b939, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1001 &5811003198218442715
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 9181343301977338825}
m_Modifications:
- target: {fileID: 3590403063326329916, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_Name
value: MoneyForm
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_SizeDelta.x
value: 250
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_SizeDelta.y
value: 36
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 150bed98d110cb24292c78f18534decd, type: 3}
--- !u!224 &4280608280561797897 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 7765070059004976338, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
m_PrefabInstance: {fileID: 5811003198218442715}
m_PrefabAsset: {fileID: 0}
--- !u!114 &8622814369425716572 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: -6408983573810322809, guid: 150bed98d110cb24292c78f18534decd,
type: 3}
m_PrefabInstance: {fileID: 5811003198218442715}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b055af6abeefd104995ea4fdfcd9b939, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1001 &5869695977124080956
PrefabInstance:
m_ObjectHideFlags: 0

View File

@ -355,6 +355,7 @@ public class MobActor : Actor
var sdata = ServerInfo.Ins.m_ServerData;
m_actDie?.Invoke(m_MonsterTableData.n_MonsterID);
DungeonInfo.Ins.Add_WaveScore(1); // TODO 정인호 : 웨이브 점수
DungeonInfo.Ins.Add_WaveGold(10); // TODO 정인호 : 웨이브 골드
sdata.Add_CollectionMobKill(m_MonsterTableData.n_MonsterID);
base.Set_Die();
m_DieTime = m_MonsterAppearData.f_SpawnerDelay;

View File

@ -3,13 +3,14 @@ using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SocialPlatforms.Impl;
public class DungeonInfo : MonoBehaviourSingletonTemplate<DungeonInfo>
{
public Action<float> act_Time;
public Action<int> act_MobDieCount;
public Action<double> act_DamageUI;
public Action<int> act_WaveScoreUI, act_WaveLifeUI;
public Action<int> act_WaveScoreUI, act_WaveLifeUI, act_WaveGold;
public float m_TotalTime;
Dictionary<int, ObscuredFloat> dic_time = new Dictionary<int, ObscuredFloat>();
@ -64,6 +65,15 @@ public class DungeonInfo : MonoBehaviourSingletonTemplate<DungeonInfo>
set { _WaveLife = value; _WaveLife.RandomizeCryptoKey(); }
}
protected ObscuredInt _WaveGold;
public int WaveGold
{
get { return _WaveGold; }
set { _WaveGold = value; _WaveGold.RandomizeCryptoKey(); }
}
public Dictionary<eMainStatType, ObscuredInt> dic_WaveStat = new Dictionary<eMainStatType, ObscuredInt>
{ { eMainStatType.STR, 0 }, { eMainStatType.DEX, 0 }, { eMainStatType.INT, 0 } };
eDungeon m_Dungeon;
bool bTotalTimeUpdate = false;
@ -79,6 +89,10 @@ public class DungeonInfo : MonoBehaviourSingletonTemplate<DungeonInfo>
act_Time = null;
StopAllCoroutines();
Time.timeScale = 0f;
WaveGold = 0;
dic_WaveStat[eMainStatType.STR] = 0; dic_WaveStat[eMainStatType.STR].RandomizeCryptoKey();
dic_WaveStat[eMainStatType.DEX] = 0; dic_WaveStat[eMainStatType.DEX].RandomizeCryptoKey();
dic_WaveStat[eMainStatType.INT] = 0; dic_WaveStat[eMainStatType.INT].RandomizeCryptoKey();
Ingame_DungeonResult.Ins.Show_Result(win);
}
IEnumerator Co_Update_Time()
@ -241,7 +255,7 @@ public class DungeonInfo : MonoBehaviourSingletonTemplate<DungeonInfo>
++iteration;
}
}
public void Set_Wave(Action<int> actscoreui, Action<int> actlifeui)
public void Set_Wave(Action<int> actscoreui, Action<int> actlifeui, Action<int> actgoldui)
{
WaveScore = 0;
act_WaveScoreUI = actscoreui;
@ -250,6 +264,13 @@ public class DungeonInfo : MonoBehaviourSingletonTemplate<DungeonInfo>
WaveLife = 3;
act_WaveLifeUI = actlifeui;
act_WaveLifeUI(WaveLife);
WaveGold = 0;
dic_WaveStat[eMainStatType.STR] = 0; dic_WaveStat[eMainStatType.STR].RandomizeCryptoKey();
dic_WaveStat[eMainStatType.DEX] = 0; dic_WaveStat[eMainStatType.DEX].RandomizeCryptoKey();
dic_WaveStat[eMainStatType.INT] = 0; dic_WaveStat[eMainStatType.INT].RandomizeCryptoKey();
act_WaveGold = actgoldui;
act_WaveGold(WaveGold);
}
public void Add_WaveScore(int score)
{
@ -270,4 +291,12 @@ public class DungeonInfo : MonoBehaviourSingletonTemplate<DungeonInfo>
Stop_Dungeon(false);
}
}
public void Add_WaveGold(int gold)
{
if (MyValue.MyChoiceMapData.Get_MapData().e_Dungeon == eDungeon.d4_Wave)
{
WaveGold += gold;
act_WaveGold(WaveGold);
}
}
}

View File

@ -36,7 +36,8 @@ public class Ingame_Dungeon : MonoBehaviour
case eDungeon.d4_Wave:
texts_base[0].text = $"{mapData.Get_Name()} {MyValue.MyChoiceMapData.n_Difficult}";
var dgindex = MyValue.MyChoiceMapData.Get_DungeonIndex();
DungeonInfo.Ins.Set_Wave(ingame_Dungeons[dgindex].Set_TotalScore, ingame_Dungeons[dgindex].Set_TotalLife);
DungeonInfo.Ins.Set_Wave(ingame_Dungeons[dgindex].Set_TotalScore, ingame_Dungeons[dgindex].Set_TotalLife,
ingame_Dungeons[dgindex].Set_WaveGold);
break;
}
}

View File

@ -32,4 +32,5 @@ public class Ingame_DungeonBase : MonoBehaviour
public virtual void Set_TotalDmg(double dmg) { }
public virtual void Set_TotalScore(int score) { }
public virtual void Set_TotalLife(int life) { }
public virtual void Set_WaveGold(int gold) { }
}

View File

@ -3,6 +3,7 @@ using TMPro;
public class Ingame_Wave : Ingame_DungeonBase
{
public TextMeshProUGUI[] texts; // 0 포인트, 1 남은 목숨
public MoneyForm m_Gold;
public override void Set_TotalScore(int score)
{
@ -12,4 +13,8 @@ public class Ingame_Wave : Ingame_DungeonBase
{
texts[1].text = life.ToString();
}
public override void Set_WaveGold(int gold)
{
m_Gold.Set(2, gold);
}
}

View File

@ -24,10 +24,17 @@ public class MainStatLvUpCard : CardBase
Set_Price();
}
public override void Set_UI()
int Get_Lv()
{
var curmap = MyValue.MyChoiceMapData;
var lv = ServerInfo.Ins.m_ServerData.MapData_Get_StatLv(curmap.n_MapID, curmap.n_Difficult, m_Data.mainStatType);
int lv = curmap.Get_MapData().e_Dungeon == eDungeon.d4_Wave ? DungeonInfo.Ins.dic_WaveStat[m_Data.mainStatType] :
ServerInfo.Ins.m_ServerData.MapData_Get_StatLv(curmap.n_MapID, curmap.n_Difficult, m_Data.mainStatType);
return lv;
}
public override void Set_UI()
{
int lv = Get_Lv();
labels[0].text = $"Lv.{lv}";
labels[1].text = $"{lv}"; // TODO 정인호 : 레벨당 스탯1 임시
}
@ -36,31 +43,48 @@ public class MainStatLvUpCard : CardBase
{
var price = Get_Price();
labels[2].text = NumberFormatter.FormatNumber(price);
if (ServerInfo.Ins.m_ServerData.Check_ItemAmount(eItem.Gold, price, 0, false))
labels[2].color = Color.black;
bool canLvUp = false;
var curmap = MyValue.MyChoiceMapData;
if (curmap.Get_MapData().e_Dungeon == eDungeon.d4_Wave)
canLvUp = DungeonInfo.Ins.WaveGold >= price;
else
labels[2].color = Color.red;
canLvUp = ServerInfo.Ins.m_ServerData.Check_ItemAmount(eItem.Gold, price, 0, false);
if (canLvUp) labels[2].color = Color.black;
else labels[2].color = Color.red;
}
int Get_Price()
{
var curMap = MyValue.MyChoiceMapData;
var lv = ServerInfo.Ins.m_ServerData.MapData_Get_StatLv(curMap.n_MapID, curMap.n_Difficult, m_Data.mainStatType);
return (lv + 1) * 100;
}
int Get_Price() { return (Get_Lv() + 1) * 100; }
public void OnClick_LvUp()
{
var sdata = ServerInfo.Ins.m_ServerData;
if (sdata.Check_ItemAmount(eItem.Gold, Get_Price()))
var price = Get_Price();
var curmap = MyValue.MyChoiceMapData;
if (curmap.Get_MapData().e_Dungeon == eDungeon.d4_Wave)
{
sdata.Use_Item(eItem.Gold, Get_Price());
var curMap = MyValue.MyChoiceMapData;
sdata.MapData_Add_StatLv(curMap.n_MapID, curMap.n_Difficult, m_Data.mainStatType);
Set_UI();
Set_Price();
if (DungeonInfo.Ins.WaveGold >= price)
{
DungeonInfo.Ins.Add_WaveGold(-price);
++DungeonInfo.Ins.dic_WaveStat[m_Data.mainStatType];
DungeonInfo.Ins.dic_WaveStat[m_Data.mainStatType].RandomizeCryptoKey();
Set_UI();
Set_Price();
MyValue.Get_ActorStatInfoorNull(eRole.PC);
}
}
else
{
var sdata = ServerInfo.Ins.m_ServerData;
if (sdata.Check_ItemAmount(eItem.Gold, Get_Price()))
{
sdata.Use_Item(eItem.Gold, price);
sdata.MapData_Add_StatLv(curmap.n_MapID, curmap.n_Difficult, m_Data.mainStatType);
Set_UI();
Set_Price();
if (MyInfoUI.Ins != null) MyInfoUI.Ins.Set_MainStats();
if (MyInfoUI.Ins != null) MyInfoUI.Ins.Set_MainStats();
}
}
}
}

View File

@ -61,7 +61,7 @@ public class NewGameUI : MonoBehaviourSingletonTemplate<NewGameUI>
break;
case eGameMode.Dungeon:
DSUtil.InActivateGameObjects(gos, 2);
gos_etc[0].SetActive(false);
gos_etc[0].SetActive(MyValue.MyChoiceMapData.Get_MapData().e_Dungeon == eDungeon.d4_Wave);
DSUtil.InActivateGameObjects(gos_ingame, 1);
Refresh_DungeonUI();
break;

View File

@ -104,15 +104,6 @@ public static class MyValue
}
return 0;
}
public static int Get_RandomID_byGrade(eItem item, eItemGrade grade)
{
var ids = Get_IDs_byGrade(grade);
return ids[Random.Range(0, ids.Length)];
}
public static int[] Get_IDs_byGrade(eItemGrade grade) { int index = (int)grade; return new int[] { index * 4 - 3, index * 4 - 2, index * 4 - 1, index * 4 }; }
public static float Mul_100 = 100f, TimeAttackMax = int.MaxValue;
public static int VegetableField = 8, TreeCount = 30, GambleADCount = 5;
// 역할 프리셋 아이디(펫, 요정은 id > 0, PC는 0)
static Dictionary<(eRole, string, int), ActorStatInfo> dic_ActorStatInfo = new Dictionary<(eRole, string, int), ActorStatInfo>();
@ -351,12 +342,18 @@ public class ActorStatInfo
Set_Fruit(); // 열매 값 적용
Set_Farmer(); // 농부 값 적용(전투x)
// 펫
var Pet_All_Stat_Multiplier = isPet ? Get_Stat(eStat.Pet_Stat_Multiplier) : 0d;
Set_Stat(true, eStat.STR, Get_Stat(eStat.STR) * (Get_Stat(eStat.STR_Multiplier) + Get_Stat(eStat.ALL_STAT_Multiplier) + Get_BuffStat(eStat.STR_Multiplier) + Pet_All_Stat_Multiplier));
Set_Stat(true, eStat.DEX, Get_Stat(eStat.DEX) * (Get_Stat(eStat.DEX_Multiplier) + Get_Stat(eStat.ALL_STAT_Multiplier) + Get_BuffStat(eStat.DEX_Multiplier) + Pet_All_Stat_Multiplier));
Set_Stat(true, eStat.INT, Get_Stat(eStat.INT) * (Get_Stat(eStat.INT_Multiplier) + Get_Stat(eStat.ALL_STAT_Multiplier) + Get_BuffStat(eStat.INT_Multiplier) + Pet_All_Stat_Multiplier));
Set_Stat(true, eStat.LUK, Get_Stat(eStat.LUK) * (Get_Stat(eStat.LUK_Multiplier) + Get_Stat(eStat.ALL_STAT_Multiplier) + Get_BuffStat(eStat.LUK_Multiplier) + Pet_All_Stat_Multiplier));
// 몬스터 웨이브
Set_Stat(true, eStat.STR, DungeonInfo.Ins.dic_WaveStat[eMainStatType.STR]);
Set_Stat(true, eStat.DEX, DungeonInfo.Ins.dic_WaveStat[eMainStatType.DEX]);
Set_Stat(true, eStat.INT, DungeonInfo.Ins.dic_WaveStat[eMainStatType.INT]);
// 힘
var multi = MyValue.dic_MainStatMultiplier[eMainStatType.STR];
if (classData.Get_MainStat() == eMainStatType.STR)