protected virtual void HandleOfferMessage(OfferMessage Message) { Message.TradePartner.ResolveResources(resourceManager, false); Message.TradePartner.DecompressResources(); foreach (ObjectBase obj in Message.OfferedItems) { obj.ResolveResources(resourceManager, false); obj.DecompressResources(); } }
/// <summary> /// Handles someone offers you first /// </summary> /// <param name="Message"></param> protected override void HandleOfferMessage(OfferMessage Message) { base.HandleOfferMessage(Message); if (Data.Trade.TradePartner == null) { return; } // accept any items from configured admins in config, offer nothing in return if (Config.IsAdmin(Data.Trade.TradePartner.Name)) { // nothing SendReqCounterOffer(new ObjectID[0]); // tell admin SendSayGroupMessage( Data.Trade.TradePartner.ID, "I will take that, master " + Data.Trade.TradePartner.Name); } }
public void UpdateOfferMessage(OfferMessage message) { _repository.GetRepository <OfferMessage>().Update(message); }
public void InsertOfferMessage(OfferMessage message) { _repository.GetRepository <OfferMessage>().Insert(message); }
private void WSProcessMessage(object sender, MessageEventArgs e) { var content = Encoding.UTF8.GetString(e.RawData); Debug.Log($"Signaling: Receiving message: {content}"); try { var message = JsonUtility.FromJson <Message>(content); string type = message.type; switch (type) { case "accept": { AcceptMessage acceptMessage = JsonUtility.FromJson <AcceptMessage>(content); this.m_acceptMessage = acceptMessage; this.OnAccept?.Invoke(this); break; } case "offer": { OfferMessage offerMessage = JsonUtility.FromJson <OfferMessage>(content); DescData descData = new DescData(); descData.connectionId = this.m_acceptMessage.connectionId; descData.sdp = offerMessage.sdp; this.OnOffer?.Invoke(this, descData); break; } case "answer": { AnswerMessage answerMessage = JsonUtility.FromJson <AnswerMessage>(content); DescData descData = new DescData(); descData.connectionId = this.m_acceptMessage.connectionId; descData.sdp = answerMessage.sdp; this.OnAnswer?.Invoke(this, descData); break; } case "candidate": { CandidateMessage candidateMessage = JsonUtility.FromJson <CandidateMessage>(content); CandidateData candidateData = new CandidateData(); candidateData.connectionId = this.m_acceptMessage.connectionId; candidateData.candidate = candidateMessage.ice.candidate; candidateData.sdpMLineIndex = candidateMessage.ice.sdpMLineIndex; candidateData.sdpMid = candidateMessage.ice.sdpMid; this.OnIceCandidate?.Invoke(this, candidateData); break; } case "ping": { PongMessage pongMessage = new PongMessage(); this.WSSend(JsonUtility.ToJson(pongMessage)); break; } case "bye": { // TODO: break; } default: { Debug.LogError("Signaling: Received message from unknown peer"); break; } } } catch (Exception ex) { Debug.LogError("Signaling: Failed to parse message: " + ex); } }
/// <summary> /// /// </summary> /// <param name="Message"></param> protected virtual void HandleOfferMessage(OfferMessage Message) { }
/// <summary> /// Handles someone offers you first /// </summary> /// <param name="Message"></param> protected override void HandleOfferMessage(OfferMessage Message) { base.HandleOfferMessage(Message); // no tradepartner set (bug!?) or // someone tried to offer nothing (pointless) if (Data.Trade.TradePartner == null || Data.Trade.ItemsPartner.Count == 0) { SendCancelOffer(); return; } /// /// ADMIN /// // accept any items from configured admins in config, offer nothing in return if (Config.IsAdmin(Data.Trade.TradePartner.Name)) { // nothing SendReqCounterOffer(new ObjectID[0]); // tell admin SendSayGroupMessage( Data.Trade.TradePartner.ID, Config.ChatPrefixString + "I will take that, master " + Data.Trade.TradePartner.Name); // exit return; } /// /// NORMAL /// // see what they offered for (int i = 0; i < Data.Trade.ItemsPartner.Count; i++) { ObjectBase obj = Data.Trade.ItemsPartner[i]; // perform action on shillings if (!Config.IsAdmin(Data.Trade.TradePartner.Name)) { if (obj.Name == NAME_SHILLING || obj.Name == "mushroom" || obj.Name == "red mushroom" || obj.Name == "purple mushroom" || obj.Name == "blue dragon scale" || obj.Name == "sapphire" || obj.Name == "orc tooth" || obj.Name == "elderberry" || obj.Name == "kriipa claw" || obj.Name == "vial of solagh" || obj.Name == "Inky-cap mushroom") { if (Config.Enabledonations == true) { // offer nothing SendReqCounterOffer(new ObjectID[0]); return; } } } else { SendCancelOffer(); } } }
/// <summary> /// Handles someone offers you first /// </summary> /// <param name="Message"></param> protected override void HandleOfferMessage(OfferMessage Message) { base.HandleOfferMessage(Message); // no tradepartner set (bug!?) or // someone tried to offer nothing (pointless) if (Data.Trade.TradePartner == null || Data.Trade.ItemsPartner.Count == 0) { SendCancelOffer(); return; } /// /// ADMIN /// // accept any items from configured admins in config, offer nothing in return if (Config.IsAdmin(Data.Trade.TradePartner.Name)) { // nothing SendReqCounterOffer(new ObjectID[0]); // tell admin SendSayGroupMessage( Data.Trade.TradePartner.ID, Config.ChatPrefixString + "I will take that, master " + Data.Trade.TradePartner.Name); // exit return; } /// /// NORMAL /// uint offersum = 0; Dictionary <string, uint> dict = new Dictionary <string, uint>(); // see what they offered for (int i = 0; i < Data.Trade.ItemsPartner.Count; i++) { ObjectBase obj = Data.Trade.ItemsPartner[i]; ShopItem entry = Config.BuyListGetItemByName(obj.Name); // if there's anything we don't buy, reject offer if (entry == null) { // tell customer SendSayGroupMessage( new uint[] { Data.Trade.TradePartner.ID }, Config.ChatPrefixString + "Sorry, I'm not buying " + obj.Name); SendCancelOffer(); return; } // process stackable offered item if (obj.IsStackable) { // get the ones we already have ObjectBaseList <InventoryObject> inventoryObjects = Data.InventoryObjects.GetItemsByName(entry.Name, false); int toBuy; // have none yet? accept up to amount if (inventoryObjects.Count == 0) { toBuy = (int)entry.Amount; } // stackable else if (inventoryObjects[0].IsStackable) { toBuy = (int)entry.Amount - (int)inventoryObjects[0].Count; } // non stackable else { toBuy = (int)entry.Amount - (int)inventoryObjects.Count; } if (toBuy <= 0) { // tell customer SendSayGroupMessage( new uint[] { Data.Trade.TradePartner.ID }, Config.ChatPrefixString + "Sorry, I'm not buying " + entry.Name); SendCancelOffer(); return; } else if (obj.Count > toBuy) { // tell customer SendSayGroupMessage( new uint[] { Data.Trade.TradePartner.ID }, Config.ChatPrefixString + "Sorry, I'm only buying " + toBuy + " " + entry.Name); SendCancelOffer(); return; } // add to sum offersum += obj.Count * entry.UnitPrice; } // process nonstackable offered item else { // in this iteration we just count them up uint count; if (dict.TryGetValue(obj.Name, out count)) { dict[obj.Name] = dict[obj.Name] + 1; } else { dict.Add(obj.Name, 1); } } } // process nonstackable offered items now foreach (KeyValuePair <string, uint> keyvalue in dict) { ShopItem entry = Config.BuyListGetItemByName(keyvalue.Key); if (entry != null) { // get the ones we already have ObjectBaseList <InventoryObject> inventoryObjects = Data.InventoryObjects.GetItemsByName(entry.Name, false); int toBuy; // have none yet? accept up to amount if (inventoryObjects.Count == 0) { toBuy = (int)entry.Amount; } // non stackable else { toBuy = (int)entry.Amount - (int)inventoryObjects.Count; } if (toBuy <= 0) { // tell customer SendSayGroupMessage( new uint[] { Data.Trade.TradePartner.ID }, Config.ChatPrefixString + "Sorry, I'm not buying " + entry.Name); SendCancelOffer(); return; } else if (keyvalue.Value > toBuy) { // tell customer SendSayGroupMessage( new uint[] { Data.Trade.TradePartner.ID }, Config.ChatPrefixString + "Sorry, I'm only buying " + toBuy + " " + entry.Name); SendCancelOffer(); return; } // add to sum offersum += keyvalue.Value * entry.UnitPrice; } } // get our shillings from inventory InventoryObject shillings = Data.InventoryObjects.GetItemByName(NAME_SHILLING, false); // do we have enough money? bool haveMoney = (shillings != null && shillings.Count >= offersum); // offer shillings if (offersum > 0 && haveMoney) { SendReqCounterOffer(new ObjectID[] { new ObjectID(shillings.ID, offersum) }); } // offer nothing else if (offersum == 0) { SendReqCounterOffer(new ObjectID[0]); } // cancel trade else { // tell customer SendSayGroupMessage( new uint[] { Data.Trade.TradePartner.ID }, Config.ChatPrefixString + TELL_NOMONEY); SendCancelOffer(); // log warning Log("WARN", "Not enough shillings to perform trade with " + Data.Trade.TradePartner.Name); } }