public async Task <ModeEnum> GetAccessAreaMode(AccountTicket ticket, AreaEnum area) { var response = new ModeEnum(); var lst = await _repository.GetAreaAccess(ticket, (int)area); foreach (var item in lst) { if (item.CanCreate) { response |= ModeEnum.Create; } if (item.CanDelete) { response |= ModeEnum.Delete; } if (item.CanModify) { response |= ModeEnum.Modify; } if (item.CanRead) { response |= ModeEnum.Read; } } return(response); }
public static String GetServiceAddress(AreaEnum areaOfService, ApiServicesEnum apiService) { return String.Format("{0}://{1}:{2}/apiarea/" + areaOfService.ToString() + "/" + apiService.ToString() + "/", Application.Current.Host.Source.Scheme, Application.Current.Host.Source.Host, Application.Current.Host.Source.Port); }
public static bool CheckStash() { AreaEnum areaN = (AreaEnum)AreaManager.Instance.GetAreaIndexFromSceneName(SceneManagerHelper.ActiveSceneName); if (!StashAreaToStashUID.Keys.Contains(areaN)) { if (DEBUG) { MyLogger.LogDebug($" > Unknown area"); } return(false); } if (CharacterManager.Instance.PlayerCharacters.Count == 0) { if (DEBUG) { MyLogger.LogDebug($" > PlayerCharacters=0"); } return(false); } if (CharacterManager.Instance.PlayerCharacters.Values.Count == 0) { if (DEBUG) { MyLogger.LogDebug($" > PlayerCharacters.Values=0"); } return(false); } return(true); }
static void Main(string[] args) { Console.WriteLine("Please select what type of shape you wish to find the area of:\n1. Square\n2. Rectangle\n3. Triangle\n4. Circle\n"); int x = Convert.ToInt16(Console.ReadLine()); AreaEnum myValueAsEnum = (AreaEnum)x; Calculate(myValueAsEnum); }
public void FadeIn(AreaEnum areaEnum) { if (_currentArea == areaEnum) { return; } _taskManager.Do(FadeOutTask()); _taskManager.Do(FadeInTask(areaEnum)); }
public static void RefreshDisplay(ItemDetailsDisplay __instance, IItemDisplay _itemDisplay) { try { AreaEnum areaN = (AreaEnum)AreaManager.Instance.GetAreaIndexFromSceneName(SceneManagerHelper.ActiveSceneName); Text m_lblItemName = (Text)AccessTools.Field(typeof(ItemDetailsDisplay), "m_lblItemName").GetValue(__instance); if (m_lblItemName == null || _itemDisplay == null || _itemDisplay.RefItem == null) { return; } #region Show inventory and stash quantities in the name if (!(_itemDisplay.RefItem is Skill)) { int invQty = __instance.LocalCharacter.Inventory.ItemCount(_itemDisplay.RefItem.ItemID); int stashQty = 0; if (InnRentStash.StashAreaToStashUID.ContainsKey(areaN) && InnRentStash.Instance.ConfigStashSharing.Value) { TreasureChest stash = (TreasureChest)ItemManager.Instance.GetItem(InnRentStash.StashAreaToStashUID[areaN]); if (stash != null) { stashQty = stash.ItemStackCount(_itemDisplay.RefItem.ItemID); } } if (invQty + stashQty > 0) { //InnRentStash.MyLogger.LogDebug($"{_itemDisplay.RefItem.DisplayName}: invQty={invQty} / stashQty={stashQty}"); m_lblItemName.text += $" ({invQty + stashQty})"; } } #endregion #region Add Value/Weight Ratio information if (_itemDisplay.RefItem.Value > 0 && _itemDisplay.RefItem.Weight > 0 && _itemDisplay.RefItem.IsSellable) { List <ItemDetailRowDisplay> m_detailRows = (List <ItemDetailRowDisplay>)AccessTools.Field(typeof(ItemDetailsDisplay), "m_detailRows").GetValue(__instance); //ItemDetailRowDisplay row = (ItemDetailRowDisplay)AccessTools.Method(typeof(ItemDetailsDisplay), "GetRow").Invoke(__instance, new object[] { m_detailRows.Count }); //row.SetInfo("Value rate", Math.Round(_itemDisplay.RefItem.Value / _itemDisplay.RefItem.Weight, 2).ToString()); } #endregion #region Add Durability information if (_itemDisplay.RefItem.IsPerishable && _itemDisplay.RefItem.CurrentDurability > 0 && !_itemDisplay.RefItem.DisplayedInfos.ToList().Contains(DisplayedInfos.Durability)) { List <ItemDetailRowDisplay> m_detailRows = (List <ItemDetailRowDisplay>)AccessTools.Field(typeof(ItemDetailsDisplay), "m_detailRows").GetValue(__instance); //ItemDetailRowDisplay row = (ItemDetailRowDisplay)AccessTools.Method(typeof(ItemDetailsDisplay), "GetRow").Invoke(__instance, new object[] { m_detailRows.Count }); //row.SetInfo(LocalizationManager.Instance.GetLoc("ItemStat_Durability"), GameTimetoDays(_itemDisplay.RefItem.CurrentDurability / _itemDisplay.RefItem.PerishScript.DepletionRate)); } #endregion } catch (Exception ex) { //InnRentStash.MyLogger.LogError("RefreshDisplay: " + ex.Message); } }
public static double ConversionFactor(this AreaEnum unitEnum) { switch (unitEnum) { case AreaEnum.SquareInches: return(1); case AreaEnum.SquareFeet: return(144); case AreaEnum.Acre: return(6272640); default: throw new ArgumentOutOfRangeException(nameof(unitEnum), unitEnum, null); } }
public static string Abbreviation(this AreaEnum unitEnum) { switch (unitEnum) { case AreaEnum.SquareInches: return("sq. in."); case AreaEnum.SquareFeet: return("sq. ft."); case AreaEnum.Acre: return("acres"); default: throw new ArgumentOutOfRangeException(nameof(unitEnum), unitEnum, null); } }
public static void AddEvent(string _eventUID, bool __result) { //InnRentStash.MyLogger.LogDebug($"AddEvent({_eventUID})={__result}"); if (!__result) { return; } try { AreaEnum areaN = (AreaEnum)Instance.GetAreaIndexFromSceneName(SceneManagerHelper.ActiveSceneName); //if (string.IsNullOrEmpty(m_currentArea)) return res; if (!InnRentStash.StashAreaToQuestEvent.ContainsKey(areaN)) { return; } if (InnRentStash.CurrentStash == null) { return; } // If event is house buying, cancel previous rent event /*if (QuestEventManager.Instance.GetQuestEvent(_eventUID).Name == $"PlayerHouse_{m_currentArea}_HouseAvailable" && * QuestEventManager.Instance.HasQuestEvent(StashAreaToQuestEvent[m_currentArea].QuestEvent)) * { * QuestEventManager.Instance.RemoveEvent(StashAreaToQuestEvent[m_currentArea].QuestEvent.EventUID); * m_currentStash.SetCanInteract(true); * //character.CharacterUI.SmallNotificationPanel.ShowNotification($"Rent canceled", 5f); * //DoLog(" Rent canceled (house bought)"); * }*/ // If event is rent, activate the stash if (_eventUID == InnRentStash.StashAreaToQuestEvent[areaN].QuestEvent.EventUID) { InnRentStash.CurrentStash.SetCanInteract(true); //InnRentStash.MyLogger.LogDebug("Activate stash"); } } catch (Exception ex) { InnRentStash.MyLogger.LogError("AddEvent: " + ex.Message); } }
private DelegateTask FadeInTask(AreaEnum areaEnum) { float _elapsedTime = 0f; _curASIndex = OtherASIndex; AudioSource _curAS = _audioSources[_curASIndex]; _curAS.clip = areaToClip[areaEnum]; _curAS.Play(); _curAS.time = OtherAS.time % _curAS.clip.length; _currentArea = areaEnum; return(new DelegateTask( () => { }, () => { _elapsedTime += Time.deltaTime; _curAS.volume = _elapsedTime / _fadeDuration; _curAS.volume = Mathf.Lerp(0, _musicVolume, _elapsedTime / _fadeDuration); return _elapsedTime >= _fadeDuration; } )); }
static double Calculate(AreaEnum a) { int x, i, j; i = 0; j = 0; Area area = new Area(); switch (a) { case AreaEnum.Square: { return(Area.Square(i)); } case AreaEnum.Rectangle: { return(Area.Rectangle(j, i)); } case AreaEnum.Triangle: { return(Area.Triangle(j, i)); } case AreaEnum.Circle: { return(Area.Circle(i)); } default: { Console.WriteLine("That is an invalid choice"); return(0); } } }
/// <summary> /// Autorização por área de acesso /// </summary> public AuthorizeFilter(AreaEnum area, ModeEnum mode) { Area = area; Mode = mode; }
public static void CheckRentStatus() { try { AreaEnum areaN = (AreaEnum)AreaManager.Instance.GetAreaIndexFromSceneName(SceneManagerHelper.ActiveSceneName); if (DEBUG) { MyLogger.LogDebug($"CheckRentStatus={areaN}"); } if (!CheckStash()) { return; } Character character = CharacterManager.Instance.GetCharacter(CharacterManager.Instance.PlayerCharacters.Values[0]); CurrentStash = (TreasureChest)ItemManager.Instance.GetItem(StashAreaToStashUID[areaN]); if (!StashAreaToStashUID.Values.Contains(CurrentStash.UID)) { CurrentStash = null; if (DEBUG) { MyLogger.LogDebug($" > Unknown stash"); } return; } if (CurrentStash == null) { if (DEBUG) { MyLogger.LogDebug($" > NullStash"); } return; } //OLogger.Log($"Silver={m_currentStash.ContainedSilver}"); // If we are in Cierzo, check quest failure if (areaN == AreaEnum.CierzoVillage) { if (QuestEventManager.Instance.CurrentQuestEvents.Count(q => q.Name == $"General_NotLighthouseOwner") > 0) { CurrentStash = null; } return; } if (QuestEventManager.Instance.CurrentQuestEvents.Count(q => q.Name == $"PlayerHouse_{areaN}_HouseAvailable") > 0) { // House has been bought here, cancel rent event if present if (DEBUG) { MyLogger.LogDebug(" > House bought here"); } if (QuestEventManager.Instance.HasQuestEvent(StashAreaToQuestEvent[areaN].QuestEvent)) { QuestEventManager.Instance.RemoveEvent(StashAreaToQuestEvent[areaN].QuestEvent.EventUID); } return; } #region Move stash to inn Vector3 newPos = StashAreaToQuestEvent[areaN].StashPosition; Quaternion newRot = StashAreaToQuestEvent[areaN].StashRotation; CurrentStash.transform.SetPositionAndRotation(newPos, newRot); //ItemVisual iv2 = ItemManager.GetVisuals(m_currentStash.ItemID); //ItemVisual iv2 = ItemManager.GetVisuals(m_currentStash); Transform transform = UnityEngine.Object.Instantiate(CurrentStash.GetItemVisual()); ItemVisual iv2 = transform.GetComponent <ItemVisual>(); //ItemVisual iv2 = UnityEngine.Object.Instantiate(m_currentStash.LoadedVisual); iv2.ItemID = CurrentStash.ItemID; //ItemVisual iv2 = m_currentStash.LoadedVisual; iv2.transform.SetPositionAndRotation(newPos, newRot); #endregion CurrentStash.SetCanInteract(false); if (QuestEventManager.Instance.HasQuestEvent(StashAreaToQuestEvent[areaN].QuestEvent)) { if (QuestEventManager.Instance.CheckEventExpire(StashAreaToQuestEvent[areaN].QuestEvent.EventUID, Instance.ConfigRentDuration.Value * 24)) { //m_notification = $"Rent has expired!"; character.CharacterUI.SmallNotificationPanel.ShowNotification("Rent has expired!", 8f); QuestEventManager.Instance.RemoveEvent(StashAreaToQuestEvent[areaN].QuestEvent.EventUID); if (DEBUG) { MyLogger.LogDebug(" > Rent expired!"); } } else { //m_notification = "Rent ongoing"; character.CharacterUI.SmallNotificationPanel.ShowNotification("Rent ongoing", 8f); CurrentStash.SetCanInteract(true); if (DEBUG) { MyLogger.LogDebug(" > Rent still valid"); } } } else { if (DEBUG) { MyLogger.LogDebug($" > NoQuestEvent"); } } } catch (Exception ex) { MyLogger.LogError("CheckRentStatus: " + ex.Message); } }
public static void OnActivate(NPCInteraction __instance) { try { //SoroboreanTravelAgency.Instance.MyLogger.LogDebug(__instance.ActorLocKey); Character character = CharacterManager.Instance.GetCharacter(CharacterManager.Instance.PlayerCharacters.Values[0]); if (character == null) { return; } if (StoreManager.Instance.IsDlcInstalled(OTWStoreAPI.DLCs.Soroboreans)) { return; } AreaEnum areaN = (AreaEnum)AreaManager.Instance.GetAreaIndexFromSceneName(SceneManagerHelper.ActiveSceneName); if (!SoroboreanTravelAgency.StartAreaToTravel.ContainsKey(areaN)) { return; } SoroboreanTravelAgency.TravelDayCost = (int)(float)SoroboreanTravelAgency.Instance.MyConfig.GetValue("Travel Day Cost"); // 80 - 100 - 120 if (areaN == AreaEnum.Levant) // TODO: check quest "Blood under the Sun" { SoroboreanTravelAgency.TravelDayCost = (int)(SoroboreanTravelAgency.TravelDayCost * 1.75); // 140 - 175 - 210 } // TODO: HallowPeaceGuardBlock if (__instance.ActorLocKey == "name_unpc_caravantrader_01") { var graphOwner = __instance.NPCDialogue.DialogueController; var graph = (Graph)graphOwner.GetType().BaseType.GetField("_graph", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(graphOwner as GraphOwner <DialogueTreeExt>); var nodes = typeof(Graph).GetField("_nodes", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(graph as Graph) as List <Node>; var firstNode = (nodes.First(n => n.GetType().Name == "MultipleChoiceNodeExt") as MultipleChoiceNodeExt); if (SoroboreanTravelAgency.DialogIsSet) { foreach (var node in graph.allNodes.Where(n => n.tag == "SoroboreanTravelAgency").ToList()) { graph.RemoveNode(node); } firstNode.availableChoices.RemoveAll(c => c.statement.meta == "TRAVEL"); } int cnt = firstNode.availableChoices.Count - 2; firstNode.availableChoices.Insert(cnt, new MultipleChoiceNodeExt.Choice(new Statement("I want to travel, please.", GlobalAudioManager.Sounds.BGM_Empty, "TRAVEL"))); StatementNodeExt nStart = graph.AddNode <StatementNodeExt>(); nStart.tag = "SoroboreanTravelAgency"; nStart.statement = new Statement($"Where do you want to go?"); nStart.SetActorName(__instance.ActorLocKey); StatementNodeExt nResultMoneyBad = graph.AddNode <StatementNodeExt>(); nResultMoneyBad.tag = "SoroboreanTravelAgency"; nResultMoneyBad.statement = new Statement("Sorry, you don't have enough silver. Come back when you can afford it!"); nResultMoneyBad.SetActorName(__instance.ActorLocKey); StatementNodeExt nResultRationsBad = graph.AddNode <StatementNodeExt>(); nResultRationsBad.tag = "SoroboreanTravelAgency"; nResultRationsBad.statement = new Statement("Sorry, you don't have enough rations to travel this far."); nResultRationsBad.SetActorName(__instance.ActorLocKey); StatementNodeExt nCancel = graph.AddNode <StatementNodeExt>(); nCancel.tag = "SoroboreanTravelAgency"; nCancel.statement = new Statement("See you soon!"); nCancel.SetActorName(__instance.ActorLocKey); FinishNode nFinish = graph.AddNode <FinishNode>(); nFinish.tag = "SoroboreanTravelAgency"; StatementNodeExt nNoDestination = graph.AddNode <StatementNodeExt>(); nNoDestination.tag = "SoroboreanTravelAgency"; nNoDestination.statement = new Statement("Sorry, you have not discovered any other town... You can only travel to places you visited at least once!"); nNoDestination.SetActorName(__instance.ActorLocKey); bool hasEntry = false; MultipleChoiceNodeExt nChoose = graph.AddNode <MultipleChoiceNodeExt>(); nChoose.tag = "SoroboreanTravelAgency"; foreach (StrTravel travel in SoroboreanTravelAgency.StartAreaToTravel[areaN]) { //if (!QuestEventManager.Instance.HasQuestEvent(SoroboreanTravelAgency.AreaToQuestEvent[travel.TargetArea])) if (!(bool)SoroboreanTravelAgency.Instance.MyConfig.GetValue(travel.TargetArea + "Visited")) { continue; // This town has not been visited yet } hasEntry = true; string areaLabel = travel.TargetArea.ToString(); if (travel.TargetArea == AreaEnum.CierzoVillage) { areaLabel = "Cierzo"; } int rationsCost = travel.DurationDays; int moneyCost = travel.DurationDays * SoroboreanTravelAgency.TravelDayCost; string msgCost = $"{areaLabel} ({moneyCost} silver and {rationsCost} rations)."; if (travel.DurationDays == 0) { rationsCost = 0; moneyCost = SoroboreanTravelAgency.TravelDayCost; msgCost = $"{areaLabel} ({moneyCost} silver)."; } nChoose.availableChoices.Add(new MultipleChoiceNodeExt.Choice(new Statement(msgCost))); ConditionNode nCheckMoney = graph.AddNode <ConditionNode>(); nCheckMoney.tag = "SoroboreanTravelAgency"; nCheckMoney.condition = new Condition_OwnsItem() { character = character, item = new ItemReference { ItemID = 9000010 }, minAmount = moneyCost }; ConditionNode nCheckRations = graph.AddNode <ConditionNode>(); nCheckRations.tag = "SoroboreanTravelAgency"; nCheckRations.condition = new Condition_OwnsItem() { character = character, item = new ItemReference { ItemID = 4100550 }, // Travel Ration minAmount = rationsCost }; graph.ConnectNodes(nChoose, nCheckMoney); ActionNode nWishRent = graph.AddNode <ActionNode>(); nWishRent.tag = "SoroboreanTravelAgency"; ActionList actions = new ActionList(); actions.AddAction(new NodeCanvas.Tasks.Actions.PlaySound() { Sound = GlobalAudioManager.Sounds.UI_MERCHANT_CompleteTransaction }); actions.AddAction(new NodeCanvas.Tasks.Actions.FadeOut() { fadeTime = 1.0f }); actions.AddAction(new SetTravelArea() { Script = SoroboreanTravelAgency.Instance, TargetArea = travel.TargetArea }); actions.AddAction(new AreaSwitchPlayersTime() { Character = new BBParameter <Character>(character), Area = travel.TargetArea, IncreaseTime = travel.DurationDays * 24 }); actions.AddAction(new NodeCanvas.Tasks.Actions.RemoveItem() { fromCharacter = new BBParameter <Character>(character), Items = new List <BBParameter <ItemReference> >() { new ItemReference { ItemID = 9000010 }, new ItemReference { ItemID = 4100550 } }, Amount = new List <BBParameter <int> >() { new BBParameter <int>(moneyCost), new BBParameter <int>(rationsCost) }, }); nWishRent.action = actions; graph.ConnectNodes(nCheckMoney, nCheckRations); graph.ConnectNodes(nCheckMoney, nResultMoneyBad); graph.ConnectNodes(nCheckRations, nWishRent); graph.ConnectNodes(nCheckRations, nResultRationsBad); graph.ConnectNodes(nWishRent, nFinish); } if (hasEntry) { graph.ConnectNodes(firstNode, nStart, cnt); nChoose.availableChoices.Add(new MultipleChoiceNodeExt.Choice(new Statement("Changed my mind."))); graph.ConnectNodes(nStart, nChoose); graph.ConnectNodes(nChoose, nCancel); } else { graph.ConnectNodes(firstNode, nNoDestination, cnt); } graph.ConnectNodes(nResultMoneyBad, nFinish); graph.ConnectNodes(nResultRationsBad, nFinish); graph.ConnectNodes(nNoDestination, nFinish); graph.ConnectNodes(nCancel, nFinish);//*/ SoroboreanTravelAgency.DialogIsSet = true; } } catch (Exception ex) { SoroboreanTravelAgency.Instance.MyLogger.LogError(ex.Message); } }
protected virtual int GetTurnCost(Point at, Point move) { int cost = int.MaxValue; AreaEnum tipeArea = map[at.X, at.Y].AreaType; switch (tipeArea) { case AreaEnum.LowDensity: cost = 1; break; case AreaEnum.MediumDensity: cost = 2; break; case AreaEnum.HighDensity: cost = 3; break; } BloodStream bs = map.IsInStream(at.X, at.Y); if (bs != null) { if (bs.Direction == BloodStreamDirection.EstWest) { if (move.X == -1) { cost -= 2; } else if (move.X == 1) { cost += 2; } } else if (bs.Direction == BloodStreamDirection.NorthSouth) { if (move.Y == 1) { cost -= 2; } else if (move.Y == -1) { cost += 2; } } else if (bs.Direction == BloodStreamDirection.SouthNorth) { if (move.Y == -1) { cost -= 2; } else if (move.Y == 1) { cost += 2; } } else if (bs.Direction == BloodStreamDirection.WestEst) { if (move.X == 1) { cost -= 2; } else if (move.X == -1) { cost += 2; } } } if (cost <= 0) { cost = 1; } return(cost); }
public static void UnPauseGameplay(NetworkLevelLoader __instance, string _identifier) { try { AreaEnum areaN = (AreaEnum)AreaManager.Instance.GetAreaIndexFromSceneName(SceneManagerHelper.ActiveSceneName); foreach (var aqe in SoroboreanTravelAgency.AreaToQuestEvent) { if (!QuestEventManager.Instance.HasQuestEvent(aqe.Value) && ( aqe.Key == areaN || aqe.Key == AreaEnum.CierzoVillage || aqe.Key == AreaEnum.Monsoon && QuestEventManager.Instance.CurrentQuestEvents.Any(e => e.Name == "PlayerHouse_Monsoon_HouseAvailable" || e.Name == "Faction_HolyMission") || aqe.Key == AreaEnum.Berg && QuestEventManager.Instance.CurrentQuestEvents.Any(e => e.Name == "PlayerHouse_Berg_HouseAvailable" || e.Name == "Faction_BlueChamber") || aqe.Key == AreaEnum.Levant && QuestEventManager.Instance.CurrentQuestEvents.Any(e => e.Name == "PlayerHouse_Levant_HouseAvailable" || e.Name == "Faction_HeroicKingdom") )) { SoroboreanTravelAgency.Instance.MyLogger.LogDebug("AddEvent=" + aqe.Key); QuestEventManager.Instance.AddEvent(SoroboreanTravelAgency.AreaToQuestEvent[aqe.Key]); SoroboreanTravelAgency.Instance.MyConfig.SetValue(aqe.Key + "Visited", true); } } if (SoroboreanTravelAgency.TravelArea > -1) { Character character = CharacterManager.Instance.GetCharacter(CharacterManager.Instance.PlayerCharacters.Values[0]); if (character == null) { return; } Vector3 position = Vector3.up; Quaternion rotation = Quaternion.identity; switch ((AreaEnum)SoroboreanTravelAgency.TravelArea) { case AreaEnum.CierzoVillage: position = new Vector3(1410.4f, 5.9f, 1664.0f); rotation = Quaternion.Euler(0.0f, 240.9f, 0.0f); break; case AreaEnum.Monsoon: position = new Vector3(61.8f, -4.9f, 179.2f); rotation = Quaternion.Euler(0.0f, 286.7f, 0.0f); break; case AreaEnum.Berg: position = new Vector3(1201.5f, -13.7f, 1375.6f); rotation = Quaternion.Euler(0.0f, 311.5f, 0.0f); break; case AreaEnum.Levant: position = new Vector3(-53.9f, 0.1f, 81.0f); rotation = Quaternion.Euler(0.0f, 173.9f, 0.0f); break; default: throw new Exception("unk"); } character.transform.SetPositionAndRotation(position, rotation); character.CharacterCamera.ResetCameraToPlayer(); } SoroboreanTravelAgency.TravelArea = -1; SoroboreanTravelAgency.DialogIsSet = false; } catch (Exception ex) { SoroboreanTravelAgency.Instance.MyLogger.LogError(ex.Message); } }
AreaType(AreaEnum unitEnum) { UnitEnum = unitEnum; }
public static void OnActivate(NPCInteraction __instance) { try { AreaEnum areaN = (AreaEnum)AreaManager.Instance.GetAreaIndexFromSceneName(SceneManagerHelper.ActiveSceneName); if (!InnRentStash.StashAreaToQuestEvent.ContainsKey(areaN) || CharacterManager.Instance.PlayerCharacters.Count == 0) { return; } Character character = CharacterManager.Instance.GetCharacter(CharacterManager.Instance.PlayerCharacters.Values[0]); if (character == null) { return; } if (__instance.ActorLocKey != InnRentStash.StashAreaToQuestEvent[areaN].NpcName) { return; } var graphOwner = __instance.NPCDialogue.DialogueController; var graph = (Graph)graphOwner.GetType().BaseType.GetField("_graph", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(graphOwner as GraphOwner <DialogueTreeExt>); var nodes = typeof(Graph).GetField("_nodes", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(graph as Graph) as List <Node>; var firstNode = nodes.First(n => n.GetType().Name == "MultipleChoiceNodeExt") as MultipleChoiceNodeExt; foreach (var node in graph.allNodes.Where(n => n.tag == "InnRentStash").ToList()) { graph.RemoveNode(node); } firstNode.availableChoices.RemoveAll(c => c.statement.meta == "RENT"); //TreeNode<Node>.DebugDialogue(nodes[0], 0); /* Un dialogue c'est: afficher un texte + action(optionnel) + choix(optionnel) * * Outil de conversion Graph --> ma structure */ firstNode.availableChoices.Insert(1, new MultipleChoiceNodeExt.Choice(new Statement("I want to rent a stash, please.", GlobalAudioManager.Sounds.BGM_Empty, "RENT"))); StatementNodeExt nStart = graph.AddNode <StatementNodeExt>(); nStart.tag = "InnRentStash"; nStart.statement = new Statement($"Of course! Renting a stash costs only {InnRentStash.Instance.ConfigRentPrice.Value} silver for one week."); nStart.SetActorName(__instance.ActorLocKey); MultipleChoiceNodeExt nChoose = graph.AddNode <MultipleChoiceNodeExt>(); nChoose.tag = "InnRentStash"; nChoose.availableChoices.Add(new MultipleChoiceNodeExt.Choice(new Statement("Sh*t up and take my money!"))); nChoose.availableChoices.Add(new MultipleChoiceNodeExt.Choice(new Statement("I will be back."))); ConditionNode nCheckMoney = graph.AddNode <ConditionNode>(); nCheckMoney.tag = "InnRentStash"; nCheckMoney.condition = new Condition_OwnsItem() { character = character, item = new ItemReference { ItemID = 9000010 }, minAmount = InnRentStash.Instance.ConfigRentPrice.Value }; ConditionNode nCheckHouse = graph.AddNode <ConditionNode>(); nCheckHouse.tag = "InnRentStash"; nCheckHouse.condition = new Condition_QuestEventOccured() { QuestEventRef = new QuestEventReference { EventUID = InnRentStash.StashAreaToQuestEvent[areaN].PlayerHouseQuestEventUID } }; StatementNodeExt nCheckHouseBad = graph.AddNode <StatementNodeExt>(); nCheckHouseBad.tag = "InnRentStash"; nCheckHouseBad.statement = new Statement("You have a house, no need to rent a stash anymore."); nCheckHouseBad.SetActorName(__instance.ActorLocKey); ConditionNode nCheckAlready = graph.AddNode <ConditionNode>(); nCheckAlready.tag = "InnRentStash"; nCheckAlready.condition = new Condition_QuestEventOccured() { QuestEventRef = new QuestEventReference { EventUID = InnRentStash.StashAreaToQuestEvent[areaN].QuestEvent.EventUID } }; StatementNodeExt nCheckAlreadyBad = graph.AddNode <StatementNodeExt>(); nCheckAlreadyBad.tag = "InnRentStash"; nCheckAlreadyBad.statement = new Statement("You've already rented a stash for the week! Just use it."); nCheckAlreadyBad.SetActorName(__instance.ActorLocKey); ActionNode nWishRent = graph.AddNode <ActionNode>(); nWishRent.tag = "InnRentStash"; ActionList action = new ActionList(); action.AddAction(new NodeCanvas.Tasks.Actions.RemoveItem() { fromCharacter = new BBParameter <Character>(character), Items = new List <BBParameter <ItemReference> >() { new ItemReference { ItemID = 9000010 } }, Amount = new List <BBParameter <int> >() { new BBParameter <int>(InnRentStash.Instance.ConfigRentPrice.Value) }, }); action.AddAction(new NodeCanvas.Tasks.Actions.SendQuestEvent() { QuestEventRef = new QuestEventReference { EventUID = InnRentStash.StashAreaToQuestEvent[areaN].QuestEvent.EventUID } }); action.AddAction(new NodeCanvas.Tasks.Actions.PlaySound() { Sound = GlobalAudioManager.Sounds.UI_MERCHANT_CompleteTransaction }); nWishRent.action = action; StatementNodeExt nResultOk = graph.AddNode <StatementNodeExt>(); nResultOk.tag = "InnRentStash"; nResultOk.statement = new Statement("Thanks, I've unlocked the stash for you."); nResultOk.SetActorName(__instance.ActorLocKey); StatementNodeExt nResultBad = graph.AddNode <StatementNodeExt>(); nResultBad.tag = "InnRentStash"; nResultBad.statement = new Statement("Sorry, you don't have enough silver. Come back when you can afford it!"); nResultBad.SetActorName(__instance.ActorLocKey); StatementNodeExt nCancel = graph.AddNode <StatementNodeExt>(); nCancel.tag = "InnRentStash"; nCancel.statement = new Statement("See you soon!"); nCancel.SetActorName(__instance.ActorLocKey); FinishNode nFinish = graph.AddNode <FinishNode>(); nFinish.tag = "InnRentStash"; graph.ConnectNodes(firstNode, nCheckHouse, 1); // Check if the player owns the house of the town graph.ConnectNodes(nCheckHouse, nCheckHouseBad); // The player owns it --> exit graph.ConnectNodes(nCheckHouse, nCheckAlready); // Check if the player has already a rent ongoing in the town graph.ConnectNodes(nCheckAlready, nCheckAlreadyBad); // The player already has the rent --> exit graph.ConnectNodes(nCheckAlready, nStart); // All checks successfull, we can show the pricefor the rent graph.ConnectNodes(nStart, nChoose); // Show the choices for the player (to rent or not) graph.ConnectNodes(nChoose, nCheckMoney); // Check if the player has enough money graph.ConnectNodes(nChoose, nCancel); // The player doesn't want to rent --> exit graph.ConnectNodes(nCheckMoney, nWishRent); // The player has enough money, go activate the rent graph.ConnectNodes(nCheckMoney, nResultBad); // The player doesn't have enough money --> exit graph.ConnectNodes(nWishRent, nResultOk); // Activate the rent! graph.ConnectNodes(nCheckHouseBad, nFinish); graph.ConnectNodes(nCheckAlreadyBad, nFinish); graph.ConnectNodes(nResultBad, nFinish); graph.ConnectNodes(nResultOk, nFinish); graph.ConnectNodes(nCancel, nFinish);//*/ } catch (Exception ex) { InnRentStash.MyLogger.LogError("OnActivate: " + ex.Message); } }
/// <summary> /// converts specific enum to hebrew /// </summary> /// <param name="myEnum"></param> /// <returns></returns> public static string Area(AreaEnum myEnum) { return(getListStrings <AreaEnum>().ToList()[(int)myEnum]); }