diff --git a/changelog.txt b/changelog.txt index b2e74a626..865c82173 100644 --- a/changelog.txt +++ b/changelog.txt @@ -4,6 +4,9 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50) Uleat: Reworked bard bot spell twisting and updated their spell (song) list Uleat: Added ability to shift to pre-combat song buffing by selecting a non-pet npc target, eliminating the need to mix all bard buff songs together +== 2/19/2017 == +Akkadius: Added a fix for limiting the amount of items sold in a stack when the resulting return coin is higher than the supporting struct for returning coin + == 01/31/2017 == Uleat: Modifed bot movement behavior in an attempt to 'normalize' it. This is a hack fix and will be revisited at some point. (Probably just need a follow function rather than use movement, when the leader of the follow chain is moving.) diff --git a/common/features.h b/common/features.h index 27390e745..4140014d8 100644 --- a/common/features.h +++ b/common/features.h @@ -235,6 +235,9 @@ enum { //some random constants #define ZONE_CONTROLLER_NPC_ID 10 +// Timer to update aggrometer +#define AGGRO_METER_UPDATE_MS 1000 + //Some hard coded statuses from commands and other places: enum { minStatusToBeGM = 40, diff --git a/common/ruletypes.h b/common/ruletypes.h index a0bf01496..20430735a 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -114,7 +114,7 @@ RULE_BOOL(Character, CheckCursorEmptyWhenLooting, true) // If true, a player can RULE_BOOL(Character, MaintainIntoxicationAcrossZones, true) // If true, alcohol effects are maintained across zoning and logging out/in. RULE_BOOL(Character, EnableDiscoveredItems, true) // If enabled, it enables EVENT_DISCOVER_ITEM and also saves character names and timestamps for the first time an item is discovered. RULE_BOOL(Character, EnableXTargetting, true) // Enable Extended Targetting Window, for users with UF and later clients. -RULE_BOOL(Character, EnableAggroMeter, true) // Enable Aggro Meter, for users with RoF and later clients. +RULE_BOOL(Character, EnableAggroMeter, false) // Enable Aggro Meter, for users with RoF and later clients. RULE_BOOL(Character, KeepLevelOverMax, false) // Don't delevel a character that has somehow gone over the level cap RULE_INT(Character, FoodLossPerUpdate, 35) // How much food/water you lose per stamina update RULE_INT(Character, BaseInstrumentSoftCap, 36) // Softcap for instrument mods, 36 commonly referred to as "3.6" as well. diff --git a/world/console.cpp b/world/console.cpp index 5f1598654..b8a0b419a 100644 --- a/world/console.cpp +++ b/world/console.cpp @@ -68,7 +68,7 @@ void CatchSignal(int sig_num); Console::Console(EmuTCPConnection* itcpc) : WorldTCPConnection(), timeout_timer(RuleI(Console, SessionTimeOut)), - prompt_timer(1000) + prompt_timer(1) { tcpc = itcpc; tcpc->SetEcho(true); diff --git a/zone/client.cpp b/zone/client.cpp index 5f3d3ac81..40a919d2b 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -154,7 +154,7 @@ Client::Client(EQStreamInterface* ieqs) afk_toggle_timer(250), helm_toggle_timer(250), light_update_timer(600), - aggro_meter_timer(1000), + aggro_meter_timer(AGGRO_METER_UPDATE_MS), m_Proximity(FLT_MAX, FLT_MAX, FLT_MAX), //arbitrary large number m_ZoneSummonLocation(-2.0f,-2.0f,-2.0f), m_AutoAttackPosition(0.0f, 0.0f, 0.0f, 0.0f), @@ -7430,7 +7430,7 @@ void Client::ProcessXTargetAutoHaters() auto &haters = GetXTargetAutoMgr()->get_list(); for (auto &e : haters) { auto *mob = entity_list.GetMob(e.spawn_id); - if (!IsXTarget(mob)) { + if (mob && !IsXTarget(mob)) { auto slot = empty_slots.front(); empty_slots.pop(); XTargets[slot].dirty = true; diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 67e085d0d..1c5e4ebfd 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -12447,7 +12447,7 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app) uint32 i; if (RuleB(Merchant, UsePriceMod)) { - for (i = 0; i < cost_quantity; i++) { + for (i = 1; i <= cost_quantity; i++) { price = (uint32)((item->Price * i)*(RuleR(Merchant, BuyCostMod))*Client::CalcPriceMod(vendor, true) + 0.5); // need to round up, because client does it automatically when displaying price if (price > 4000000000) { cost_quantity = i; @@ -12457,7 +12457,7 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app) } } else { - for (i = 0; i < cost_quantity; i++) { + for (i = 1; i <= cost_quantity; i++) { price = (uint32)((item->Price * i)*(RuleR(Merchant, BuyCostMod)) + 0.5); // need to round up, because client does it automatically when displaying price if (price > 4000000000) { cost_quantity = i;