Files
2024-08-23 15:49:34 +08:00

153 lines
5.7 KiB
C#

/********************************************************************
created: 2014/03/03
created: 3:3:2014 11:22
filename: SceneData.cs
author: 王迪
purpose: 静态类,存储场景数据
*********************************************************************/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Games.LogicObj;
public class SceneData
{
public class InstInfo
{
public int instId;
public int curplayercount;
}
public static float CopyOverTime = 0; //如果是副本的话记录一下副本的结束时间
public static float ForbidOverTime = 0; //如果是副本的话记录一下倒计时结束时间
public static int SceneInst { set; get; } // 当前场景实例
public static int SceneMaxPlayerCoutn;
public static ulong sceneGuildGuid = Games.GlobeDefine.GlobeVar.INVALID_GUID; //如果是帮会场景记录一下是哪个帮会的场景
public static string sceneGuildName = "";
public static int SceneInstCount { set; get; } // 场景总实例
public static List<int> SceneInstList = new List<int>(); // 场景实例列表
public static List<int> ReachedScenes = new List<int>(); // 玩家达到过的场景
public static List<InstInfo> SceneInstInfoList = new List<InstInfo>(); // 场景线路信息列表
private static Color ColorSceneNormal = Color.green;
private static Color ColorSceneKillPower = Color.white;
private static Color ColorSceneKillNoPower = Color.red;
public static Color GetSceneNameColor(int scneneID)
{
if (!GCGame.Utils.IsCanPK(scneneID))
{
return SceneData.ColorSceneNormal;
}
else
{
if (!GCGame.Utils.IsIncPKValue(scneneID))
{
// PK不涨能量
return ColorSceneKillNoPower;
}
else
{
return ColorSceneKillPower;
}
}
}
public static void UpdateSceneInst(GC_UPDATE_SCENE_INSTACTIVATION packet)
{
SceneInstList.Clear();
for (int i = 0; i < packet.sceneactivationCount; i++)
{
SceneInstList.Add(packet.sceneactivationList[i]);
}
Games.Events.EventDispatcher.Instance.SendMessage(Games.Events.EventId.UpdatePlayerChannel);
}
public static void UpdateSceneInst2(GC_RET_SCENE_SUB_LINE packet)
{
SceneInstInfoList.Clear();
SceneInstList.Clear();
for (int i = 0; i < packet.instidList.Count && i<packet.curplayercountList.Count; i++)
{
InstInfo info = new InstInfo();
info.curplayercount = packet.curplayercountList[i];
info.instId = packet.instidList[i];
SceneInstInfoList.Add(info);
SceneInstList.Add(info.instId);
}
SceneMaxPlayerCoutn = packet.Maxplayercount;
Games.Events.EventDispatcher.Instance.SendMessage(Games.Events.EventId.UpdatePlayerChannel);
}
public static void UpdateReachedScenes(GC_SYNC_REACHEDSCENE packet)
{
ReachedScenes.Clear();
for (int i = 0; i < packet.reachedSceneIDCount; i++)
{
ReachedScenes.Add(packet.reachedSceneIDList[i]);
}
}
public static void RequestChangeScene(int nChangeType, int nTeleportID, int nSceneClassID, int nSceneInstID, int nPosX, int nPosZ)
{
var mainPlayer = ObjManager.Instance.MainPlayer;
//if(mainPlayer != null && mainPlayer.isAutoCombat)
//{
// GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("#{9009}"));
// GameManager.gameManager.AutoSearch.Stop();
// return;
//}
if (mainPlayer != null)
mainPlayer.LeveAutoCombat();
if (GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_GUANNING)
{
MessageBoxLogic.OpenOKCancelBox(79341, -1, () =>
{
ChangeScene(nChangeType, nTeleportID, nSceneClassID, nSceneInstID, nPosX, nPosZ);
});
}
else
{
ChangeScene(nChangeType, nTeleportID, nSceneClassID, nSceneInstID, nPosX, nPosZ);
}
}
private static void ChangeScene(int nChangeType, int nTeleportID, int nSceneClassID, int nSceneInstID, int nPosX, int nPosZ)
{
var packet = (CG_REQ_CHANGE_SCENE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_CHANGE_SCENE);
if (packet != null)
{
packet.Ctype = nChangeType;
packet.Teleportid = nTeleportID;
packet.Sceneclassid = nSceneClassID;
packet.Sceneinstid = nSceneInstID;
packet.PosX = nPosX;
packet.PosZ = nPosZ;
packet.SendPacket();
}
if(GameManager.gameManager.AutoSearch!=null)
{
GameManager.gameManager.AutoSearch.RoadSignManager._LastChangeSceneType = nChangeType;
}
var mainPlayer = ObjManager.Instance.MainPlayer;
if (mainPlayer)
{
mainPlayer.EnterMoveFreeze();
if (nChangeType == (int) CG_REQ_CHANGE_SCENE.CHANGETYPE.TELEPORT ||
nChangeType == (int) CG_REQ_CHANGE_SCENE.CHANGETYPE.POINT ||
nChangeType == (int) CG_REQ_CHANGE_SCENE.CHANGETYPE.WORLDMAP)
{
if (GameManager.gameManager.PlayerDataPool.IsHaveTeam() &&
GameManager.gameManager.PlayerDataPool.TeamInfo.IsCaptain())
{
ObjManager.Instance.MainPlayer.TeamChangeSceneFollow(nChangeType, nTeleportID, nSceneClassID,
nSceneInstID, nPosX, nPosZ);
}
}
}
}
}