private void PrepareDebtTake() { try { NWCreature self = (NWCreature)fSelf; Building shop = self.FindHouse(); NWCreature debtor = null; Player player = GlobalVars.nwrGame.Player; int debt = player.GetDebt(self.Name); if (debt > 0 && self.IsAvailable(player, true) && !player.InRect(shop.Area)) { debtor = player; } DebtTakeGoal dtGoal = (DebtTakeGoal)FindGoalByKind(GoalKind.gk_DebtTake); if (debtor != null) { if (dtGoal == null) { dtGoal = ((DebtTakeGoal)CreateGoal(GoalKind.gk_DebtTake)); } dtGoal.Debtor = debtor; } else { if (dtGoal != null) { ReleaseGoal(dtGoal); } } } catch (Exception ex) { Logger.Write("TraderBrain.prepareDebtTake(): " + ex.Message); } }
protected override GoalEntity CreateGoalEx(int goalKind) { GoalEntity result = null; switch (goalKind) { case GoalKind.gk_Travel: result = new TravelGoal(this); break; case GoalKind.gk_PointGuard: result = new PointGuardGoal(this); break; case GoalKind.gk_ItemAcquire: result = new ItemAcquireGoal(this); break; case GoalKind.gk_EnemyChase: result = new EnemyChaseGoal(this); break; case GoalKind.gk_EnemyEvade: result = new EnemyEvadeGoal(this); break; case GoalKind.gk_AreaGuard: result = new AreaGuardGoal(this); break; case GoalKind.gk_ShopReturn: result = new ShopReturnGoal(this); break; case GoalKind.gk_PlayerFind: result = new PlayerFindGoal(this); break; case GoalKind.gk_Escort: result = new EscortGoal(this); break; case GoalKind.gk_Flock: result = new FlockGoal(this); break; case GoalKind.gk_DebtTake: result = new DebtTakeGoal(this); break; case GoalKind.gk_WareReturn: result = new WareReturnGoal(this); break; case GoalKind.gk_Stalk: result = new StalkGoal(this); break; } return(result); }
protected override void EvaluateGoal(GoalEntity goal) { try { NWCreature self = (NWCreature)fSelf; int gk = goal.Kind; switch (gk) { case GoalKind.gk_ShopReturn: goal.Value = 0.23f; break; case GoalKind.gk_DebtTake: { DebtTakeGoal dtGoal = (DebtTakeGoal)goal; if (self.IsAvailable(dtGoal.Debtor, true)) { goal.Value = 1f; } else { goal.Value = 0.1f; } } break; case GoalKind.gk_WareReturn: Building house = (Building)self.FindHouse(); if (house.Area.Contains(self.PosX, self.PosY)) { goal.Value = 0.9f; } else { goal.Value = 0.22f; } break; default: base.EvaluateGoal(goal); break; } } catch (Exception ex) { Logger.Write("TraderBrain.evaluateGoal(): " + ex.Message); } }