예제 #1
0
        public static string SellMessage(DateTime timestamp, SellAction a)
        {
            string     currency = WorldObjectManager.GetFromID(a.WorldObjectId).GetComponent <CreditComponent>().CurrencyName;
            TradeOffer offer    = (from TradeOffer o in WorldObjectManager.GetFromID(a.WorldObjectId).GetComponent <StoreComponent>().SellOffers()
                                   where o.Stack.Item.FriendlyName == a.ItemTypeName
                                   select o).FirstOrDefault();

            return($"Sell(timestamp={timestamp:u}, worldtime={a.TimeSeconds}, item={a.ItemTypeName}, price={offer.Price}, currency={currency}, user={a.Username})\n");
        }
예제 #2
0
 private static string GetSellActionReport(SellAction act)
 {
     return(String.Format(
                "Agent {0} is selling {1} units of {2} at {3} credits per unit.",
                act.Seller.AgentNumber,
                act.Quantity,
                act.Good.Name,
                act.PricePerUnit));
 }
예제 #3
0
        private void HandleSellAction(SellAction sa)
        {
            DateTime now = DateTime.Now;

            ChatManager.ServerMessageToAllLoc(EcoAnalyzerProtocol1.SellMessage(now, sa), false, category: ChatCategory.Info);
        }
예제 #4
0
        /// <inheritdoc/>
        protected override IMarkovAction <EnhancementState> GetAction(EnhancementState state)
        {
            if (TargetFailstack > 0 && state.FailStack >= TargetFailstack)
            {
                return(null);
            }

            if (state.Items.Sum() == 0)
            {
                return(null);
            }

            if (state.Items[0] - _itemLoss < 0)
            {
                return(null);
            }

            if (state.Items[_targetGrade] > 0 && StopAtOnce)
            {
                return(null);
            }

            var toGrade = GetToGrade(state);

            if (toGrade == 1 && state.Items[0] < 1 + _itemLoss)
            {
                return(null);
            }
            if (toGrade < 1)
            {
                return(null);
            }

            if (BookFailstack > 0 && state.FailStack >= BookFailstack && state.FailStack <= 50)
            {
                return(_bookAction);
            }

            if (SellGrade > 0 && state.Items[SellGrade] > 0)
            {
                if (_sellAction == null)
                {
                    _sellAction = new SellAction(SellGrade);
                }
                return(_sellAction);
            }

            var restoreSlot = ApplyRestoreFailstack(state, toGrade);

            if (restoreSlot >= 0)
            {
                var restoreFailstack = _restoreActions[restoreSlot];
                if (Log != null)
                {
                    Log?.Info($"[RESTORE] +{state.StoredFailstacks[restoreFailstack.Slot]} at state {state} after succeding an enhancement to +{toGrade - 1} from slot {restoreFailstack.Slot}");
                    var nextState   = restoreFailstack[state].First();
                    var nextToGrade = nextState.Items.ToList().FindLastIndex(i => i > 0) + 1;
                    Log?.Info($"[RESTORE] New state : {nextState} with failstack +{nextState.FailStack} enhancing to +{nextToGrade}");
                }

                return(restoreFailstack);
            }

            var storeSlot = ApplyStoreFailstack(state, toGrade);

            if (storeSlot >= 0)
            {
                var storeFailstack = _storeActions[storeSlot];
                if (Log != null)
                {
                    Log?.Info($"[STORE] +{state.FailStack} at state {state} after failing an enhancement to +{state.JustFailedGrade} in slot {storeFailstack.Slot}");
                    var nextState   = storeFailstack[state].First();
                    var nextToGrade = nextState.Items.ToList().FindLastIndex(i => i > 0) + 1;
                    Log?.Info($"[STORE] New state : {nextState} with failstack +{nextState.FailStack} enhancing to +{nextToGrade}");
                }

                return(storeFailstack);
            }

            var failstack = ApplyFailstack(state, toGrade);

            if (failstack > 0)
            {
                return(_failstackActions[failstack - 1]);
            }

            return(_enhancementActions[toGrade]);
        }
예제 #5
0
        /// <inheritdoc/>
        protected override IMarkovAction <EnhancementState>[] GetAllActions(EnhancementState state)
        {
            if (TargetFailstack > 0 && state.FailStack >= TargetFailstack)
            {
                return new IMarkovAction <EnhancementState>[] { null }
            }
            ;

            if (state.Items[0] - _itemLoss < 0 || (state.Items[_targetGrade] > 0 && StopAtOnce) || state.Items.Take(_targetGrade).Sum() < 1 + _itemLoss)
            {
                return new IMarkovAction <EnhancementState>[] { null }
            }
            ;

            var list = new List <IMarkovAction <EnhancementState> >();

            for (var grade = 1; grade <= _targetGrade; ++grade)
            {
                if (state.Items[grade - 1] > (grade == 1 ? _itemLoss : 0))
                {
                    list.Add(_enhancementActions[grade]);
                }
            }

            for (var grade = 3; grade <= _targetGrade; ++grade)
            {
                if (state.Items[grade - 1] > 0 && _cronActions != null)
                {
                    list.Add(_cronActions[grade - 3]);
                }
            }

            if (state.NumberOfValks > 0 && state.FailStack > 0 && state.JustFailedGrade < 0 && state.Items[_targetGrade - 1] > 0)
            {
                list.Add(_valkActions[state.NumberOfValks - 1]);
            }

            if (BookFailstack > 0 && state.FailStack <= 50 && state.FailStack >= 30)
            {
                list.Add(_bookAction);
            }

            if (SellGrade > 0 && state.Items[SellGrade] > 0)
            {
                if (_sellAction == null)
                {
                    _sellAction = new SellAction(SellGrade);
                }
                list.Add(_sellAction);
            }

            var minStoreFailstack = 15;

            for (var slot = 0; slot < Math.Min(_targetGrade - 1, 2); slot++)
            {
                if (state.FailStack > minStoreFailstack && state.StoredFailstacks[slot] == 0 && state.JustFailedGrade > 0)
                {
                    list.Add(_storeActions[slot]);
                }
                if (state.StoredFailstacks[slot] > 0 && state.FailStack == 0)
                {
                    list.Add(_restoreActions[slot]);
                }
            }

            var maxFailstack = MAX_FAILSTACK;
            var toGrade      = GetToGrade(state);

            if (MaxGradeFailstacks.ContainsKey(toGrade - 1))
            {
                maxFailstack = MaxGradeFailstacks[toGrade - 1] - 1;
            }

            if (state.FailStack == 0)
            {
                for (var i = 3; i < Math.Min(maxFailstack, 20); i += 5)
                {
                    list.Add(_failstackActions[i]);
                }
                for (var i = 21; i < Math.Min(maxFailstack, 30); i += 3)
                {
                    list.Add(_failstackActions[i]);
                }
                for (var i = 28; i < Math.Min(maxFailstack, MAX_FAILSTACK); i++)
                {
                    list.Add(_failstackActions[i]);
                }
            }

            return(list.ToArray());
        }