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"); }
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)); }
private void HandleSellAction(SellAction sa) { DateTime now = DateTime.Now; ChatManager.ServerMessageToAllLoc(EcoAnalyzerProtocol1.SellMessage(now, sa), false, category: ChatCategory.Info); }
/// <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]); }
/// <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()); }