public class NetPackageQuestPointTreasureSDX : NetPackage { public NetPackageQuestPointTreasureSDX Setup(int _playerId, float _distance, int _offset, int _questCode, int posX = 0, int posY = -1, int posZ = 0, bool _useNearby = false) { //Log.Out("NetPackageQuestPointTreasureSDX-Setup A"); this.playerId = _playerId; this.distance = _distance; this.offset = _offset; this.questCode = _questCode; this.position = new Vector3i(posX, posY, posZ); this.useNearby = _useNearby; this.treasureOffset = Vector3.zero; this.ActionType = QuestPointActions.GetGotoPoint; return this; } public NetPackageQuestPointTreasureSDX Setup(int _playerId, int _questCode, int _blocksPerReduction, Vector3i _position, Vector3 _treasureOffset) { //Log.Out("NetPackageQuestPointTreasureSDX-Setup B"); this.playerId = _playerId; this.distance = 0f; this.offset = 0; this.questCode = _questCode; this.position = _position; this.treasureOffset = _treasureOffset; this.blocksPerReduction = _blocksPerReduction; this.ActionType = QuestPointActions.GetTreasurePoint; return this; } public NetPackageQuestPointTreasureSDX Setup(int _questCode, float _distance, int _offset, float _treasureRadius, Vector3 _startPosition, int _playerId, bool _useNearby, int _blocksPerReduction) { //Log.Out("NetPackageQuestPointTreasureSDX-Setup C"); this.playerId = _playerId; this.distance = _distance; this.offset = _offset; this.questCode = _questCode; this.treasureRadius = _treasureRadius; this.position = new Vector3i(_startPosition); this.useNearby = _useNearby; this.treasureOffset = Vector3.zero; this.blocksPerReduction = _blocksPerReduction; this.ActionType = QuestPointActions.GetTreasurePoint; return this; } public NetPackageQuestPointTreasureSDX Setup(int _questCode, Vector3i _updatedPosition) { //Log.Out("NetPackageQuestPointTreasureSDX-Setup D"); this.questCode = _questCode; this.position = _updatedPosition; this.ActionType = QuestPointActions.UpdateTreasurePoint; return this; } public NetPackageQuestPointTreasureSDX Setup(int _questCode, int _blocksPerReduction) { //Log.Out("NetPackageQuestPointTreasureSDX-Setup E"); this.questCode = _questCode; this.blocksPerReduction = _blocksPerReduction; this.ActionType = QuestPointActions.UpdateBlocksPerReduction; return this; } public override void read(PooledBinaryReader _br) { this.ActionType = (QuestPointActions)_br.ReadByte(); if (this.ActionType == QuestPointActions.UpdateTreasurePoint) { this.questCode = _br.ReadInt32(); this.position = StreamUtils.ReadVector3i(_br); return; } this.playerId = _br.ReadInt32(); this.distance = _br.ReadSingle(); this.offset = _br.ReadInt32(); this.treasureRadius = _br.ReadSingle(); this.blocksPerReduction = _br.ReadInt32(); this.questCode = _br.ReadInt32(); this.position = StreamUtils.ReadVector3i(_br); this.treasureOffset = StreamUtils.ReadVector3(_br); this.useNearby = _br.ReadBoolean(); } public override void write(PooledBinaryWriter _bw) { _bw.Write((byte)this.PackageId); _bw.Write((byte)this.ActionType); if (this.ActionType == QuestPointActions.UpdateTreasurePoint) { _bw.Write(this.questCode); StreamUtils.Write(_bw, this.position); return; } _bw.Write(this.playerId); _bw.Write(this.distance); _bw.Write(this.offset); _bw.Write(this.treasureRadius); _bw.Write(this.blocksPerReduction); _bw.Write(this.questCode); StreamUtils.Write(_bw, this.position); StreamUtils.Write(_bw, this.treasureOffset); _bw.Write(this.useNearby); } public override void ProcessPackage(World _world, GameManager _callbacks) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage START"); if (_world == null) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage 1"); return; } if (_world.IsRemote()) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage 2"); Quest quest = GameManager.Instance.World.GetPrimaryPlayer().QuestJournal.FindActiveQuest(this.questCode); if (quest != null) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage 3"); for (int i = 0; i < quest.Objectives.Count; i++) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage i: " + i); //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage ID: " + quest.Objectives[i].ID); //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage Value: " + quest.Objectives[i].Value); //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage Value: " + quest.Objectives[i].ObjectiveValueType); if (quest.CurrentPhase == quest.Objectives[i].Phase) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage 4"); if (quest.Objectives[i] is ObjectiveTreasureChest) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage 5"); if (this.ActionType == QuestPointActions.GetTreasurePoint) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage 6"); ((ObjectiveTreasureChest)quest.Objectives[i]).FinalizePointFromServer(this.blocksPerReduction, this.position, this.treasureOffset); } else if (this.ActionType == QuestPointActions.UpdateBlocksPerReduction) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage 7"); ((ObjectiveTreasureChest)quest.Objectives[i]).CurrentBlocksPerReduction = this.blocksPerReduction; } } else if (quest.Objectives[i] is ObjectiveGotoRandomSDX) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage 8"); ((ObjectiveGotoRandomSDX)quest.Objectives[i]).FinalizePoint(this.position.x, this.position.y, this.position.z); } } } } return; } if (this.ActionType == QuestPointActions.UpdateTreasurePoint) { QuestEventManager.Current.SetTreasureContainerPosition(this.questCode, this.position); return; } if (this.ActionType == QuestPointActions.UpdateBlocksPerReduction) { QuestEventManager.Current.UpdateTreasureBlocksPerReduction(this.questCode, this.blocksPerReduction); return; } for (int j = 0; j < 15; j++) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage j: " + j); Vector3i vector3i = ObjectiveGotoRandomSDX.CalculateRandomPoint(this.playerId, this.distance, ""); //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage vector3i: " + vector3i); Vector3i vector3iCompare = new Vector3i(0, -99999, 0); //if (QuestEventManager.Current.GetTreasureContainerPosition(this.questCode, this.distance, this.offset, this.treasureRadius, this.position.ToVector3(), this.playerId, this.useNearby, this.blocksPerReduction, out this.blocksPerReduction, out vector3i, out this.treasureOffset)) if (vector3i != vector3iCompare) { //Log.Out("NetPackageQuestPointTreasureSDX-ProcessPackage SEND TO CLIENT: " + this.playerId); SingletonMonoBehaviour.Instance.SendPackage(NetPackageManager.GetPackage().Setup(this.playerId, this.questCode, this.blocksPerReduction, vector3i, this.treasureOffset), false, this.playerId, -1, -1, null, 192); return; } } } public override int GetLength() { ////Log.Out("NetPackageQuestPointTreasureSDX-GetLength-Start"); if (this.ActionType == QuestPointActions.UpdateTreasurePoint) { return 65; } else return 49; } private int playerId; private float distance; private int offset; private float treasureRadius; private int questCode; private Vector3i position; private bool useNearby; private Vector3 treasureOffset = Vector3.zero; private int blocksPerReduction; private QuestPointActions ActionType; private enum QuestPointActions { GetGotoPoint, GetTreasurePoint, UpdateTreasurePoint, UpdateBlocksPerReduction } }