예제 #1
0
        public void OnDialogStart(MapPlayer player)
        {
            for (int i = 0; i < _npcs.Length; i++)
            {
                if (_npcs[i] == null)
                {
                    continue;
                }
                _npcs[i].Movement.Lock(false);
                _npcs[i].Movement.LookAt(player.Object);
            }
            short dState = player.Data.GetDialogState(_id);

            foreach (var item in _entries.TakeWhile(x => x.Key < 0))
            {
                if (item.Value.Type != DialogType.Command)
                {
                    continue;
                }
                if (item.Value.Condition == DialogCondition.Always || CheckCondition(dState, true, player, item.Value))
                {
                    ExecuteCommand(ref dState, true, player, item.Value);
                    if (item.Value.IsEnd)
                    {
                        return;
                    }
                    if (item.Value.IsGoTo)
                    {
                        break;
                    }
                }
            }
            Execute(ref dState, true, player);
            player.Data.Dialogs[_id] = dState;
        }
예제 #2
0
        public void TriggerEventData(MapPlayer mapPlayer, MapEvent mapEvent)
        {
            if (mapEvent == null || mapEvent.GetEventData() == null)
            {
                return;
            }

            if (mapEvent.Locked) // add player lock id list so others can interact
            //we did this because sometimes a player could double trigger an event as it started / finished (event touch for example spamming the trigger)
            {
                return;
            }

            TriggeringEvent parent = new TriggeringEvent(null, mapEvent);

            _triggeringEvents.Add(parent);
            if (mapPlayer == null)
            {
                List <MapPlayer> players = _serverMap.GetMapInstance().GetMapPlayers();
                for (int i = 0; i < players.Count; i++)
                {
                    _triggeringEvents.Add(new TriggeringEvent(players[i], mapEvent, parent));
                }
            }
            else
            {
                _triggeringEvents.Add(new TriggeringEvent(mapPlayer, mapEvent, parent));
            }

            mapEvent.Locked = true;
        }
예제 #3
0
    public BattlePlayer(MapPlayer mapPlayer)
    {
        this.Player = mapPlayer;
        Data        = new BattlePlayerData(mapPlayer.Data, this);

        IsMe = mapPlayer.Player == Game.DataManager.MyPlayer;
    }
예제 #4
0
 public ItemsMgr(WO_Player parent)
     : base(parent)
 {
     _wPlayer    = parent;
     _mPlayer    = _wPlayer.Player;
     _player     = _mPlayer.Player;
     m_data      = _mPlayer.Data;
     m_items     = m_data.Items;
     m_wears     = m_data.Wears;
     m_itemsHash = new HashSet <int>();
     foreach (var item in m_items)
     {
         var value = item.Value;
         if (!m_itemsHash.Contains(value.Item.Id))
         {
             m_itemsHash.Add(value.Item.Id);
         }
     }
     m_wearSlotsUsed = WearablePosition.None;
     foreach (var item in m_wears)
     {
         var     value = item.Value;
         DB_Item dbitem;
         if (DataMgr.Select(value.Id, out dbitem))
         {
             m_wearSlotsUsed |= dbitem.Slot;
         }
     }
     parent.OnSpawn   += ItemsMgr_OnSpawn;
     parent.OnDestroy += ItemsMgr_OnDestroy;
 }
예제 #5
0
        private GameClient(TcpClient tcpClient, int playerID)
        {
            Server.Instance.AddGameClient(this);

            _tcpClient        = tcpClient;
            _networkStream    = _tcpClient.GetStream();
            _clientIP         = ((IPEndPoint)_tcpClient.Client.RemoteEndPoint).Address.ToString();
            _sendTimer        = 0f;
            _sendingPackets   = false;
            _recievingPackets = false;

            _disconnecting   = false;
            _disconnectTimer = 5f;

            _mapChanged = false;
            _serverMap  = null;

            _mapPlayer = Server.Instance.GetDatabaseConnection().RetrievePlayerQuery(playerID);
            _mapPlayer.OnEventTrigger    += OnEventTrigger;
            _mapPlayer.OnShowMessage     += OnShowMessage;
            _mapPlayer.OnChangeMap       += OnChangeMap;
            _mapPlayer.OnSendMessage     += OnSendMessage;
            _mapPlayer.OnRequestTrade    += OnRequestTrade;
            _mapPlayer.OnStartTrade      += OnStartTrade;
            _mapPlayer.OnAcceptTrade     += OnAcceptTrade;
            _mapPlayer.OnEndTrade        += OnEndTrade;
            _mapPlayer.OnAddTradeItem    += OnAddTradeItem;
            _mapPlayer.OnRemoveTradeItem += OnRemoveTradeItem;
            _mapPlayer.OnShowShop        += OnShowShop;
            _mapPlayer.OnStartBanking    += OnStartBanking;
            _mapPlayer.OnShowWorkbench   += OnShowWorkbench;

            _serverCommands = new List <ServerCommand>();
            _messagePackets = new List <MessagePacket>();
        }
예제 #6
0
 private void WO_NPC_OnDestroy()
 {
     if (_dialog != null)
     {
         _dialog.NPC[_npc.DialogIndex] = null;
         if (_owner != null)
         {
             _server.Dialogs.RemoveClone(_dialog.ID, _owner);
         }
     }
     if (_owner != null)
     {
         _owner.Clones.Remove(_npc.ID);
     }
     if (_original != null && !_original.IsDead)
     {
         _original._view.RebuildVisibility();
     }
     m_char    = null;
     _wears    = null;
     _owner    = null;
     _dialog   = null;
     _original = null;
     shop_ser  = default(SER_Shop);
     wears_ser = default(SER_Wears);
 }
예제 #7
0
 private void PlayerMovement_OnDestroy()
 {
     _player.Data.Position = _position;
     _player.Data.Rotation = _rotation;
     _entry  = null;
     _player = null;
 }
예제 #8
0
 public void RemoveClone(ushort id, MapPlayer owner)
 {
     if (_dClones.TryGetValue(owner.Player.Id, out var clones))
     {
         clones.Remove(id);
     }
 }
예제 #9
0
        private void Request(NetMessageInfo info)
        {
            MapPlayer sender = _player.Server[info.Sender.Id];

            if (_trading)
            {
                sender.View?.FailedTrade();
                return;
            }
            else if (sender.Trade._requested && sender.Trade._target == _player)
            {
                _target = sender;
                m_state = new TradingState()
                {
                    InProgress = true,
                    ONE        = _player,
                    TWO        = sender,
                    ONE_Offer  = m_offer,
                    TWO_Offer  = sender.Trade.m_offer
                };
                sender.Trade.m_state = m_state;
                sender.Trade._regected.Destroy();
                sender.Trade._trading = _trading = true;
                UpdateState();
                return;
            }
            else if (!_requested)
            {
                _target    = sender;
                _requested = true;
                _view.RequestTrade(info.Sender.Id);
                _regected = new TradeRejector(_player, _target);
            }
        }
예제 #10
0
    public void OnSceneStart()
    {
        ESceneType pType = StartGame.Instance.GetCurrSceneType();
        int        id    = GameDataManage.Instance.CurRoleID;

        if (Config.A == null)
        {
            return;
        }
        for (int i = 0; i < Config.Players.Count; i++)
        {
            MapPlayer       data            = Config.Players[i];
            ActorMainPlayer actorMainPlayer = AddMainPlayer(data.Id, XTransform.Create(data.Position, data.Euler));
            LevelData.MainPlayerlist.Add(actorMainPlayer);
        }
        for (int i = 0; i < Config.Monsters.Count; i++)
        {
            MapMonster data = Config.Monsters[i];
            AddActor(data.Id, EActorType.MONSTER, EBattleCamp.B, data.Position, data.Euler, data.Scale, data.PatrolGroups);
        }
        if (pType == ESceneType.Battle)
        {
            OnBattleStart();
        }
        LevelManage.Instance.SetMainPlayer(1);
    }
예제 #11
0
        private void RPC_001(NetMessage arg1, NetMessageInfo arg2)
        {
            MapPlayer player = _server[arg2.Sender.Id];

            if (player == null)
            {
                ServerLogger.LogWarn($"Switch from map {_data.Data01} on portal {_data.Guid} failed: player {arg2.Sender.Id} not found!");
                return;
            }
            if (Vector3.DistanceSquared(_data.Position, player.Object.Position) <= Constants.MaxInteractionDistanceSquared)
            {
                if (player.PrepareForMapSwitch())
                {
                    player.User.Spawn = (ushort)_data.Data02;
                    arg2.Sender.SynchNetData();
                    arg2.Sender.ChangeRoom(m_map.Name);
                    player = null;
                }
                else
                {
                    player.CreateSaveTimer();
                    ServerLogger.LogWarn($"Switch from map {_data.Data01} on portal {_data.Guid} failed: couldn't save player {arg2.Sender.Id} character!");
                    player.SystemMsg("Map switch failed: couldn't save character to database!");
                }
            }
            else
            {
                player.SystemMsg("You far away from the portal.");
            }
        }
예제 #12
0
        private void InitGui()
        {
            InitSetting();
            CalculateRate();
            //            InitPlayerItemList();
            //            InitMarkItemList();
            _safeCircle   = new BaneCircle(safeDuquanRoot, false, true);
            _duquanCircle = new BaneCircle(curDuquanRoot, true, true);
            _bombArea     = new BombArea(curBombAreaRoot);
            _safeMiniDis  = new SafeMiniDis(miniDisRoot);
            if (!MapLevel.Min.Equals(adapter.MapLevel))
            {
//                _mapGird = new MapGird(lineRoot);
//                _mapGird1 = new MapGird1(girdRoot);
            }
            _mapGird1 = new MapGird1(girdRoot);
            InitMapBg();
            _airPlane  = new AirPlane(kTouRoot, Loader);
            _routeLine = new RouteLine(routeRoot);
            _mapLabel  = new MapLabel(labelRoot);
            _mapPlayer = new MapPlayer(playItemRoot);
            _mapMark   = new MapMark(markRoot);
            _bioMark   = new BioMark(bioMarkRoot);
            PreparedSprite();
        }
예제 #13
0
        private void RPC_06_23(NetMessage arg1, NetMessageInfo arg2)
        {
            MapPlayer player = _server[arg2.Sender.Id];

            _movement.Unlock();
            player.Shop = null;
            _view.Rpc(6, 23, arg2.Sender);
        }
예제 #14
0
 public PlayerObject(MapPlayer player)
     : base()
 {
     m_player = player;
     m_user   = player.User;
     m_char   = player.Char;
     m_save   = AddManager <SaveManager>();
 }
예제 #15
0
        public void RemoveClone(ushort id, MapPlayer owner)
        {
            Dictionary <ushort, DialogScript> clones;

            if (_dClones.TryGetValue(owner.Player.Id, out clones))
            {
                clones.Remove(id);
            }
        }
예제 #16
0
 /// <summary>
 /// 人离开船碰撞体
 /// </summary>
 /// <param name="player"></param>
 void onColliderExitWithPlayer(MapPlayer player)
 {
     if (!player)
     {
         return;
     }
     player?.keyTip.SetActive(false);
     player.keyTipVehicle = false;
 }
예제 #17
0
 /// <summary>
 /// 人进入船碰撞体
 /// </summary>
 void onColliderEnterWithPlayer(MapPlayer player)
 {
     if (!player)
     {
         return;
     }
     player.keyTip.SetActive(true);
     player.keyTipVehicle = true;
 }
예제 #18
0
 private void WO_Loot_OnDestroy()
 {
     _destroy?.Destroy();
     _view.ClearSubscriptions();
     _server.Room.Destroy(_view);
     _view    = null;
     _onwer   = null;
     _destroy = null;
 }
예제 #19
0
 public void ResetState()
 {
     _regected?.Destroy();
     m_state    = null;
     _target    = null;
     _trading   = false;
     _regected  = null;
     _requested = false;
     lock (_lock) m_offer.Clear();
 }
예제 #20
0
        public void OnDialogChoice(MapPlayer player, int index)
        {
            short dState = player.Data.GetDialogState(_id);

            if (SelectChoice(ref dState, false, player, index))
            {
                Execute(ref dState, false, player);
            }
            player.Data.Dialogs[_id] = dState;
        }
예제 #21
0
 public TradeMgr(WO_Player parent)
     : base(parent)
 {
     _wPlayer          = parent;
     _player           = parent.Player;
     m_offer           = new Dictionary <int, TradingStack>();
     parent.OnSpawn   += TradeMgr_OnSpawn;
     parent.OnDestroy += TradeMgr_OnDestroy;
     parent.OnDespawn += TradeMgr_OnDespawn;
 }
예제 #22
0
        private void RPC_10_49(NetMessage arg1, NetMessageInfo arg2)
        {
            MapPlayer player = _server[arg2.Sender.Id];

            if (player.Dialog == null)
            {
                player.Dialog = this;
                player.DialogBegin();
            }
        }
예제 #23
0
 public PlayerMovement(WO_Player parent)
     : base(parent)
 {
     _player           = parent.Player;
     _entry            = new SyncEntry();
     _position         = _player.Data.Position;
     _rotation         = _player.Data.Rotation;
     parent.OnSpawn   += PlayerMovement_OnSpawn;
     parent.OnDestroy += PlayerMovement_OnDestroy;
 }
예제 #24
0
 public PlayerStatsMgr(WO_Player parent)
     : base(parent)
 {
     _mPlayer = parent.Player;
     if (_stats.Count == 0)
     {
         CreateBase();
     }
     parent.OnDestroy += PlayerStatsMgr_OnDestroy;
     UpdateStats();
 }
예제 #25
0
 public void SetReadyState(MapPlayer player, bool state)
 {
     if (player == ONE)
     {
         ONE_Ready = state;
     }
     else
     {
         TWO_Ready = state;
     }
 }
예제 #26
0
 public SkillsMgr(WO_Player parent)
     : base(parent)
 {
     _wPlayer          = parent;
     _mPlayer          = _wPlayer.Player;
     _entry            = new TargetEntry();
     _skills           = _wPlayer.Player.Data.Skills;
     _cooldown         = new Dictionary <int, CooldownReset>();
     parent.OnSpawn   += SkillsMgr_OnSpawn;
     parent.OnDestroy += SkillsMgr_OnDestroy;
 }
예제 #27
0
 private void ItemsMgr_OnDestroy()
 {
     m_view      = null;
     m_data      = null;
     m_wears     = null;
     m_items     = null;
     _player     = null;
     _mPlayer    = null;
     _wPlayer    = null;
     m_itemsHash = null;
 }
예제 #28
0
 /// <summary>
 /// 尝试自动上船
 /// </summary>
 /// <param name="player"></param>
 void tryBoard(MapPlayer player)
 {
     if (!isTake() || isFreezing())
     {
         return;
     }
     if (!boardFlag && addPassenger(player, true))
     {
         boardFlag = true;
     }
 }
예제 #29
0
 public void OnDialogEnd(MapPlayer player)
 {
     player.Choices.Clear();
     for (int i = 0; i < _npcs.Length; i++)
     {
         if (_npcs[i] == null)
         {
             continue;
         }
         _npcs[i].Movement.Unlock();
     }
 }
예제 #30
0
        private void RPC_06_22(NetMessage arg1, NetMessageInfo arg2)
        {
            MapPlayer player = _server[arg2.Sender.Id];

            if ((_npc.Flags & NPCFlags.Trader) > 0 && Vector3.DistanceSquared(player.Object.Position, _movement.Position) <= Constants.MaxInteractionDistanceSquared)
            {
                _movement.Lock(false);
                _movement.LookAt(player.Object);
                player.Shop = this;
                _view.Rpc(6, 22, arg2.Sender, shop_ser);
            }
        }
예제 #31
0
파일: MovementSpot.cs 프로젝트: MrJov/GGJ16
	void Go(MapPlayer p){
		player = p;
		if (!gameObject.name.Equals (player.GetDestination ().name)) {
			bool going = false;
			if (crossRoad) {
				for (int i = 0; i < nearSpots.Length; i++) {
					if (nearSpots [i].name.Equals (player.GetDestination ().name)) {
						player.Move (nearSpots [i]);
						going = true;
						break;
					}
				}
				if (!going) {
					player.Move (nextCrossroad);
				}	
			} else {
				player.Move (nextCrossroad);
			}
		}

	}