Compare commits

..

3766 Commits

Author SHA1 Message Date
David Cernat 8aad93b904
Merge pull request #519 from TES3MP/0.7.0-alpha
[General] Update positions for dead players on other clients
6 years ago
David Cernat 3effd5f1ff [General] Update positions for dead players on other clients
Dead players will now show up at the correct cell and position for living players, making server scripts that allow players to revive each other much more functional.
6 years ago
David Cernat 4692f29b9d
Merge pull request #517 from uramer/0.7.0markers
update player map markers when client changes cell
6 years ago
David Cernat 03d377ec54
Merge pull request #518 from TES3MP/0.7.0-alpha
[General] Rename CellReplace packet into CellReset
6 years ago
David Cernat 8ff2d1b829 [General] Rename CellReplace packet into CellReset 6 years ago
David Cernat cb82318c36 [General] Fix problems with Utils::getArchitectureType() 6 years ago
uramer 3b2098382b update player map markers when client changes cell 6 years ago
David Cernat cb5e24e6c5
Merge pull request #516 from TES3MP/0.7.0-alpha
[Server] Add GetMillisecondsSinceServerStart() server function
6 years ago
David Cernat 91f82d845c [Server] Add GetMillisecondsSinceServerStart() server function 6 years ago
David Cernat d35026bbf5
Merge pull request #515 from TES3MP/0.7.0-alpha
0.7.0 alpha
6 years ago
David Cernat bd677726bf [Server] Add StatsFunctions that get/set damage to attributes/skills 6 years ago
David Cernat 9fc4c83858 [Client] Send skill/attribute packets when skills/attributes are damaged 6 years ago
David Cernat ece39748de [Server] Fix typo causing recursion in deprecated actor list function 6 years ago
David Cernat 5c4d3df551 [Server] Deprecate DoesFileExist(), add DoesFilePathExist() 6 years ago
David Cernat 2cdabddc0e [Server] Move most MiscellaneousFunctions to ServerFunctions 6 years ago
David Cernat b46767de6e [Server] Clean up recent additions to ServerFunctions 6 years ago
David Cernat 911079e0bc
Merge pull request #512 from TES3MP/0.7.0-alpha
0.7.0 alpha
6 years ago
David Cernat 331fa86844 [Server] Call OnServerPostInit after OnRequestDataFileList
This allows different actions to be taken in OnServerPostInit based on what the data files being used are.
6 years ago
David Cernat a0ec9dfd2e [Server] Rename OnRequestPluginList into OnRequestDataFileList 6 years ago
David Cernat 986528c67d [Server] Add error message as argument to OnServerScriptCrash 6 years ago
David Cernat 552a94a0ca [Server] Add OnServerScriptCrash script event 6 years ago
David Cernat a508a0faf8 [Server] Turn GetArguments() from ScriptFunctions into Utils function 6 years ago
David Cernat dcbc9d1831 [Client] Print cells for actor deaths 6 years ago
David Cernat 828c52138f [Documentation] Update readme and credits
According to some legal advice I've received, the "TES3MP Team" is too ambiguous of a legal entity, so – with Koncord's agreement – the copyright is now assigned specifically to us, the project's developers.
6 years ago
David Cernat 69e7d3f2a7 [Documentation] Update credits 6 years ago
David Cernat f3b8a5b909 [General] Check integrity of credits only on Windows clients
This avoids the problems that were encountered in Linux and macOS builds regarding this check while also still addressing the scenario where official Windows builds had their credits modified by people unrelated to the project.
6 years ago
David Cernat a0ad0b29bc Merge branch '0.7.0' of https://github.com/TES3MP/openmw-tes3mp into 0.7.0 6 years ago
David Cernat 222837976c [Server] Fix type name warning for Player
The warning in Visual Studio was: "'Player': type name first seen using 'class' now seen using 'struct'"
6 years ago
Koncord 77386525f2 [General] Update Travis CI 6 years ago
David Cernat c058dce346 [General] Clarify meaning of commit hash displayed on start 6 years ago
David Cernat 1df1515c7e [Client] Add logging for invalid enchantmentIds in RecordHelper 6 years ago
David Cernat 999ce857c7 [Client] Add logging for records ignored due to their invalid baseIds 6 years ago
David Cernat db7e09f441 [Client] Use more consistent logging when reading dynamic record packets 6 years ago
David Cernat 0fa116b47d [Client] Remove useless lines in RecordHelper 6 years ago
Koncord 0df32accca [Server] Fix ARM build 6 years ago
David Cernat fd40e8c971 [Client] Prevent ObjectState spam by not resending an already sent state 6 years ago
David Cernat 6e47b65205 [Client] Set attribute increases & level progress after correct packets
Originally, the PlayerSkill packet contained skills, attribute increases and level progress. In 78441c769a, the attribute increases were moved to the PlayerAttribute packet and the level progress was moved to the PlayerLevel packet, but – due to an oversight – attribute increases and level progress were still being applied to the local player only when a PlayerSkill packet was received, based on whatever values were stored from the last PlayerAttribute and PlayerLevel packets.
6 years ago
David Cernat f481c85e07 [Client] Use ADD before REMOVE for PlayerInventory in repair/recharge
Previously, when recharging or repairing an item, the client sent a PlayerInventory packet to the server with the old version of the item that was supposed to be removed and then it sent a PlayerInventory packet with the new version of the item that was supposed to be added.

Unfortunately, the current CoreScripts make it so custom items using generated IDs have their records deleted when they are completely removed from the world, however briefly, even if they are added back immediately afterwards. In practice, this meant that – before this commit – recharging or repairing a custom item led to its removal from the player inventory stored on the server, followed by the deletion of its record, followed by its readdition to the inventory (but with the record staying deleted). Logging out and logging back in immediately prevented the player from receiving the item anymore because of its now non-existent record.
6 years ago
David Cernat 8a99f215f6 [Client] Add LocalPlayer::sendItemChange() variant with mwmp::Item arg 6 years ago
David Cernat db9c1b9882 [Client] Add MechanicsHelper::getItem() for getting mwmp::Item from Ptr 6 years ago
David Cernat 799241e8c6 [Client] Use informative error message for RefData::setCount() issue 6 years ago
David Cernat 43f195f0c7 [Client] Use clearer debug for actor initializations 6 years ago
David Cernat 2e1d4a9449 [Server] Fix non-Windows builds 6 years ago
David Cernat 81e2e48561 [Client] Fix item magic casting synchronization for spell scrolls
Previously, spell scrolls were used up before their IDs could be included in attacks packets supposed to be sent for them.
6 years ago
David Cernat d83160523f [Client] Add items required for item magic casting when they are missing 6 years ago
David Cernat 433a69a588 [Client] Send all data for newly initialized LocalActors at least once 6 years ago
David Cernat e70fd2cf3a [Server] Accept clients with wrong password on servers with no password 6 years ago
David Cernat eb52babf29 [Server] Print IP instead of name or PID for players unable to connect
The player name was always blank in such situations, providing no useful information. The PID was not useful in any way either.
6 years ago
David Cernat e96091fd6b [General] Use more consistent variable names for password, address, etc. 6 years ago
David Cernat 906d2a837d [Client] Send PlayerInventory packets when recharging items w/ soulgems 6 years ago
David Cernat 71679934a1 [Client] Send PlayerInventory packets when repairing items 6 years ago
David Cernat 5d9893ee92 [Client] Set actor killer correctly for spells that do damage over time
Additionally, clean up comments related to other code that sets actor killers.
6 years ago
David Cernat 6e1504f0a1 [Server] Use clearer variable & function names in TimerAPI 6 years ago
David Cernat 42b5a8054f [Server] Remove unusable position functions for players 6 years ago
Koncord 4ce0331f1b [Server] Fix GCC build 6 years ago
Koncord 9343b8af2f [Server] Remove unused function 6 years ago
Koncord c2230a8a21 [Server] Add MP flag to the server if enabled 6 years ago
Koncord a0e89208a0 [General] Fix standalone server build 6 years ago
Koncord 55cea491ca [Server] Introduce MS VC++ 2017 support 6 years ago
Koncord 6af2400752 [Server] Remove usages of get/set env. Add GetModDir function 6 years ago
Koncord b3456a8841 [Server] Fix invalidation of iterators 6 years ago
David Cernat 343dd8b5ea [Client] Fix addition of items to player inventories
Previously, multiple stacks of the same item ID could overwrite data in each other because of how the logic in ContainerStore::add() works. For example, a stack of 5 grand soul gems with no souls would get added to the player, then the attempt to add a grand soul gem with a particular soul would retrieve the previous stack first before setting all of it to that soul, resulting in 6 grand soul gems with that soul.
6 years ago
David Cernat 76ac905efc [Client] Send PlayerInventory packets when trapping souls in soulgems 6 years ago
David Cernat f853368641 [Client] Fix loss of player items in ContainerStore::unstack()
Previously, unstacking items for a player led to a PlayerInventory packet being sent about the items' removal.

This change makes it so both a packet about their re-addition and their removal are sent instead, cancelling each other out, which is inelegant, but arguably preferable to complicating the sending of PlayerInventory packets again.
6 years ago
David Cernat 5e38e8abdb [Server] Add GetArchitectureType() script function
Additionally, bring GetOperatingSystem() up-to-date by making it use the renamed function in Utils.
6 years ago
David Cernat 9fe54aa8c6 [General] Add getArchitectureType() to multiplayer Utils
Additionally, rename getOperatingSystem() into getOperatingSystemType() for clarity.
6 years ago
David Cernat fa1700e2ab [Server] Add GetOperatingSystemType() script function 6 years ago
David Cernat da6b89c185 [General] Add getOperatingSystem() to multiplayer Utils 6 years ago
David Cernat 50714599d9 [Client] Spawn at exterior 0, -7 by default 6 years ago
David Cernat afd17e5a48 [Client] Don't finish drag & drop that is supposed to be unsuccessful
This prevents items from vanishing when your attempt to drop them in a full container is denied.
6 years ago
David Cernat a6c6db89fc [Client] Send object packets when scripts use PlaceItem/PlaceItemCell 6 years ago
David Cernat d05a82a734 [Client] Avoid repetitive code when unequipping items in resurrection 6 years ago
David Cernat b5b26c6685
Merge pull request #492 from terabyte25/patch-7
[Client] Disallow opening inventory menu when not logged in
6 years ago
terrabyte25 35755eb1f1
[Client] Disallow opening inventory menu when not logged in 6 years ago
David Cernat b7090b2550 [Server] Add experimental option for not crashing from Lua script errors
Additionally, fix return type of GetPluginEnforcementState()
6 years ago
David Cernat b39e3f518b [Client] Use correct log levels for inventory and dynamic record packets 6 years ago
David Cernat d8ca268067 [Server] Move plugin enforcement functions to ServerFunctions 6 years ago
David Cernat 2933526995 [Server] Include errors related to Lua calls in server logs 6 years ago
David Cernat ef80894c5c
Merge pull request #486 from testman42/patch-2
Use more descriptive terminology for chat modes
6 years ago
Testman 6b3f598837
Use more descriptive terminology for chat modes
Changed "Chat disabled" to "Chat hidden", "Chat enabled" to "Chat visible" and "Chat in hidden mode" to "Chat appearing when needed".
6 years ago
David Cernat eb3ae95f0e [Documentation] Display build status for correct branch 6 years ago
David Cernat d3eb106c3b [Documentation] Update readme for current situation 6 years ago
David Cernat e834a4ec74 [Client] Find closest enchantmentCharge in getItemPtrFromStore()
Enchanted inventory items continuously recharge their enchantment charges, which getItemPtrFromStore() should account for.

Additionally, prevent framelistener errors caused by PlayerItemUse packets about non-existent items.
6 years ago
David Cernat bc7bcae190
Merge pull request #484 from GrimKriegor/0.7.0
[General] Change the default plugins home location
6 years ago
Grim Kriegor 8f90f8a3b8 [General] Change the default plugins home location 6 years ago
Koncord e162af0003 [Server] Disallow non void callbacks 6 years ago
Koncord 07a5f5296c [Server] Rework OnRequestPluginList callback. Add AddPluginHash function 6 years ago
Koncord 20a7619a4a [Server] Remove result from the OnPlayerConnect callback
Now it's recommended to use tes3mp.Kick() function
6 years ago
Koncord f1e8569291 [Server] Remove result from the OnPlayerSendMessage callback 6 years ago
Koncord efa362031e [Server] Remove unused Main callback 6 years ago
Koncord b83e4056a8 [Server] Remove CallFF dependency as it not fully supported by Windows and MacOS 6 years ago
Koncord 585557ad8a [Server] Remove argument cast in the Call with va_args 6 years ago
Koncord 3101de5f02 [Server] Add kicked load status 6 years ago
Koncord e5e13b21ae [Client] Fix crash on drag&drop 6 years ago
David Cernat c65d6c1328 [Client] Disable mListener methods in mwworld/containerstore
This should put an end to frequent crashes until I can fix the problem properly.
6 years ago
David Cernat 1baf82db32 [Client] Avoid PlayerSpellbook packet spam in some mods 6 years ago
David Cernat d9bc1abf48 [Client] Don't send ObjectScale packets if not logged in 6 years ago
David Cernat a8cf1e02c4 [Client] Allow unilateral scripted container changes not from console
This prevents infinite loops in certain client scripts from mods that use while loops to determine that all items of a certain type have been removed from a container, such as in the script BCSwap2Arg from  Better_Clothes.
6 years ago
David Cernat 99f8ef88a5 [Server] Add SetObjectActivatingPid() script function 6 years ago
David Cernat 17f13872aa [Client] Use forceUpdate correctly in LocalPlayer::updateStatsDynamic()
Previously, the forceUpdate argument was useless, preventing dynamic stats from being sent by certain newly created characters.
6 years ago
David Cernat bfd7c83c4d [Client] Fix backwards logic when setting type for AI attacks 6 years ago
David Cernat d9dd7073cf [General] Send certain packets only when logged in
Previously, client mods adding packet-sending scripts to the spawn area made clients send the associated packets as soon as they inputted their character name when joining a server using those mods. This made the clients either get disconnected for not replying to a handshake first, or it made them get kicked for sending object packets that are disallowed for players who are not logged in.

To fix this, LocalPlayer's hasFinishedCharGen() has been replaced with isLoggedIn(), because the former was already returning true when players inputted their names.
6 years ago
David Cernat 66d666d60c [Client] Use less confusing terminology when displaying plugin mismatch 6 years ago
David Cernat bb834748c5 [Server] Log player kicks 6 years ago
David Cernat a3111fbcc1 [Server] Use clearer error message when failing to bind port 6 years ago
David Cernat 3d40a162bc
Merge pull request #476 from SamHellawell/0.7.0-fix-equipcrash-linux-cleanup
Cleanup fix for equip item crash on Linux
6 years ago
Sam Hellawell df1667b6e4 Cleanup fix for equip item crash on Linux
Signed-off-by: Sam Hellawell <sshellawell@gmail.com>
6 years ago
David Cernat db2b3e95b8
Merge pull request #475 from SamHellawell/0.7.0-fix-equipcrash-linux
Fix crash when equipping item on linux
6 years ago
Sam Hellawell 1e171ad9fd Fix crash when equipping item on linux
Signed-off-by: Sam Hellawell <sshellawell@gmail.com>
6 years ago
David Cernat e402a17757 [Client] Don't cast non-weapons to weapons in isUsingRangedWeapon()
This makes lockpicks and probes work again.
6 years ago
David Cernat 292536439e [Server] Rename script functions for clearing packet vectors for players 6 years ago
David Cernat c79660f721 [Server] Make inventory script functions consistent with others
Functions that add elements to a vector should not change the action. This fixes the last remaining oddity in Koncord's original implementation of inventory sync.
6 years ago
David Cernat 8c7e06293f [Documentation] Update changelog with attack synchronization details 6 years ago
David Cernat b76e00c66e [Server] Call OnPlayerCellChange script event near start of cell change
This makes it possible to send custom records used by players for their equipment before the hardcoded exchange of equipment packets takes place.

Additionally, remove the check for dead players because it has no real use and can potentially cause problems.
6 years ago
David Cernat f100a660d4 [General] Fix ranged attack sync when using last throwing weapon or ammo 6 years ago
David Cernat 3f304866fd [Client] Use clearer variable names in DedicatedPlayer::setEquipment() 6 years ago
David Cernat 995d20348f [General] Always use correct ranged weapon & ammo for ranged attack sync
Previously, the player's currently selected weapon was being used in ranged attacks as in the original melee-oriented attack sync, which meant that shooting one type of projectile and then equipping another while the old projectile was still in the air turned the old projectile into the new projectile upon impact.

Additionally, avoid running most of the code in MechanicsHelper::assignAttackTarget() for non-hitting melee and ranged attacks.
6 years ago
David Cernat db39c62e89 [Documentation] Update credits 6 years ago
David Cernat b04ca28ece
Merge pull request #471 from testman42/patch-1
Update credits
6 years ago
David Cernat b5f46ada73 [General] Synchronize projectile speed for ranged attacks
This is done by including the final attackStrength used for ranged attacks in packets and then applying it in WeaponAnimation::releaseArrow() on other clients.
6 years ago
David Cernat 7281f9fc42 [Client] Prevent unilateral paralysis of dedicated players & actors
This is a temporary workaround until active effect synchronization is implemented.
6 years ago
Testman 770d36ef67
Update credits
Reflect recent role changes
6 years ago
David Cernat 33a0886790 [Client] Fix synchronization of knockdown states 6 years ago
David Cernat 490303dc0b [Client] Clean up MechanicsHelper::processAttack() slightly
The debug is now more descriptive and some code is now skipped for non-ranged attacks.
6 years ago
David Cernat 9d2dc96a2e [Client] Use RANGED type for ranged attacks that haven't hit a target 6 years ago
David Cernat af49f711ca [Client] Add isUsingRangedWeapon() method to MechanicsHelper 6 years ago
David Cernat 3f6ca6f22b [Client] Bring drawState fallback for actors up-to-date w/ attack types 6 years ago
David Cernat 9d2cf6629b [Client] Fix logic for hand-to-hand attack sync 6 years ago
David Cernat fcd31bf4a6 [General] Fix problems with the synchronization of ranged attacks
Projectile hits now send Attack packets with RANGED attacks, and their success or failure is now synchronized.

Strike enchantments no longer require a valid victim to be synchronized.

Additional debug messages have been added for attacks.
6 years ago
David Cernat 31a9b77f34 [Client] Reset hitPosition in MechanicsHelper::resetAttack() 6 years ago
David Cernat 7d221509cd [Client] Move item magic hook to correct location
Previously, synchronization for strike enchantments was partially broken because it triggered the sending of ITEM_MAGIC attack packets, which are only supposed to be sent when a spell is cast from a magical inventory item.
6 years ago
David Cernat c9ad411dd3 [Client] Fix logic for setting applyProjectileEnchantment in attack sync 6 years ago
David Cernat 8012d0d7b7 [General] Include hit position in PlayerAttack and ActorAttack packets 6 years ago
David Cernat dcd4478028 [Client] Always stop sending weather updates when moving to an interior 6 years ago
David Cernat 113002ca19 [Client] Return early when processing actors that can't be initialized 6 years ago
Koncord 48f4792bc1 [Server] Add GetMaxPlayers, GetPort and HasPassword functions to API 6 years ago
David Cernat 3bd8aa82fe [General] Reduce inventory-sending hooks to just 2 in ContainerStore
Whenever an item is added to or removed from the player's ContainerStore, that player sends a PlayerInventory packet with just that addition or removal.

This eliminates all the unnecessary packet spam related to oversized PlayerInventory packets that had existed in one form or another since the initial implementation of inventory sync in 1b259e2d33

Additionally, move booleans from BasePlayer to LocalPlayer when they are only needed on the client, and make the usage of the isReceivingQuickKeys boolean consistent with the new isReceivingInventory boolean by having them both in the processors of their associated packets.
6 years ago
David Cernat ee3fc4a303 [Documentation] Update changelog for 0.7.0 6 years ago
David Cernat 9e58cc82bd [Server] Set minimum updateRate when communicating with master server 6 years ago
David Cernat be448e5b8e [General] Use more appropriate update rate in server config 6 years ago
David Cernat d1fa57ac14 [General] Switch to new official master server port when using old one 6 years ago
David Cernat 0658d39eaa [General] Update ports used for master server in client & server config 6 years ago
David Cernat 03832f933b [Client] Send only individual items in PlayerInventory packets
For a long time, whenever a PlayerInventory packet was sent, it contained all the items in the player's inventory, because that's how Koncord originally implemented it and I always had too many other priorities to go back and rework it.

From now on, clients only send PlayerInventory packet with the one item added or removed, with the single exception being trading with merchants, where the entire inventory is still sent for the time being.
6 years ago
David Cernat 75a64a69c7 [Server] Add GetInventoryChangesAction() script function
Additionally, fix a typo in the description of GetSpellBookChangesAction()
6 years ago
David Cernat 45b011452e [Client] Combine methods for sending spell packets into a single one 6 years ago
David Cernat 140e0ed52c [Client] Also clear aiActors when clearing ActorList 6 years ago
David Cernat aed4ca2fd2 [Client] Allow use of baseId for more record types
Additionally, don't allow new enchantment records to be created if they have no effects, to avoid a crash.
6 years ago
David Cernat a083439139 Merge pull request #469 from davidcernat/master while resolving conflicts
# Conflicts:
#	apps/openmw/main.cpp
#	apps/openmw/mwbase/world.hpp
#	apps/openmw/mwdialogue/dialoguemanagerimp.cpp
#	apps/openmw/mwmechanics/actors.cpp
#	apps/openmw/mwscript/dialogueextensions.cpp
#	apps/openmw/mwworld/worldimp.hpp
6 years ago
David Cernat 7efee0e968 [Client] Fix GCC build 6 years ago
David Cernat 5bd2244898 [Client] Uninitialize DedicatedActors instantly in some situations
When LocalActors briefly become DedicatedActors as the result of a server script, the DedicatedActors are immediately uninitialized to avoid bugs like them jumping in place or rotating slightly.

Additionally, the playing of animations and sounds received in packets for DedicatedActors is no longer done during their next update, but is instead done instantly when the packets are received.
6 years ago
David Cernat 5fd4113978 [General] Implement sending of ActorSpeech packets from server scripts 6 years ago
David Cernat 338efdb705 [General] Fix issues with MechanicsHelper::getItemPtrFromStore() 6 years ago
David Cernat aec0c5bd49 [Server] Make capitalization consistent for AI-related script functions 6 years ago
David Cernat 9598212aad [Client] Don't add bound items to inventory as a result of item packets
Additionally, don't include bound items when sending PlayerInventory packets.
6 years ago
David Cernat a3b9274365 [Client] Make it possible to check if an item ID belongs to a bound item 6 years ago
David Cernat a1933e7bc2 [Client] Don't declare variable twice in LocalPlayer's setEquipment()
The variable equipmentItem is identical to currentItem, so it should not have been added in commit 58a6a8c3bc

Addditionally, use a more descriptive variable name than "a" for item Ptrs.
6 years ago
Marc Zinnschlag 1cfc1f9bdb Merged pull request #1666 6 years ago
Marc Zinnschlag 0aedb3aada Merged puil request #1808 6 years ago
Marc Zinnschlag b67b17010d Merged pull request #1826 6 years ago
Marc Zinnschlag 24212d58e8 Merged pull request #1861 6 years ago
Andrei Kortunov ec9a1b0d05 Handle RootCollisionNode, attached to non-root node (bug #4311) 6 years ago
Andrei Kortunov cde95979d0 Fix combat engagement for creatures 6 years ago
David Cernat 5d66a9bb66 [Client] Fix path to MechanicsHelper in ProcessorPlayerItemUse 6 years ago
David Cernat 8df08c7d10 [General] Implement PlayerItemUse packet
Players can no longer unilaterally use items on themselves in their inventory. When they try to use an item, they send a PlayerItemUse packet to the server with the item's details. A serverside script can then check the item and either send the packet back to make the item use go through or drop it.
6 years ago
Andrei Kortunov 780648b584 Do not reset idle animations if we do not have ammo 6 years ago
Andrei Kortunov df577babe9 Increase priority of 1st-person weapon animations to avoid issues with animation blending 6 years ago
Andrei Kortunov 71bcc11ba5 Apply only crossbow reload animation to upper body 6 years ago
Andrei Kortunov a0d0e5d2db Give jumping animations higher priority than movement ones 6 years ago
Andrei Kortunov 6a03aa6fdb Reduce jittering during turning animations for player 6 years ago
Andrei Kortunov cd92014533 Do not touch GUI modes when taking screenshots (bug #4528) 6 years ago
Marc Zinnschlag fe19d8ff35 Merged pull request #1857 6 years ago
Marc Zinnschlag a2a57cf694 Merged pull request #1858 6 years ago
Marc Zinnschlag 0f510011b3 Merged pull request #1852 6 years ago
Marc Zinnschlag cb62936949 Merged pull request #1853 6 years ago
Bret Curtis 03bf599426
Merge pull request #1856 from Capostrophic/hidden
Revert untextured shapes rendering changes
6 years ago
Bret Curtis 144f37f9b3
Merge pull request #1860 from akortunov/warningfix
Do not use fall-through to avoid GCC warnings
6 years ago
Andrei Kortunov 126b2fdd42 Use the isPlayer variable to do not check if the current actor is player every time 6 years ago
Bret Curtis 0d976f2c5e
Merge pull request #1859 from Capostrophic/debug
Fix a bunch of MSVC warnings
6 years ago
Andrei Kortunov 57e1462417 Do not use fall-through 6 years ago
Capostrophic 348c6f848e
Fix a bunch of MSVC warnings 6 years ago
Andrei Kortunov 51af729305 Do not use headtracking in the 1st-person view (bug #4573) 6 years ago
Andrei Kortunov 6202b4eca9 Do not touch GUI modes when taking screenshots (bug #4528) 6 years ago
Capostrophic 85208eff7f Revert untextured shapes rendering changes 6 years ago
Bret Curtis 0c0379c1ef
Merge pull request #1855 from OpenMW/allow_msvc2015_failure
Update appveyor.yml
6 years ago
Bret Curtis 97bc9954d0
Update appveyor.yml
allow msvc2015 to fail
6 years ago
Capostrophic e9e9c0dd6b Fix guild guide fast travelling to exteriors time 6 years ago
Andrei Kortunov b7859b3fa9 Cap underwater view distance (bug #4565) 6 years ago
Capostrophic bcd9cc4baa Check the actor cell instead of the destination cell in fast travel price logic 6 years ago
Bret Curtis a19d55e035
Merge pull request #1850 from Capostrophic/nodemask
Fix untextured shapes nodemask
6 years ago
Capostrophic bda23c6ad6 Fix nodemask 6 years ago
Bret Curtis a9729878d7
Merge pull request #1848 from Capostrophic/texturing
Don't render NiTriShapes without NiTexturingProperty (bug #4483)
6 years ago
Capostrophic a1e3b2e586 Don't render NiTriShapes without NiTexturingProperty (bug #4483) 6 years ago
Marc Zinnschlag b75b5d139a Merged pull request #1845 6 years ago
Marc Zinnschlag 7a93d118d2 Merged pull request #1846 6 years ago
Marc Zinnschlag 31491fdbde Merged pull request #1844 6 years ago
Capostrophic 7087bad580 Use special behavior for all topics with reserved names (bug #4557) 6 years ago
Andrei Kortunov 1f4dd3b393 Make partial binary search case insensitive, as it supposed to be (bug #4558) 6 years ago
David Cernat 888e1dfff8 [General] Allow setting of AI fight & dynamic stats in record packets
Additionally, allow the setting of the Autocalc flag for an NPC record based on an existing record.
6 years ago
Andrei Kortunov b0f2e00e7f Make forcegreeting a non-op for non-actor objects (bug #4553) 6 years ago
Koncord d03722b3f4 [Browser] Rework browser for improved stability & clarity
(cherry picked from commits 5c79e7106f, 57353cdfff, 15723adb9a, 01a5196a92, ed75563a94, 3839a2dcfd, 1fd16ba69c, 66283943c5, ba8613a179, 5b8f4f3e92, 35b771b19e, 043eb224e2, 05fac2f67d)
6 years ago
Marc Zinnschlag 452a706047 Merged pull request #1837 6 years ago
Marc Zinnschlag b6a919a2d1 Merged pull request #1838 6 years ago
Marc Zinnschlag 99c03d55f0 Merged pull request #1841 6 years ago
Marc Zinnschlag 2a621fedd1 Merged pull request #1842 6 years ago
Capostrophic d15dcaff68
Don't adjust weapon rating according to weapon condition twice 6 years ago
Andrei Kortunov dd6cb85783 Remove redundant changelog entry 6 years ago
David Cernat 6498bcb22b [Server] Add script functions for getting player draw & sneak states 6 years ago
Andrei Kortunov e2519226aa Move boost include 6 years ago
Andrei Kortunov eeffe2e557 Check if item model exists inside drag and drop functions 6 years ago
Andrei Kortunov e4f862c0b9 Check if next char exists 6 years ago
Andrei Kortunov c2a175c2e0 Move crash catcher wrapper to separate file 6 years ago
Capostrophic 725a9323c4
Merge branch 'master' into sound 6 years ago
Capostrophic 1d1eedc001
Update changelog 6 years ago
Capostrophic 2f44acafe2
Fix changelog 6 years ago
Capostrophic 4c7f3cf626
Merge branch 'master' into weaponpriority 6 years ago
Capostrophic 433c24562e
Update changelog 6 years ago
Andrei Kortunov ac98797999 Add missing file 6 years ago
Marc Zinnschlag 4d280add81 Merged pull request #1843 6 years ago
Marc Zinnschlag d7718aae9b Merged pull request #1840 6 years ago
Marc Zinnschlag eb5f558f6f Merged pull request #1839 6 years ago
Marc Zinnschlag 79aaf0163a Merged pull request #1833 6 years ago
Andrei Kortunov 712c9995db Rename mIsScripted variable because its name is ambiguous 6 years ago
Andrei Kortunov c454f1bdad Use log file for editor (feature #4012) 6 years ago
Capostrophic 9d85b7c2d3
Use the actual damage for deducting weapon rating 7 years ago
Capostrophic 73d5496711
Revert addition change 7 years ago
Capostrophic 16af1a6c1c Replace 0 sound range values separately 7 years ago
Capostrophic 3ac030d75a
Handle explicit calls before handling quotes 7 years ago
Capostrophic 80f3bd9f86 Don't apply iWereWolfFleeMod to creatures 7 years ago
Capostrophic fa6c205e5d Make tab autocompletion work with explicit reference calls 7 years ago
Capostrophic bec47dfb7c Make ranged weapon bonus a distance-dependent multiplier 7 years ago
Andrei Kortunov 369ea7e177 Check if a temporary file was successfully closed 7 years ago
Capostrophic 382b68a081
Combat AI: take the actual hit chance in account when rating weapon 7 years ago
Andrei Kortunov 12144de8ed Initialize missing variables 7 years ago
Andrei Kortunov c0bed0fde2 Handle case when index < 0 7 years ago
Andrei Kortunov 770d86f9bd Initialize cubeSize variable for 360 degrees screenshots correctly 7 years ago
Andrei Kortunov a08048da4e Avoid dereference after null check 7 years ago
Capostrophic ab29f9e13f Add permanent barter disposition change option (feature #3103) 7 years ago
Marc Zinnschlag 1c13256456 Merged pull request #1829 7 years ago
Marc Zinnschlag 0e75e3816a Merged pull request #1830 7 years ago
Marc Zinnschlag 8812f9ddfa Merged pull request #1831 7 years ago
Marc Zinnschlag 0c507b74bc Merge pull request #1832 7 years ago
Marc Zinnschlag 7c7af1da61 Merged pull request #1834 7 years ago
Marc Zinnschlag e8139a5cc7 Merged pull request #1835 7 years ago
AnyOldName3 66c241337d
Merge pull request #1836 from OpenMW/water-shader-tabs
Sort out some tabs which snuck into the water shader
7 years ago
AnyOldName3 f717c9e56d
Sort out some tabs which snuck into the water shader 7 years ago
Capostrophic 4d48ede6f1 Add two missing gameplay settings to Advanced tab 7 years ago
Capostrophic be2e7e9e09 Make casting caster-linked on-self effects no-op (bug #4378) 7 years ago
Andrei Kortunov 5b92910829 Limit difficulty scaling, as mentioned in docs 7 years ago
Marc Zinnschlag aac580da6b Merged pull request #1828 7 years ago
Marc Zinnschlag 20d4e27f82 Merged pull request #1821 7 years ago
Andrei Kortunov c07cc0dc40 Reset animation state after weapon unequipping 7 years ago
Andrei Kortunov 469bb29621 Do not try to handle shape controllers as node controllers 7 years ago
Andrei Kortunov 0f2c3ecb17 Rescale player avatar (bug #4539) 7 years ago
David Cernat 8c40010c87 [General] Add missing inventoryBaseId to creatures in RecordDynamic 7 years ago
David Cernat b57807407a [General] Implement RecordDynamic packet, part 1
Spell, potion, enchantment, creature, NPC, armor, book, clothing, miscellaneous and weapon record data can now be sent in a RecordDynamic packet. Additionally, the packets include data related to associated magical effects (for spells, potions and enchantments), data related to default inventory contents (for creatures and NPCs) and data related to body parts affected (for armor and clothing).

The server now has associated script functions for setting most of the details of the above, with the main exception being individual creature and NPC stats.

Records can either be created entirely from scratch or can use an existing record (set via the baseId variable) as a starting point for their values. In the latter case, only the values that are specifically set override the starting values. Creature and NPC records also have an inventoryBaseId that can be used on top of the baseId to base their inventories on another existing record.

The client's RecordHelper class has been heavily expanded to allow for the above mentioned functionality.

When players create spells, potions and enchantments as part of regular gameplay, they send RecordDynamic packets that provide the server with the complete details of the records that should be created. When they create enchantments, they also provide the server with armor, book, clothing and weapon records corresponding to the items they've enchanted.

This functionality added by this packet was originally supposed to be exclusive to the rewrite, but I've gone ahead and tried to provide it for the pre-rewrite in a way that can mostly be reused for the rewrite.
7 years ago
Capostrophic c79f96d0d2 Implement ranged crits (feature #3703) 7 years ago
Andrei Kortunov 1d463d129d Finish AiTarget package, if destination is blocked by other actor 7 years ago
Andrei Kortunov 75835c8326 Prevent NPC from chosing farther pathgrid node 7 years ago
Marc Zinnschlag 9e6cba09a6 Merged pull request #1827 7 years ago
Marc Zinnschlag 84de55fb46 Merged puil request #1824 7 years ago
Marc Zinnschlag 78121c1774 Merged pull request #1823 7 years ago
Marc Zinnschlag 3ba9229f47 Merged pull request #1815 7 years ago
Capostrophic 9c8e284ead Fix quick key activation delay code (regression #4536) 7 years ago
Capostrophic 84a871cac7 Actually enable is_pod test 7 years ago
Andrei Kortunov 6d5d0039ec Make sure we apply OT_Murder only once 7 years ago
Andrei Kortunov bc82dbbd1b Do not try to find missing animated collision shape again and again 7 years ago
Andrei Kortunov 7e0df01c83 Do not optimize animated shapes (bug #3950) 7 years ago
Andrei Kortunov 2d4ec86b8d Provide launcher icons 7 years ago
Marc Zinnschlag 29a1899045 Merged pull request #1819 7 years ago
David Cernat 2dbf3893c0 [General] Compress item refIds in PlayerEquipment packets 7 years ago
David Cernat 2332423527 [Client] Fix extra qualification error in CellRef when compiling w/ GCC 7 years ago
David Cernat 7136329a94 [Client] Add World::updatePtrsWithRefId() method
This makes it possible to "reload" the Ptrs in active cells when changes happen to the ESM record that they are based on. In practice, the old Ptrs are deleted, their RefNums and MpNums are blanked out, and new Ptrs are created that use the same RefNum and MpNum as before.

The above has required me to also add a method called setRefNum() to CellRef to allow setting a RefNum on the fly.

There may be a more elegant implementation available for updatePtrsWithRefIds(), but it requires additional research.
7 years ago
Andrei Kortunov 28a02ac93b Use file selection dialogue result (bug #4524) 7 years ago
Marc Zinnschlag b7c159e5b6 Merged pull request #1816 7 years ago
Marc Zinnschlag c508938674 Merged pull request #1817 7 years ago
Marc Zinnschlag bbb22643e8 Merge remote-tracking branch 'capostrophic/warning' 7 years ago
David Cernat 9497c7f6f2 [Client] Add back mistakenly removed setting of mpNums for spawns 7 years ago
David Cernat 25fcd09780 [Client] Add doesNpcExist() method to RecordHelper 7 years ago
David Cernat 7995466e3c [Client] Check validity of refIds in ObjectSpawn packets
This reverts c7bcf70c32 because it provides a better solution to the problem solved there, while solving another related problem as well.
7 years ago
David Cernat 8d286657d4 [Client] Update messages when unilaterally creating custom objects 7 years ago
Capostrophic f7887ab05f
Fix MSVC C4456 warning: declaration of 'stats' hides previous local declaration 7 years ago
David Cernat c7bcf70c32 [Client] Ignore ObjectSpawn packets trying to spawn non-actors 7 years ago
David Cernat d93b67ef21 [General] Sync soul refIds for items and add related script functions 7 years ago
David Cernat f52364e05c [Client] Always create new references for new creature disguises
Previously, attempts to reuse the same reference for multiple creature disguises led to movement animation issues, as well as a dynamic_cast error in Creature::getInventoryStore() that made a DedicatedPlayer vanish completely when they first lost their creature disguise, then disguised themselves as a creature that could not hold weapons and then disguised themselves as a creature that could hold weapons.
7 years ago
David Cernat 60bc7447d9 [Client] Rework RecordHelper and add methods for other record types
The usage of const_cast has been replaced with usage of MWWorld::getModifiableStore() and ESMStore::overrideRecord()

Methods whose names started with "update" now start with "override", for consistency with ESMStore's overrideRecord()

New methods have been added for "overriding" enchantment, potion and spell records, which actually leads to them being created with their already set refIds if they haven't been created yet, as per the description of ESMStore::overrideRecord(): "Insert a record with set ID, and allow it to override a pre-existing static record."

Usage of RecordHelper methods has been updated in DedicatedPlayer.
7 years ago
Capostrophic 51d369d4da Add resumeGame method 7 years ago
David Cernat 4e78642273 [Client] Add getModifiableStore() to MWWorld 7 years ago
David Cernat d778bc3b8a [Server] Turn readWorldstate and writeWorldstate into static variables 7 years ago
David Cernat c3ff273a22 [General] Add getVectorSize() and resetVector() to Utils 7 years ago
David Cernat b4802e4201 [General] Use Time struct for time in BaseWorldstate 7 years ago
Andrei Kortunov 23d917df9c Do not use magic numbers in capacity calculations 7 years ago
David Cernat a4b588d1b5 [General] Add optional timestamps to journal entries in PlayerJournal 7 years ago
Capostrophic e55f49be45
Fix issue 4494 number 7 years ago
Capostrophic cac2bc768e
Fix NPC "can't teach more" message (bug #4494) 7 years ago
David Cernat ea8a41160c [General] Make ActorAttack packet consistent with PlayerAttack
Additionally, fix a typo in PlayerAttack where a boolean argument was outside of the parentheses it should have been in.
7 years ago
David Cernat b79221efcc [Server] Rename variable i into index in ActorFunctions 7 years ago
David Cernat 8fbed1f808 [General] Remove custom data from PlayerSpellbook packet
It has never made sense to have custom spell data in PlayerSpellbook packets, so it has been removed.
7 years ago
David Cernat 2e0b6e4e3e [Server] Rename variable i into index in script function arguments
Additionally, rename i into index in LangLua.
7 years ago
David Cernat 65de028e0d
Merge pull request #462 from OpenMW/master
Add OpenMW commits up to 23 Jul 2018
7 years ago
David Cernat 74fa1d0f01 [Client] Fix manual setting of inertial force
Actors who are on the ground have their inertial force ignored, so they are now made to not be regarded as being on the ground in World::setInertialForce()
7 years ago
David Cernat b69e6b96e6 [Client] Use verbose logging level for LocalActor debug 7 years ago
Bret Curtis 84b80ae405 no spaces in assignment 7 years ago
David Cernat 36ac2d9de4 [Client] Set packetOrigin for all ObjectList packets sent 7 years ago
David Cernat 692ee01340 [Client] Add ScriptController w/ contextType-to-packetOrigin method 7 years ago
David Cernat 63a86f145d [Client] Record type of each InterpreterContext for later checking 7 years ago
David Cernat d4a84ac34a [Server] Update script function descriptions for ObjectList origin 7 years ago
David Cernat 3165c84db4 [General] Rework PACKET_ORIGIN enum
Additionally, comment out reading of originClientScript in ObjectPacket for now.
7 years ago
David Cernat 9e6459043b [General] Fix typo related to originClientScript in ObjectPacket 7 years ago
David Cernat 3dc2d1b214 [General] Add packetOrigin and originClientScript to ObjectList packets
Additionally, add script functions for getting the packetOrigin and originClientScript of received ObjectList packets.
7 years ago
David Cernat b891acd46e [Client] Send Container packets when items are added/removed via scripts
Additionally, disable unilateral addition and removal of items on clients, and expect the server to reply back with an approved addition or removal.
7 years ago
David Cernat 2189ea1a63 [Client] Clean up sending of Container packets 7 years ago
David Cernat 8c0b75d9f4 [Client] Limit PlayerEquipment packets sent by recharging enchantments 7 years ago
David Cernat 715cac807d [General] Add compareFloats to Utils 7 years ago
David Cernat cb6c37a26d [General] Replace doubles with floats in BaseStructs and BaseWorldstate 7 years ago
David Cernat 18f8725d33 [Client] Remove tab character that somehow made its way into a comment 7 years ago
Bret Curtis b910106713 Catch an unbound variable before it happens. 7 years ago
Bret Curtis c959bdcf32
Merge pull request #1813 from rhtucker/master
Added CSS to drop shadow of figure images
7 years ago
Ryan Tucker 9f2ef1e68a Added CSS to drop shadow of figure images 7 years ago
David Cernat 038757b91a [General] Temporarily revert to original rotation animation sync
I originally added rotation animation sync as part of commit 068a45be87. Unfortunately, it meant the PlayerPosition packets were now twice as large as they had been before, which was less than ideal for such a frequently sent packet, which is why Koncord switched to a more optimized approach in commits 5f30dfd5db and d67db1a9bd.

Recently, there have since been some rotation animation problems in OpenMW, which have broken the way Koncord's approach looks. My original approach still looks somewhat okay, so I'm switching back to it until we can figure out how to reuse it under the current circumstances.
7 years ago
Marc Zinnschlag 8b2b37c270 Merged merge request !28 7 years ago
Marc Zinnschlag ddd5cbd17c Initialise lock state of newly opened subviews (fixes issue #4520) 7 years ago
David Cernat 3944c8aec6 [Client] Ignore WorldRegionAuthority packets that have an empty region 7 years ago
David Cernat 99e64bdcd7 [Client] Remove unused localWeather variable from Worldstate 7 years ago
David Cernat cd1fc590a7 [Client] Differentiate itemPtr from actor Ptr in DedicatedPlayer method
This fixes a mistake from 8f7da49152
7 years ago
David Cernat 5466092582 [Client] Reduce log level for actor cell changes 7 years ago
David Cernat 20e0100706 [General] Rework Attack packets and add synchronization for item magic 7 years ago
David Cernat 0f0e8b7c08 [Client] Adjust log levels used for weather and global map 7 years ago
David Cernat f1315ef30d [Cllient] Differentiate itemPtr from actor Ptr in DedicatedActor methods
2427a4f877 mistakenly used the variable name "ptr" for both the actor and the items in that actor's inventory.
7 years ago
David Cernat b6324e3532 [Client] Clean up debug for spell usage 7 years ago
David Cernat 826e64b40e [Server] Rename isPlayerExists() into doesPlayerExist() 7 years ago
David Cernat 21d5bb4d4e
Merge pull request #460 from OpenMW/master
Add 0.7.0 commits up to 20 Jul 2018
7 years ago
David Cernat 6c50d4199b Merge branch '0.7.0' of https://github.com/TES3MP/openmw-tes3mp into 0.7.0 7 years ago
David Cernat 421d0e7a99 [Client] Make forceWeather false by default for client-sent weather 7 years ago
David Cernat 892d71ce71 [General] Reimplement weather synchronization to allow soft transitions
Although weather sync was added by Koncord to the rewrite in fd721143e2 in a way that used surprisingly few lines of code, it relied on the server requesting weather states every second from authority players and sending them to non-authority players, while also allowing only very sudden weather transitions across regions, i.e. if there was one player in the Ascadian Isles who had stormy weather, and another player with clear weather in the Bitter Coast Region walked across to the Ascadian Isles, that player was instantly made to have stormy weather with no kind of transition at all.

My approach solves both of those problems. It solves the packet spam by only sending weather updates to the server when weather changes happen or when there are new arrivals to a weather authority's region, and it allows for both sudden weather transitions when players teleport to a region and for soft, gradual transitions when players walk across to a region. It is inspired by my previous actor sync, and uses a WorldRegionAuthority packet to set players as region authorities in a similar way to how ActorAuthority sets players as cell AI authorities. Weather changes are created only by the region authority for a given region, and weather packets are also only sent by that authority.

However, it should be noted that gradual weather transitions are used by default in this implementation. To use sudden weather transitions, the serverside Lua scripts need to forward WorldWeather packets with the forceWeather boolean set to true. That is, however, already handled by our default Lua scripts in situations where it makes sense.
7 years ago
Bret Curtis 4c9e1295e8
Merge pull request #1811 from akortunov/fallfix
Set movement speed to 0 when unconscious
7 years ago
Bret Curtis a54b779672 Revert "Revert "remove breath/doxygen autodoc""
This reverts commit 038d5a5566.
7 years ago
Andrei Kortunov 8281fd903f Set movement speed to 0 when unconscious (bug #4519) 7 years ago
Bret Curtis ee3aba149d Force RTD to not build any other types of docs. 7 years ago
Bret Curtis 038d5a5566 Revert "remove breath/doxygen autodoc"
This reverts commit f2fc8351bb.

small fixes
7 years ago
David Cernat b6db570d9c [Client] Display uniqueIndexes in a less confusing way in console 7 years ago
Bret Curtis 105b172fb5
Merge pull request #1809 from akortunov/enumfix
Sort icons in the DataDisplayDelegate
7 years ago
Andrei Kortunov 5c16ce1d36 Sort icons in the DataDisplayDelegate 7 years ago
Marc Zinnschlag 78a2725169 Merged pull request #1806 7 years ago
Marc Zinnschlag 326a3e61f4 Merged pull request #1807 7 years ago
Marc Zinnschlag 0142525ea2 Merged merge request !26 7 years ago
Marc Zinnschlag 111407c282 Merged merge request !24 7 years ago
Andrei Kortunov 38fa4e0a8a Do not play un-equipping animation when we switch to hand-to-hand 7 years ago
David Cernat 9823a77bf2 [General] Turn PlayerRegionAuthority into WorldRegionAuthority
WorldRegionAuthority is a Worldstate packet.
7 years ago
Miloslav Číž 3ff2740e59 Update CHANGELOG 7 years ago
Koncord 2e227c7af5 [Server] Do not allow to connect with an empty plugin list 7 years ago
Koncord b5c957c473 [Server] Move PreInit code to preInit method 7 years ago
Koncord 1a9bf253f6 [Server] Simplify getPlayer methods, add isPlayerExists method 7 years ago
Koncord 193034f09c [Documentation] Add copyrigts 7 years ago
Bret Curtis e7e3dab130
Merge pull request #1804 from akortunov/guifixes
Show magic items count in spells window (feature #4509)
7 years ago
Andrei Kortunov edd5769022 Show magic items count in spells window (feature #4509) 7 years ago
Bret Curtis 1430b64aaa
Merge pull request #1805 from akortunov/editor_markers
Use editor markers for lights and creatures levelled lists
7 years ago
Andrei Kortunov 30716344f2 Fix possible division by zero in the fatigue calculation (bug #4510) 7 years ago
David Cernat d5d3c0937f [Client] Adjust log level for actor transfers in CellStore 7 years ago
David Cernat 35fdb833df [Client] Verify integrity of credits file 7 years ago
David Cernat 72d286473b [General] Move credits integrity error message to new ErrorMessages file
Additionally, use correct log level for credit integrity message on server.
7 years ago
David Cernat 0b5cb15f71 [General] Turn GameWeather into WorldWeather, now a WorldstatePacket 7 years ago
David Cernat 646111d998 [General] Use correct credits checksum and move it to Version.hpp 7 years ago
David Cernat 0f36c3ea24 [Server] Verify integrity of credits file 7 years ago
David Cernat 22b2b7a9c6 [General] Add Utils methods for checksums 7 years ago
David Cernat 9445db61b4 [Documentation] Update credits 7 years ago
Andrei Kortunov 6ddf6eb885 Use editor markers for lights and creatures levelled lists 7 years ago
Nikolay Kasyanov 21f198af7a Fix debugger detection on macOS (#4511) 7 years ago
David Cernat 4ac371d292 [Server] Delete duplicate WorldKillCount processor with old filename 7 years ago
David Cernat 3649cf553f [General] Rename PlayerKillCount into WorldKillCount
This should clarify the real meaning of the packet and its associated event.

The event itself has been renamed from OnPlayerKillCount to OnWorldKillCount.
7 years ago
David Cernat 18a2d238ab [Client] Don't pop up dialogue screen when an NPC activates another NPC 7 years ago
David Cernat 4ef2aff11e [Client] Remove "Not implemented" message when activating other player
Serverside scripts can now make lots of different things happen as the result of such activation, which is why the message was no longer current.
7 years ago
David Cernat f13705e8be [Client] Improve debug for ObjectActivate and ConsoleCommand 7 years ago
David Cernat 6ebe09375f [General] Implement ObjectActivate packet & associated script functions 7 years ago
David Cernat 81b160cae8 [General] Add placeholder for ObjectActivate packet 7 years ago
David Cernat 61da0d2475 [General] Turn PlayerInteraction into PlayerInput 7 years ago
David Cernat 32b6134fad [General] Add placeholder for CellReplace packet 7 years ago
David Cernat a471f5e452 [General] Turn CellCreate into a Worldstate packet 7 years ago
David Cernat ae55ee7f0b [General] Add getNumberOfDigits to Utils in components 7 years ago
David Cernat f410cb90d8
Merge pull request #459 from GrimKriegor/bug/missing-luajit-on-pipeline
[Pipeline] Add missing LuaJIT dependency
7 years ago
David Cernat 98ff44172a
Merge pull request #458 from GrimKriegor/hotfix/crashcatcher-sdl-build-issue
[General] Temporarily disable the new OpenMW crash catcher
7 years ago
Grim Kriegor 2fcde5e8ba [General] Temporarily disable the new OpenMW crash catcher
This new crash catcher is preventing TES3MP from building on GNU/Linux
`components/crashcatcher/crashcatcher.cpp:23:28: fatal error: SDL_messagebox.h: No such file or directory`
Disable it until the developers isolate the issue and patch it
7 years ago
Grim Kriegor 88e4927146 [Pipeline] Add missing LuaJIT dependency 7 years ago
David Cernat 6cb5ac6e63 Merge pull request #457 from OpenMW/master while resolving conflicts
Conflicts:
	CMakeLists.txt
	apps/openmw/engine.cpp
	apps/openmw/main.cpp
	apps/openmw/mwgui/windowmanagerimp.cpp
	apps/openmw/mwmechanics/character.cpp
	components/CMakeLists.txt
7 years ago
David Cernat 6d43c8d63d [Client] Send ActorAI with combat when an NPC's fight is set to 100 7 years ago
David Cernat 743933134d [Client] Simplify sending of ActorAI packets for uninitialized actors 7 years ago
David Cernat 5f4ec1331f [Client] Send ActorAI packet when combat is started via a client script 7 years ago
David Cernat cc9e294cc0 [Client] Send ActorAI packet for new cell after being followed to it 7 years ago
David Cernat 528bd26a3b [General] Allow followers to follow non-authority players through cells 7 years ago
David Cernat ab5fd0aef8 [Server] Clean up descriptions for Object script functions 7 years ago
David Cernat 6c1173d598 [Client] Rename searchPtrViaRefIndex into searchPtrViaUniqueIndex 7 years ago
David Cernat 09da24f1ea [General] Rename all instances of refNumIndex into refNum
This creates symmetry with mpNum and should cause less confusion in the future.
7 years ago
David Cernat 20296859ee [Server] Clarify functions used for getting data in Networking 7 years ago
David Cernat 04dd59e638 [Server] Use clearer names for functions used to get last received data
Additionally, rename GetObjectChangesSize() into the less confusing GetObjectListSize()
7 years ago
David Cernat aeb2e57444 [Server] Bring Actor functions in line with Object functions, part 2
The ActorPacket-sending functions now have sendToOtherVisitors and skipAttachedPlayer arguments, except for the ones for ActorList and ActorAuthority (because such arguments don't make sense for those).
7 years ago
David Cernat 837c5369c0 [Server] Add OnActorAI event and remove autosync for ActorAI packets 7 years ago
David Cernat 8f745df055 [Server] Bring Actor functions in line with Object functions, part 1
The last received ActorList can now be copied into the write-only ActorList that can be sent in packets. Changing the pid of the write-only ActorList can now be done separately from clearing its contents.
7 years ago
David Cernat f0d4f1bbe5 [Client] Send ActorAI packets when followed by an NPC
The packet is sent regardless of whether we are the cell authority or not, so the server can decide what it wants to do with it.
7 years ago
David Cernat 6316f1e590 [Client] Add ActorList methods for sending ActorAI packets
Additionally, use consistent capitalization for AI-related methods.
7 years ago
David Cernat 0fd8f7660b [Client] Replace LocalActor arg with BaseActor in ActorList functions 7 years ago
Marc Zinnschlag 0bd6078826 Merged pull request #1789 7 years ago
Andrei Kortunov 32bd294a8a Add missing changelog entries 7 years ago
Andrei Kortunov 3d1daaebab Rework manual spellcasting (e.g. via scripts) 7 years ago
David Cernat bdf2f03c4f [General] Remove unnecessary MapChanges struct from BaseWorldstate 7 years ago
David Cernat 59a56ca35e [Client] Disallow clients from scaling their associated players
Additionally, display messages when trying to scale players.
7 years ago
David Cernat 8ca29dbaac [Client] Fix remaining mistakes in debug for received ActorAI packets 7 years ago
David Cernat 5bb442bbd3 [Server] Add sendToOtherVisitors boolean to SendActorAI()
Additionally, avoid repetition in functions that send Actor packets.
7 years ago
David Cernat 25f7a55495 [Client] Improve debug for received ActorAI packets 7 years ago
David Cernat ceea65f666 [General] Change pre-rewrite's version to 0.7.0-alpha 7 years ago
Miloslav Číž 4e3bc3e403 Change wave parameters based on weather 7 years ago
Bret Curtis 99e4d49e7c
Merge pull request #1787 from akortunov/profilierfont
Use the DejaVuLGCSansMono.ttf for profiler output
7 years ago
Andrei Kortunov 70b6d4983d Use the DejaVuLGCSansMono.ttf in profilier output 7 years ago
Marc Zinnschlag 2d919ba215 changelog cleanup 7 years ago
Marc Zinnschlag 232be000a2 Updated credits file 7 years ago
Marc Zinnschlag 5080a65910 Merged pull request #1796 7 years ago
Marc Zinnschlag ee759effce Merged pull request #1798 7 years ago
Marc Zinnschlag fa96154edd Merged pull request #1803 7 years ago
David Cernat 7a646494ee [General] Point to serverCore.lua instead of server.lua in server config 7 years ago
elsid 686830a6e3
Update changelog 7 years ago
elsid 3f21c49479
Put check for nif file name into separate function 7 years ago
elsid 2599aba196
Fix check whether file name starts with x or X
If path doens't contains / or \, then slashpos will be 0.
Therefore slashpos + 1 = 1 doesn't point to first symbol.

xmesh.nif
 ^
 slashpos + 1
7 years ago
David Cernat bff6e9e235 [General] Implement ActorAI packet, part 5
Allow repetition for AiWander package to be turned on and off.
7 years ago
Andrei Kortunov c77c50e92b Make Equip console command to bypass most of restrictions (bug #4460) 7 years ago
Capostrophic 3186edc630
Update changelog 7 years ago
Capostrophic 5cb9dc9d12 Use SpellTurnLeft/TurnRight animation groups 7 years ago
Bret Curtis b390ce3002
Merge pull request #1776 from akortunov/crossbowfix
Apply weapon reload animations only for upper body
7 years ago
Bret Curtis df1576fcf5
Merge branch 'master' into crossbowfix 7 years ago
Bret Curtis fde46f03b3
Merge pull request #1801 from terabyte25/terabyte25-trainingskill
Update trainer skill cap based off modified skill instead of based skill
7 years ago
terrabyte25 76fa8a163d
Update CHANGELOG.md 7 years ago
Andrei Kortunov 1c35e20fcc Use 1h animations as fallback for crossbows 7 years ago
Andrei Kortunov 75dcbea365 Apply weapon reload animations only for upper body 7 years ago
Bret Curtis 3f63e625cf
Merge pull request #1802 from Capostrophic/cmake
Update CMake lists for Windows (task #2490)
7 years ago
Capostrophic d000f2756e Update disabled warnings 7 years ago
Capostrophic 21403f8920 Update changelog 7 years ago
Capostrophic 7fd66c77e6 Update CMake lists for Windows
Don't use the debug console on Release-mode builds
Disable spammy 4297 and 5032 warnings that are not specific to OpenMW
7 years ago
Bret Curtis 5a1dba6a09
Merge pull request #1800 from akortunov/buildfix
Fix build with MSVC
7 years ago
Andrei Kortunov c921d1c7e9 Refactor NifStream class (eliminate LNK4221 MSVC warning) 7 years ago
David Cernat 2e31c212c0 [Client] Make any ActorAI packet override an actor's desire to fight 7 years ago
David Cernat 79ee976c95 [Client] Implement ACTIVATE action in DedicatedActor::setAI()
Additionally, clean up usage of CreatureStats in DedicatedActor.
7 years ago
David Cernat 0f30e21312 [Client] Add searchPtrViaRefIndex method to World to easily find objects 7 years ago
Andrei Kortunov 27a5da59ba Fix MSVC warnings C4456 7 years ago
Andrei Kortunov 16a4df25d6 Make void function to do not return value 7 years ago
David Cernat c984fc0881 [Client] Allow AiActivate to be used with specific Ptrs, not just refIds 7 years ago
David Cernat 00c13ae96c [General] Implement ActorAI packet, part 4
The server can now make actors activate players and objects, at least in theory. In practice, OpenMW''s AiActivate package needs to be worked so it allows specific objects as targets instead of just refIds.
7 years ago
David Cernat 0e13207afe [General] Implement ActorAI packet, part 3
The server can now cancel actor AI, make actors travel to a location, make actors wander, and make actors get escorted by a player or another actor.
7 years ago
David Cernat 5baef09f79 [General] Implement ActorAI packet, part 2
The server can now make actors start combat with players or other actors.
7 years ago
David Cernat 5628f3b977 [Client] Fix debug for DedicatedActor::setAI() 7 years ago
David Cernat b86155dc11 [Client] Allow AiFollow package to have infinite distance when desired 7 years ago
David Cernat 864c66d1d4 [Client] Make sure hasAiTarget is set correctly for DedicatedActors 7 years ago
David Cernat 26ac29e8b1 [Client] Add disclaimer to save dialog about singleplayer-only saves 7 years ago
David Cernat 4d4bced929 [Client] Allow singleplayer-only saves in main menu during multiplayer 7 years ago
terrabyte25 48296a7452
Update trainingwindow.cpp 7 years ago
Marc Zinnschlag 0bdd8f7d03 Merged merge request !19 7 years ago
Marc Zinnschlag 34c7181afc Merged merge request !21 7 years ago
Alexander Stillich 5abc3bd320 Merge branch 'opencs-crash-handler' of gitlab.com:docwest/openmw into opencs-crash-handler 7 years ago
Alexander Stillich 725cc94210 Renamed cc_install to something less cryptic (crashCatcherInstall) 7 years ago
Alex S d4d2077174 Fixed changelog entry 7 years ago
Doc West a6f962156c Updated change log 7 years ago
Doc West 467989cdd5 Moved crashcatcher to a component and also use it in CS
Reworked debugger detection (failed on gdb 7.11), it now uses /proc to detect the debugger
7 years ago
Alexander Stillich 1786211b83 Merge branch 'revert-update-fix' of gitlab.com:docwest/openmw into revert-update-fix 7 years ago
Alexander Stillich 1177e5ac79 Issue a single dataChanged() when the modified column changes 7 years ago
Doc West d26b5a13ef Fixed comment 7 years ago
Doc West 01b8ce5f70 Notify views of changes in all columns when updating the ColumnId_Modification column 7 years ago
Doc West 4a6457c346 Changed the way the revert command works: it now clones the changed record and uses the new RecordBase::revert() method to restore the previous value
Added Flag_Dialogue_Refresh to var type and var value columns so that sub views update properly
7 years ago
Doc West 4222b44dbb Updated change log 7 years ago
Doc West 143eadb58e Use setData() instead of emtitting dataChanged() which does not work on CI. Also Fixes the remaining issue with subviews not updating due to only the modified flag emitting a change, which prevented the widget mapper from working for updates. 7 years ago
Doc West 4780f1b2bd Notify views of changes of all cells in a row to properly update the row after revert 7 years ago
Alexander Stillich 78a5799911 Issue a single dataChanged() when the modified column changes 7 years ago
Bret Curtis 8834396cdd Merge branch 'patch-1' into 'master'
Update documentationHowTo.rst

See merge request OpenMW/openmw!22
7 years ago
Bret Curtis 13d8fba223
Merge pull request #1797 from Capostrophic/moveobject
Fix double call of addContainerScripts on player in moveObject (bug #4490)
7 years ago
Bret Curtis 7f4320feb0
Merge pull request #1799 from lysol90/patch-1
Updates to the texture modding page
7 years ago
Joakim Berg ba15d0a848
Fixed spelling error 7 years ago
Capostrophic d09c327b20 Update changelog 7 years ago
Joakim Berg efcad5e751
Updates to the texture modding page
There were some errors in the texture modding page about normal maps, so I did a quick change. Please do review if I made some errors, spelling or factual.
7 years ago
Capostrophic 14d3b213a1
Fix double call of addContainerScripts on player in moveObject (fixes #4490) 7 years ago
David Cernat 6ff7fa525e [Client] Disable autosaving when waiting 7 years ago
Bret Curtis a3a002e008
Merge pull request #1790 from rhtucker/master
Migrating necessary parts of Wiki over to RTD.
7 years ago
Marc Zinnschlag caad14093e Merged pull request #1795 7 years ago
David Cernat 04ba324290 [Client] Disable clientside disabling and enabling of objects 7 years ago
David Cernat 5043fb4246 [Client] Disable clientside disarming of traps 7 years ago
David Cernat cbb9817913 [Server] Add missing descriptions for PlayAnimation() and PlaySpeech() 7 years ago
David Cernat 6ba9b1742b [Server] Remove unused default parameters for script functions 7 years ago
David Cernat acdaf1a282 [Client] Disable clientside deletion of objects through console/scripts
Unfortunately, disabling clientside deletion of summons and items that can be picked up requires extra work on actors and inventories respectively, to avoid buggy situations.
7 years ago
David Cernat 8d9fde810e [Client] Disable clientside scaling of objects 7 years ago
David Cernat f3892d697b [Client] Disable clientside locking and unlocking of objects 7 years ago
David Cernat 563269d359 [Server] Bring comments up-to-date for packet-sending script functions 7 years ago
David Cernat 2f1ef049d2 [Server] Turn sendToAttachedPlayer into skipAttachedPlayer
Unfortunately, default values set in the C++ code for our script function parameters don't actually seem to work, and they always default to false because they receive a nil value from Lua. As a result, to not break compatibility with previous scripts, I've decided to use a skipAttachedPlayer argument instead so it can default to false while still providing the same benefits that sendToAttachedPlayer provided.
7 years ago
Ryan Tucker 380384ff39 Migrated textures section of wiki. 7 years ago
David Cernat 141e404ed9 [Server] Move server administration functions to ServerFunctions class 7 years ago
David Cernat c0fde5ae97 [General] Add explanation about 0.0.0.0 to server config file 7 years ago
David Cernat 6041425122 [Server] Move Chat functions to new ChatFunctions class 7 years ago
David Cernat 6a3fbf4e98 [Server] Use consistent arguments for script functions that send packets
Previously, there was a confusing separation between script functions that had a "broadcast" argument and script functions that had a "toOthers" argument.

Those with broadcast sent the packet to all players on the server when broadcast was true. Those with toOthers sent the packet to all players other than the packet's attached player.

The former was based on the pattern of the original SendMessage() script function. The latter more closely resembled RakNet's own broadcast argument as seen here:

https://github.com/TES3MP/CrabNet/blob/master/include/raknet/RakPeer.h#L219

This commit makes it so all sending functions have a sendToOtherPlayers argument that is false by default and a sendToAttachedPlayer that is true by default. This should simultaneously allow sending to be more intuitive, while not breaking previous existing scripts to a significant degree.

Additionally, this commit also reduces some code repetition for all instances of packet-fetching in script functions.
7 years ago
David Cernat 14e4f64296 [Server] Add GetVideoFilename() and SendVideoPlay() script functions 7 years ago
David Cernat 3ed9d89280 [General] Use separate variables for video & music filenames in packets 7 years ago
David Cernat 509882b5f6 [Client] Rework MechanicsHelper::getTarget() to avoid crashes 7 years ago
David Cernat 7f0549fc4f [Server] Remove hardcoded sync for VideoPlay and add OnVideoPlay event 7 years ago
David Cernat ae8b5a0709 [Server] Remove hardcoded sync for Place, Spawn & other Object packets 7 years ago
David Walley b5abe6a230 Update documentationHowTo.rst
Add a section, under the provisional name "Baby Steps" to describe a minimal process for editing/contributing. Basically just create an account on GitLab, fork openmw there, then edit the relevant document to create Merge Request
7 years ago
David Cernat e3e1cfc549 [Client] Add forgotten comparison in crimeTime and deathTime check 7 years ago
Capostrophic bded697f07
Make Goodbye block using hyperlinks 7 years ago
David Cernat 4eb72eecb1 [Client] Fix crash for invalid CellRefs in MechanicsHelper::getTarget() 7 years ago
Bret Curtis f4146d0079 Merge branch 'patch-1' into 'master'
Update documentationHowTo.rst - extend to integrate GitLab into PyCharm

See merge request OpenMW/openmw!20
7 years ago
David Cernat 4b30a44816 [Client] Compare crimeTime and deathTime when NPCs forgive player crimes
Previously, all crime witnesses stopped being hostile to a respawning player for as long as the player's diedSinceArrestAttempt was true. That meant that, in an area with no guards to arrest the player, crime witnesses did not enage in combat with the player at all ever again until diedSinceArrestAttempt became false.

This commit makes it so the time of the last crime is recorded for each witness, and that is then compared with the time of the LocalPlayer's last death for a one-time crime forgiveness during that player's current life.

This is essentially a gameplay adjustment for "singleplayer with respawns," and will have to be reworked to make sense for every player in multiplayer, though that requires reworking the crime system as a whole and is thus on hold.
7 years ago
Marc Zinnschlag d9de8ccb5b Merged pull request #1781 7 years ago
Marc Zinnschlag dd08194c75 Merged merge request !18 7 years ago
Marc Zinnschlag 7ba512b389 Merged merge request !17 7 years ago
Bret Curtis 94ea9e7dd0
Merge pull request #1793 from Capostrophic/death
Ensure forward-compatibility of death animations of pre-0.43.0 saves (bug #4274)
7 years ago
Alex S 6a2b8f7e85 Fixed changelog entry 7 years ago
David Cernat c23fc3446f [Client] Avoid sending map tiles for Wilderness cells 7 years ago
David Cernat 17c234d9ca [Client] Use initial values for LocalPlayer and LocalActor killers 7 years ago
David Cernat 3e52857e2b [General] Fix build for client and construction set 7 years ago
David Cernat 97cd3effa7 [Client] Make actor debug consistent with object debug 7 years ago
Doc West 6a78379757 Updated change log 7 years ago
Doc West 03c75794c1 Moved crashcatcher to a component and also use it in CS
Reworked debugger detection (failed on gdb 7.11), it now uses /proc to detect the debugger
7 years ago
Capostrophic 33c462c3c2
Update changelog 7 years ago
Capostrophic 9abfabb065
Ensure forward-compatibility of death animations in old saves (fixes #4274) 7 years ago
David Cernat b0bd12f9dd Merge branch '0.6.3' of https://github.com/TES3MP/openmw-tes3mp into 0.6.3 7 years ago
David Cernat c075496748 [General] Replace deathReason in death packets with a killer variable
Add serverside script functions for determining the killers of both players and actors.

Use unsigned ints for script functions returning an object or actor's refNumIndex or mpNum.

Remove updateDeadState() from LocalPlayer and make its code part of updateStatsDynamic() for simplicity.
7 years ago
David Cernat 934e592bdb [Server] Make spacing in CharClass consistent with other categories 7 years ago
David Cernat e8ce009521 [Server] Use regular int as return value for GetObjectSummonerPid()
Additionally, clarify descriptions of script functions for getting information about summoners.
7 years ago
David Cernat f02492a593 [General] Temporarily include target names in mwmp::Target
These will be removed once the server can get the names matching refIds by reading content files.
7 years ago
Doc West b8e53b5b81 Fixed comment 7 years ago
Doc West e187733811 Notify views of changes in all columns when updating the ColumnId_Modification column 7 years ago
Doc West f9b565a46e Removed QDebug include, moved updateUndoRedoAction to an anonymous namespace 7 years ago
Doc West 61109d70b1 Removed invalid / unused signal / slot connection 7 years ago
David Cernat 691b332d03 [Client] Use MechanicsHelper::getTarget() for summoners in ObjectList 7 years ago
David Cernat 130a32ebb0 [Client] Add new methods for handling mwmp::Target in MechanicsHelper 7 years ago
Koncord 7a032baaa3 [General] Move OSG hack to ELSE branch 7 years ago
Koncord 533cd9cdec [General] Fix FindRakNet 7 years ago
Koncord 470ea50b54 [General] Use LuaJit instead default Lua 7 years ago
David Walley 9ebcd65634 Update docs/source/reference/documentationHowTo.rst 7 years ago
Bret Curtis b36bd75b59
Merge pull request #1792 from Capostrophic/character
Make spellcasting stance transition more smooth (bug #4358)
7 years ago
David Walley d03f9125e3 Update documentationHowTo.rst - extend to integrate GitLab into PyCharm
A subsequent MR will suggest moving most of this to a separate document for intermediate-level contributors, and replacing it with much simpler instructions for beginners - basically edit directly on GitLab as suggested by Psi29a on the forum here - https://forum.openmw.org/viewtopic.php?f=43&p=56458#p56457
7 years ago
David Cernat 32ad8ef2f0 [General] Fix incorrect capitalization in ObjectMove directives 7 years ago
David Cernat bbb461a5e5 [General] Make sure data in guiMessageBox is compressed 7 years ago
David Cernat 7010575075 [Server] Return -1 in GetObjectSummonerPid() when the player is invalid 7 years ago
Capostrophic 5bc073603e
Update changelog 7 years ago
Capostrophic faf3e9ba5a Make spellcasting stance transition more smooth (fixes #4358)
If a movement animation was identical to the previous one that was played, restart it from the point the previous animation ended
7 years ago
Doc West 9bfa01c579 Changed the way the revert command works: it now clones the changed record and uses the new RecordBase::revert() method to restore the previous value
Added Flag_Dialogue_Refresh to var type and var value columns so that sub views update properly
7 years ago
David Cernat 76731f5def [Client] Don't remove SummonKeys with actorIds of -1
This prevents summon duplication caused by a SummonKey sometimes being deleted immediately after being created, before the server can send back an ObjectSpawn packet spawning a creature that can be attached to the SummonKey.
7 years ago
Doc West 3cbbbeceb4 Updated change log 7 years ago
Doc West bf49a3e760 Use setData() instead of emtitting dataChanged() which does not work on CI. Also Fixes the remaining issue with subviews not updating due to only the modified flag emitting a change, which prevented the widget mapper from working for updates. 7 years ago
Doc West 96cf2cbd05 Notify views of changes of all cells in a row to properly update the row after revert 7 years ago
Doc West 1c1b5986e9 Updated change log 7 years ago
Doc West 5d38160239 Updated change log 7 years ago
Doc West 2c39dba83b Updated change log 7 years ago
Doc West baf21362e1 Fixed undo / redo actions losing their shortcuts 7 years ago
Doc West 414f626309 Implemented search case sensitivity 7 years ago
David Cernat c2411982d2 [Client] Log object refNumIndexes and mpNums in a consistent way 7 years ago
Bret Curtis 2ff9dc34a4 Merge branch 'win10_ci' into 'master'
see if we can get win10 going

See merge request OpenMW/openmw!8
7 years ago
Bret Curtis d4d46fc602 Build everything but branches until we can allow VM/CIs to run on forked projects. 7 years ago
Bret Curtis 739c49d59b Merge branch 'master' into 'win10_ci'
# Conflicts:
#   CI/before_script.msvc.sh
7 years ago
AnyOldName3 8c153d116b
Merge pull request #1786 from OpenMW/CI_before_script_msvc_fixes
Update before_script.msvc.sh to add GitLab CI support and update dependency links
7 years ago
David Cernat 7775780ad7 [Cllient] Update multiplayer code for handling quick keys 7 years ago
David Cernat 3438061b55 [Server] Add script function for getting a summoner's pid
Additionally, fix typos in the comments for other script functions relating to summoners.
7 years ago
David Cernat 8a23a96da4 [Client] Update initialization of AiFollow packages in multiplayer code 7 years ago
David Cernat a236ffc4be Merge pull request #456 from OpenMW/master while resolving conflicts
# Conflicts:
#	.travis.yml
#	README.md
#	apps/openmw/mwgui/quickkeysmenu.cpp
#	apps/openmw/mwmechanics/actors.cpp
#	apps/openmw/mwmechanics/combat.cpp
7 years ago
Koncord 79903c455c [General] Allow different types for vectorContains 7 years ago
Bret Curtis 57e2573593
Update before_script.msvc.sh
check if temp directory exists, error out and warn user about it.
7 years ago
Bret Curtis 70e9d5c0a0 ; it? 7 years ago
Bret Curtis 11030e56c4 detect existing dir 7 years ago
Bret Curtis 4f07ca28a6 Try passing the _real_ windows dir to innoinstaller, then using the linux-like directory for mv. 7 years ago
Bret Curtis d4c9586bd0 try just converting the \ to a / 7 years ago
Koncord 1f4e6e9114 [General] Add integrity checks to Handshake packet 7 years ago
Koncord f9ff5f10df [General] Reduce packets size and add integrity checks 7 years ago
Koncord fa2bf0663e [General] Simplify vectorContains 7 years ago
Marc Zinnschlag 908af3720f Merged pull request #1791 7 years ago
Marc Zinnschlag 47d0321366 updated credits file 7 years ago
Marc Zinnschlag 2a367a0c35 updated changelog 7 years ago
Marc Zinnschlag e50c3657b3 Merged merge request !16 7 years ago
Marc Zinnschlag 9a88f9147e Merged merge request !15 7 years ago
Doc West e9cc697b60 Sort EnumDelegate values by name 7 years ago
David Cernat 3aa125ceda [Server] Add script functions for getting a summoner's refId and indexes 7 years ago
Koncord 53346e2663 [Client] Return 0 if effect not found 7 years ago
Koncord c5c1a160b2 [Client] Comment out an unused variable 7 years ago
Koncord c69819e0db [General] Change type of refNumIndex & mpNum to unsigned 7 years ago
Koncord 99158beb2e [General] Change effectCount type to unsigned 7 years ago
Koncord 895634cd16 [General] Change type of MpNum to "unsigned int" 7 years ago
Koncord 779f2a564d [General] Change "unsigned long" to uint32_t for cross platform compatibility 7 years ago
Koncord 23684489da [General] Fix clang-tidy warning
Converting integer literal to bool, use bool literal instead
7 years ago
Koncord 7639db02f3 [General] RW functions return true on success 7 years ago
Koncord 45c7c3a0b6 [General] Add integrity checks to PacketPreInit 7 years ago
Koncord d999cc0d55 [General] Add packetValid flag to packets 7 years ago
Koncord 695fb7d4a7 [General] Reorder RW(string) arguments
Change limit of default max string size to 64 KiB
7 years ago
David Cernat f9ebe400f7 [Server] Add script function for checking if object's summoner is player 7 years ago
Koncord d162f6fd3a [General] Explicitly use limitations of the master server 7 years ago
Koncord a48d5b48ef [General] Add maxSize parameter to RW(std::string)
Minor type changes
7 years ago
Koncord 62877f38b7 [General] Remove Terra support
Use LuaJIT instead.
7 years ago
Koncord 685a80887b Remove Pawn support 7 years ago
Andrei Kortunov f4330cf057 Editor: limit FPS in 3D preview windows (feature #3641) 7 years ago
Thunderforge 7cbc4eeb49 Adding missing override keywords
Prevents compiler warnings such as this:

```
/Users/Will/CLionProjects/OpenMW/apps/openmw/mwgui/windowbase.hpp:65:22: warning: 'onOpen' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
        virtual void onOpen();
                     ^
/Users/Will/CLionProjects/OpenMW/apps/openmw/mwgui/windowbase.hpp:38:22: note: overridden virtual function is here
        virtual void onOpen() {}
                     ^
```
7 years ago
David Cernat bef53749ed [General] Replace BaseObject's hasMaster variable with isSummon
Additionally, add a GetObjectSummonState() script function to the server.
7 years ago
David Cernat 8ce225b1cc [Client] Use the casters of damage-dealing spells as death reasons 7 years ago
Marc Zinnschlag aa5ddd6b28 Merged merge request livestreamer https://www.twitch.tv/vanguardlx best 7 years ago
Finbar Crago 5d9035c6b2 [Fixes #4482] Missing HandToHand on key quick key 0 (introduced in MR !11 for issue #4480)
because apparently i can't count to ten...
7 years ago
David Cernat 958b220835 [General] Send summon duration to server in ObjectSpawn packets 7 years ago
Marc Zinnschlag 3660d55adf updated credits file 7 years ago
Marc Zinnschlag 362798bd90 updated changelog 7 years ago
Marc Zinnschlag 2ea85d0bb6 Merge remote-tracking branch 'gl_finbar-crago/fix_quickkey_segfalt' 7 years ago
Bret Curtis af75c1e909
Update before_script.msvc.sh
reverting back to what works
7 years ago
Bret Curtis dcb2ab80f5
Merge pull request #1788 from Capostrophic/armorcond
Make unarmed creature attacks not affect armor condition (bug #2455)
7 years ago
Bret Curtis 4d60fe5a76 reverting back 7 years ago
Finbar Crago 09c9bd34c3 cleanup more unnecessary struct keywords... 7 years ago
Bret Curtis b8b07b52f0 try this... 7 years ago
Bret Curtis 4177fd04eb
Update before_script.msvc.sh
Does it blend?
7 years ago
Bret Curtis 209359bbc3 Try this on for size... 7 years ago
Bret Curtis 78a3f95ee4 Update before_script.msvc.sh 7 years ago
Bret Curtis 2bf0d598cf
Update before_script.msvc.sh
Wrap in quites
7 years ago
Capostrophic 6e9c08083d
Add missing empty attacker checks 7 years ago
Capostrophic bccba24c40 Make unarmed creature attacks not affect armor condition (fixes #2455) 7 years ago
Bret Curtis 9b6ea0e89f # because our CI VMs are not public, MRs can't use them and timeout 7 years ago
Bret Curtis d3dfe17441 try limiting scope 7 years ago
Finbar Crago 69cd7031e7 Merge branch 'master' into fix_quickkey_segfalt 7 years ago
Finbar Crago 596be205c1 cleanup unnecessary struct keywords... 7 years ago
Bret Curtis 06216aa124 Update .gitlab-ci.yml 7 years ago
Finbar Crago 2722ca50fb fix QuickKeysMenu crash on reopening window after item drop + pickup [see: !11#note_85086570] 7 years ago
Bret Curtis c474709127
Update before_script.msvc.sh 7 years ago
Bret Curtis ca0f6fff4a Update before_script.msvc.sh 7 years ago
Bret Curtis dc48a46e50 Update before_script.msvc.sh 7 years ago
Bret Curtis a6d6dd5995 updating for the nits 7 years ago
Bret Curtis 8811c7141a
Update before_script.msvc.sh
taking nits into account :)
7 years ago
Marc Zinnschlag a45d86bdf3 Merge remote-tracking branch 'gl_thunderforge/4479/separate-game-advanced-settings-in-launcher-take-2' 7 years ago
Marc Zinnschlag f06dd39892 Merge remote-tracking branch 'upstream/master' 7 years ago
Bret Curtis c2ff30c4d7 correcting from GH/AV feedback, testing on GL. 7 years ago
Bret Curtis a532aef935
Update before_script.msvc.sh
updating version check and correct indentation, wrap BOOST_SDK in "" to support dirs with spaces.
7 years ago
Bret Curtis 4c0e475092
Update before_script.msvc.sh
Use powershell trick with boost_temp so there is little chance of collision.
7 years ago
Bret Curtis bccd83c656 Use 1.67 7 years ago
Bret Curtis bc830a9c45 use boost_temp 7 years ago
Bret Curtis 63bbc77ee7 try using the powershell trick from AnyOldName3 7 years ago
Finbar Crago 7ae388086b Merge branch 'master' into fix_quickkey_segfalt 7 years ago
Thunderforge 72f6b1a693 Separating "Game" Advanced Settings into "Game Mechanics" and "User Interface" 7 years ago
Bret Curtis 3379eafd33 Update before_script.msvc.sh 7 years ago
Bret Curtis 3ceb9116de Give pwd -W a try 7 years ago
Finbar Crago ed71656ea6 fix updateActivatedQuickKey() crash
keyboard numbers don't start at zero...
7 years ago
Bret Curtis c4a4111b2e Update before_script.msvc.sh 7 years ago
Bret Curtis fb6ad9faec try %TMP% ? 7 years ago
Bret Curtis 4ad3d66629 try using just ${TMP} 7 years ago
Bret Curtis 8be52d228e
Update before_script.msvc.sh
small fixes
7 years ago
Finbar Crago 24d5fb09da fix crash on simultaneous key presses 7 years ago
Bret Curtis 60ec340fa3 remove toolset_real, use just toolset, do proper comparison 7 years ago
Bret Curtis 71314f0c3a Use boost 1.67 instead of 1.61 7 years ago
Bret Curtis 46575d8de7
Update before_script.msvc.sh
1.61 -> 1.67
7 years ago
Bret Curtis 660193ae1b
Update before_script.msvc.sh
This has working GL Win10 MSVC updates, should be cross-compatible with appveyor.
7 years ago
Bret Curtis 1c4363eaa6 Using SYSTEMDRIVE because TEMP apparently means something different in bash then to windows cmd. 7 years ago
Bret Curtis 7bf502dd02 Bash it out! 7 years ago
Bret Curtis 1061270ac0 Try using @TEMP@ instead of hard coding it. 7 years ago
Bret Curtis 45d77372a0 with 260 char path fixed, this should work. 7 years ago
Bret Curtis 2d70c94733 gather up everything with 7zip 7 years ago
Bret Curtis f07d50e5bf
Merge pull request #1785 from akortunov/warnfix
Fix some GCC warnings
7 years ago
Bret Curtis 102266d08d
Merge pull request #1784 from nikolaykasyanov/revert-sdl-get-attribute
Revert "Retrieve SDL window settings instead of using magic numbers"
7 years ago
Bret Curtis a8adb9374b use quotes 7 years ago
Finbar Crago d790a27060 Merge branch 'master' into fix_quickkey_segfalt 7 years ago
Bret Curtis 7cd0235fed Try creating a zip and archiving it. 7 years ago
Andrei Kortunov d9a1de0ec7 Do not use deprecated function 7 years ago
Andrei Kortunov 5455490ad2 Avoid fall-through in spell selection 7 years ago
Finbar Crago 80a3f0a0d4 switch mSelectedIndex/mActivatedIndex int to mSelected/mActivated keyData pointers 7 years ago
Finbar Crago 335e2c5897 add keyData struct + general cleanup 7 years ago
David Cernat 9102df7fde [General] Make WorldCollisionOverride also work with specific refIds
For now, this only makes it possible to enforce collision for specific refIds for placed objects.
7 years ago
David Cernat c7f10892a9 [General] Add vectorContains util for checking strings in vectors 7 years ago
David Cernat 84af9d9999 [Server] Reorder world map script functions 7 years ago
David Cernat b81ca18316 [Client] Don't clear container Ptrs when disposing of corpses
The reason for this is that only the server should be determine whether a corpse can be disposed of or not.
7 years ago
Bret Curtis 83e23ee6fd gather up artifacts and use all processors available 7 years ago
Nikolay Kasyanov 5fcb091127 Replace FIXME with a detailed explanation of the issue 7 years ago
Bret Curtis f17426cbcd give boost 1.67 a spin with msvc 14.1 7 years ago
Nikolay Kasyanov 9c78364c45 Revert "Merge pull request #1771 from Xenkhan/master"
This reverts commit 9667dd051c, reversing
changes made to f52e06fc19.
7 years ago
David Cernat 7ffdb18bf9 [General] Implement ActorDeath packet, part 1
ActorDeath packets are sent for dead actors before their StatsDynamic packets. They contain the actor's deathReason in a manner similar to that of PlayerDeath packets.

A future commit will replace the deathReason with a variable named killer which will be an mwmp::Target.
7 years ago
Bret Curtis 8511f2398a try a set and call? 7 years ago
Bret Curtis df23e0f857 Try calling it directly 7 years ago
Bret Curtis bd602847b5 fix broken QT 5.7.0 link 7 years ago
Bret Curtis 59a4251a6a try to extract boost higher up in dir, then move. 7 years ago
Bret Curtis 609d6a1b29 bad syntax 7 years ago
Bret Curtis b6fc204dd3 be more aggressive about suppressing message boxes 7 years ago
Bret Curtis f7e1083ba4 get more output from boost 7 years ago
Bret Curtis da5d7afe22 Update .gitlab-ci.yml 7 years ago
Bret Curtis 6751a7991d Update .gitlab-ci.yml 7 years ago
Bret Curtis 2d5f71e5be Update .gitlab-ci.yml 7 years ago
Bret Curtis edd22342f2 Update .gitlab-ci.yml 7 years ago
Bret Curtis 218353e452 Update .gitlab-ci.yml 7 years ago
Bret Curtis 0105a48a4f give %% a try 7 years ago
Bret Curtis 6d1a83e667 Update .gitlab-ci.yml 7 years ago
Bret Curtis 51179a2c38 try a wildcard? 7 years ago
Bret Curtis 1fdffd6ef9 see if we can get win10 going 7 years ago
Bret Curtis 87d9a4ff0b Merge branch 'zini_updates' into 'master'
last minute updates from zini

See merge request OpenMW/openmw!7
7 years ago
Marc Zinnschlag 520e65f822 last minute updates from zini 7 years ago
Marc Zinnschlag 5ee731d86f updated roadmap section 7 years ago
Marc Zinnschlag 8bc6c85396 last minute changes (this time for real; forgot to merge in the last update from the private repo) 7 years ago
Bret Curtis f64d949169
Merge pull request #1780 from akortunov/persistanims
Ignore movement from scripted animations
7 years ago
Marc Zinnschlag 8cda355af6 last minute changes to design doc 7 years ago
Marc Zinnschlag 2afcea3870 added post-1.0 design document 7 years ago
Andrei Kortunov ec73011617 Clean temporary storage if we assign new AI package (bug #4464) 7 years ago
Andrei Kortunov ee45f54b53 Refactor AiTemporaryStorage usage 7 years ago
Andrei Kortunov 3c7ab976c3 Ignore movement from scripted animations (bug #4475) 7 years ago
Finbar Crago cac6d59140 Merge branch 'master' into fix_quickkey_segfalt 7 years ago
David Cernat 15bfa30070 [Server] Make it possible to resend received worldstates 7 years ago
David Cernat 7060ff59c5 [Client] Enforce the default global map cell size in multiplayer 7 years ago
David Cernat fec500c4b0 [Client] Reduce container debug spam by requiring VERBOSE logging for it 7 years ago
Bret Curtis 26615d588e Merge branch 'multi_build' into 'master'
Multi build

See merge request OpenMW/openmw!4
7 years ago
Bret Curtis 4d6ca2c387 preserve dmg artifact 7 years ago
Bret Curtis 9e7731259d what if we try make -j2 package ? 7 years ago
Bret Curtis cfcd9c3fc6 What happens when we don't make install? 7 years ago
Bret Curtis dd60b8f179 only delete files inside OpenMW.app dir 7 years ago
Bret Curtis c1aee49b76 clean up after our previous build. 7 years ago
Bret Curtis 06eb9539bd Let make install do it's thing, it's more reasonable on macos and let's only archive that. 7 years ago
Bret Curtis e068ee3533 tell unzip to overwrite all files 7 years ago
Bret Curtis 9e2c6d9fe1 actually step into the build directory and build! 7 years ago
David Cernat 914b79fcc9 [General] Make it possible to check which placed objects have containers 7 years ago
Bret Curtis 308d78e3da only download via curl if file on server is different than what is currently cached on VM. 7 years ago
Bret Curtis ae4cb0c3ee no need for macos_qt_formula since on osx there is no more qt4, just qt5 7 years ago
Finbar Crago 43c9fd4cec check MWWorld::Ptr != NULL for MWGui ItemPtr tooltips 7 years ago
Finbar Crago 186ec8c50f rm ContainerStore/refItem 7 years ago
Marc Zinnschlag 705b2dca0e Merged pull request #1777 7 years ago
Marc Zinnschlag baeaff2309 Merged pull request #1778 7 years ago
Bret Curtis a0cae78cb2
Merge pull request #1779 from akortunov/coverity
Fix some code coverity issues
7 years ago
Andrei Kortunov 97d8cc0efe Check if the local was not found, just for sure 7 years ago
Andrei Kortunov 7dff8d8fe2 Check cell for null 7 years ago
Finbar Crago 46c6abcf54 add string vectors for name/id in QuickKeysMenu for item lookups 7 years ago
Andrei Kortunov 441463327c Validate map size 7 years ago
Andrei Kortunov 359e748c28 Initialize some missing fields in constructors 7 years ago
David Cernat f20f94a886 [Documentation] Update credits 7 years ago
David Cernat deda6ec071 [Client] Don't send WorldMap packets for already explored map tiles 7 years ago
Bret Curtis d008cd0c46 Update .gitlab-ci.yml 7 years ago
Bret Curtis 87f367ec11 Update .gitlab-ci.yml 7 years ago
Capostrophic d6a170f848
Update changelog 7 years ago
Capostrophic ecafcefae9
Fall back to regular head when getVampireHead fails 7 years ago
Bret Curtis f1158e8129 Update .gitlab-ci.yml 7 years ago
Bret Curtis 55de1c1a72 Update .gitlab-ci.yml 7 years ago
David Cernat d53bd05424 [General] Use slightly larger maximum imageData size in WorldMap packets 7 years ago
Capostrophic afbe8f2161
Update changelog 7 years ago
Capostrophic 35b0546737 Consider <p> tag when discarding post-EOL tag text (regression #4473) 7 years ago
Finbar Crago da4c55d5ad prevent segfalt in QuickKeysMenu when item has been removed from player inventory
added a MWWorld::ContainerStore to hold item copies which are then used to find
real items with findReplacement().

(storing the RefId could be a better solution but would probably leave tooltips broken...)
7 years ago
Bret Curtis 40a9d8ac06 Update .gitlab-ci.yml 7 years ago
David Cernat 5bb2ba1e9e [General] Limit maximum imageData size in WorldMap packets 7 years ago
Bret Curtis c2826ca878 Update .gitlab-ci.yml 7 years ago
Bret Curtis 393ec99944 Update .gitlab-ci.yml 7 years ago
Bret Curtis 88555c0463 Update .gitlab-ci.yml 7 years ago
Bret Curtis 601b69b36c Update .gitlab-ci.yml 7 years ago
Bret Curtis dcba3a1058 Update .gitlab-ci.yml 7 years ago
Bret Curtis 516fc0283b Update .gitlab-ci.yml 7 years ago
Bret Curtis 64cc3b3a6a
Merge pull request #1774 from nikolaykasyanov/ci-macos-1013
[macOS, CI] Build using macOS 10.13 SDK
7 years ago
David Cernat 9888316d8e [Documentation] Update credits 7 years ago
Bret Curtis 9667dd051c
Merge pull request #1771 from Xenkhan/master
Retrieve SDL window settings instead of using magic numbers
7 years ago
Bret Curtis a55583a395
Merge branch 'master' into master 7 years ago
Xenkhan f0acc64544
Update changelog 7 years ago
Marc Zinnschlag f52e06fc19 Merge branch 'glsl-editorconfig' into 'master'
Update .editorconfig to include GLSL

See merge request OpenMW/openmw!3
7 years ago
AnyOldName3 d1736ad0c8 Update .editorconfig to include GLSL 7 years ago
David Cernat 7e90d1f2a4 [Client] Fix interior-to-exterior and v.v. cell transitions for actors
Make sure only players who are cell authorities can get actors to teleport across cells for them, and display a message box for players who are not cell authorities.
7 years ago
Xenkhan 405a0caf29
Remove unneeded whitespace 7 years ago
Xenkhan 5a4817c147
Get rid of reinterpret_cast<> 7 years ago
Nikolay Kasyanov 90ccf5b42b [macOS, CI] Build using macOS 10.13 SDK 7 years ago
Marc Zinnschlag 22eb037c18 Merged pull request #1773 7 years ago
Bret Curtis 6655b7e512
Merge pull request #1740 from nikolaykasyanov/software-cursor-decompression
Decompress cursors using SDL software renderer on Mac or if OSG >= 3.5.8 or if OPENMW_DECOMPRESS_TEXTURES is set
7 years ago
Bret Curtis 9cf815505b
formatting 7 years ago
Marc Zinnschlag 4e121a7434 updated credits file 7 years ago
Marc Zinnschlag c90996f991 Merged merge request !1 7 years ago
Marc Zinnschlag 6315848620 Merged merge request !2 7 years ago
Nikolay Kasyanov 65ec58a669 Move the changelog entry to 0.44.0 7 years ago
Bret Curtis b619c0de2d
Merge pull request #1772 from akortunov/deathanim
Fast-forward death animation to end if death animation was finished earlier
7 years ago
Andrei Kortunov c195144b17 Take transformation from first node with given name in file (bug #4469) 7 years ago
Atahualpa c0fc615cd6 Adds the option to ignore "Base" records when running the verifier. (fixes #4466)
Improves previous commit:
1. Initialise mIgnoreBase boolean member with FALSE.
2. Remove isBaseOnly() function and replace with direct use of Record member.
7 years ago
Bret Curtis 664edc5a39
Merge pull request #1757 from akortunov/musicfix
Handle exception when try to load non-music file
7 years ago
Andrei Kortunov c9756cee4c Fast-forward death animation to end if death animation was finished earlier (regression #4468) 7 years ago
Bret Curtis 3ebebdf3c1
Merge pull request #1751 from wareya/terrainbleeding
Fix #4452
7 years ago
Bret Curtis f3923a41c0
Merge pull request #1770 from Capostrophic/open
Make Open spells casted by anything trigger player crime event (bug #4461)
7 years ago
David Cernat fd05beef94 [Client] Don't delete disposed of corpses on client
Clients should instead await a server reply approving the deletion.
7 years ago
David Cernat c3c7f2c8f9 [Server] Don't automatically synchronize ObjectDelete packets 7 years ago
Atahualpa 9d61d76e92 Adds the option to ignore "Base" records when running the verifier. (fixes #4466)
Adds a boolean setting to the user preferences. This setting is locally saved to all OpenMW-CS check stages. When a verification is done, the setting is updated on setup for each check stage. If set to true, the boolean value is then used to skip the verification process for every base record - minus some special cases where, e.g., counters are to be set first.

Related issue:
- Fixes #4466: Editor: Add option to ignore base records when running verifier (https://gitlab.com/OpenMW/openmw/issues/4466)

Tests:
The changes were successfully tested in OpenMW-CS by creating faulty "Base" and "Modified" records for every record type (if possible) and, then, running the verifier with and without the option respectively.
7 years ago
Xenkhan 24ddb66af9
Retrieve SDL window settings instead of using magic numbers 7 years ago
Capostrophic 6c23caadd7 Fix crash when a target in a different cell is (un)locked 7 years ago
Adam Bowen 0d70cb9473 Re-link bugtracker links to Gitlab
* Link "1.0" issues to the "1.0" tag
* Link "report a bug" to the issues page
* Link "known issues" to the "Bug" tag
7 years ago
Capostrophic 0731d79c09
Update changelog 7 years ago
Capostrophic 0c4fa55f16 Make Open spells casted by anything trigger player crime event (fixes #4461) 7 years ago
Marc Zinnschlag 101f0b1579 Merge remote-tracking branch 'upstream/master' 7 years ago
Bret Curtis 975597bac9
Merge pull request #1766 from rhtucker/master
Started migrating installation guide from the wiki.
7 years ago
Bret Curtis c1eb9042b3
Merge branch 'master' into terrainbleeding 7 years ago
Marc Zinnschlag 7cfb7063c2 Merged pull request #1767 7 years ago
Marc Zinnschlag 7be069fcd2 Merged pull request #1743 7 years ago
Marc Zinnschlag f275e657f6 Merged pull request #1761 7 years ago
Andrei Kortunov 5fd3ec1035 Implement unlockable locks with 'lock 0' console command 7 years ago
Marc Zinnschlag a8ad530db9 Merged pull request #1749 7 years ago
Marc Zinnschlag 2a52ade219 Merged pull request #1760 7 years ago
David Cernat aa3639f2da
Merge pull request #450 from TES3MP/0.6.2
Add 0.6.2 commits up to 19 Jun 2018
7 years ago
David Cernat 5b461b09ca [Client] Display error when receiving ID_INCOMPATIBLE_PROTOCOL_VERSION 7 years ago
David Cernat 29be79e852 [General] Switch RakNet enums to CrabNet enums
CrabNet is TES3MP's fork of RakNet that has deviated too far from RakNet to still be compatible with it.
7 years ago
rhtucker fe86e7ffc7
Fixed inconsistent use of "since" 7 years ago
Bret Curtis 1c7d5c68c5 Update CHANGELOG.md, technically solved by moving from redmine over to gitlab. 7 years ago
Capostrophic 0cf2f6452b Update changelog 7 years ago
Capostrophic 8376c8c68e Allow partial matches in NotCell condition (fixes #4459) 7 years ago
Bret Curtis e93104a6b3
Merge pull request #1758 from Capostrophic/screenshot
Remove screenshot taken message again
7 years ago
Bret Curtis 70dec71c00
Merge pull request #1763 from akortunov/activatedoor
Forbid actors to use teleporting doors
7 years ago
Bret Curtis 3cc6da1db2
Update door.cpp
typo fix
7 years ago
Bret Curtis 88bf74b2a3
Merge pull request #1765 from akortunov/wanderfix
Fix arguments parsing for AiWander console command
7 years ago
Bret Curtis 3f2dbdc8a8
Merge branch 'master' into wanderfix 7 years ago
Bret Curtis ecfc5fcd63
Merge pull request #1764 from akortunov/lightfix
Ignore lights without CanCarry flags when NPC selects torch
7 years ago
Ryan Tucker 7e23e6586b Put together most of the informal guide on contributing to documentation. 7 years ago
Ryan Tucker c5f5984c09 Started migrating installation guide from the wiki.
Fixed a bunch of errors that popped up on my local build.
7 years ago
Andrei Kortunov f3f7487664 Fix arguments parsing for AiWander console command (bug #4458) 7 years ago
Andrei Kortunov e08b0d3070 Ignore lights without CanCarry flags when NPC selects torch (bug #4457) 7 years ago
Nikolay Kasyanov 75d79e98b9 Force software decompression if OPENMW_DECOMPRESS_TEXTURES is set 7 years ago
Andrei Kortunov 2a65aaf5ab Forbid actors to use teleporting doors (bug #2562) 7 years ago
Nikolay Kasyanov 359f87ab9f Change imageToSurface to return a unique_ptr to avoid manual surface cleanup 7 years ago
Bret Curtis 3f88aa46d0
Merge pull request #1759 from Thunderforge/refactor-launcher-sdl
Refactor SDL loading in Launcher to fix macOS errors
7 years ago
Andrei Kortunov 9c3da41130 Add murder bounty when a player follower commits murder (bug #2852) 7 years ago
Marc Zinnschlag 5a9e382efe Merged pull request #1421 7 years ago
Thunderforge 506d615acc Moving csignal import from main to graphicspage 7 years ago
Thunderforge e51bfb46c6 Adding Changelog records 7 years ago
Thunderforge 7615e78e52 Move SDL initialization from main.cpp to graphicspage.cpp 7 years ago
Capostrophic 1abf749f03
Remove screenshot taken message 7 years ago
Andrei Kortunov 2854f6ca83 Handle exception if we try to play non-music file (bug #4416) 7 years ago
Miloslav Číž 2a23b53515 Merge branch 'drummyfish/openmw-toggleborders' 7 years ago
Miloslav Číž 477e1437d2 Resolve conflicts 7 years ago
Andrei Kortunov 49ba00a3ec Add NPC validation to esmstore (bug #2772) 7 years ago
Miloslav Číž 34f8eca7bd Fix indent 7 years ago
Miloslav Číž 31c68c534c Merge branch 'drummyfish/openmw-toggleborders' 7 years ago
Miloslav Číž 24078d4a72 Update CHANGELOG 7 years ago
Miloslav Číž ab8de9fa14 Set node mask to cell borders 7 years ago
Miloslav Číž 414e6caafe Make tb work with distant terrain 7 years ago
Miloslav Číž f18d57429e Move cell border management to World 7 years ago
Miloslav Číž 1b8d500c07 Make tb command work again 7 years ago
Miloslav Číž 1fd5ad3e56 Use REAL_SIZE constant 7 years ago
Bret Curtis ccfc07e7e3
Merge pull request #1548 from drummyfish/screenshot360
360° screenshots
7 years ago
Miloslav Číž dd00e438fe Merge branch 'screenshot360' of https://github.com/drummyfish/openmw into screenshot360 7 years ago
Miloslav Číž 7178ee3a6e Add FIXME comment 7 years ago
Miloslav Číž d629c30fdb
Merge branch 'master' into screenshot360 7 years ago
Miloslav Číž 5387e3ba8f Update CHANGELOG 7 years ago
Bret Curtis 60d2678cff
Merge pull request #1755 from akortunov/master
Add missing changelog entries
7 years ago
Andrei Kortunov e814843cdb Add missing changelog entries 7 years ago
Marc Zinnschlag 2b35c5efd7 Merge remote-tracking branch 'upstream/master' 7 years ago
Marc Zinnschlag aea481eacb Merged pull request #1753 7 years ago
Marc Zinnschlag f62df90960 Merged pull request #1572 7 years ago
Marc Zinnschlag 17db4b4db3 Merged pull request 1754 7 years ago
Bret Curtis 48d74a8781 Disable testing for now, not yet necessary. 7 years ago
Bret Curtis a275972361 Merge branch 'add_pipeline_badge' into 'master'
Update README.md to indicate that our gitlab pipeline is building

See merge request OpenMW/openmw!1734
7 years ago
Andrei Kortunov 61c968d550 Ignore broken items when search for replacement (bug #4453) 7 years ago
Bret Curtis 45957dd707
Merge pull request #1647 from Capostrophic/fatigue
Improve the logic of trading formulae (bug #2222)
7 years ago
Marc Zinnschlag 7ca56ccd29 set search status bar to 'no results' message when search yields no results 7 years ago
Andrei Kortunov 81b78a82e8 AI: try to open doors every AI_REACTION_TIME seconds (bug #4454) 7 years ago
Bret Curtis 9bd940e153 Update README.md to indicate that our gitlab pipeline is building 7 years ago
Marc Zinnschlag 7d2394273e added statusbar to search window (Fixes #3276) 7 years ago
Bret Curtis 032768a505 try to use as many cores as possible 7 years ago
Bret Curtis 3f4d5598a5 Update README.md to be more generic about OpenMW 7 years ago
Bret Curtis da37585a8e Update .gitlab-ci.yml so that we only build with -j2 7 years ago
Bret Curtis 559754fa76 try this dance again 7 years ago
Bret Curtis a49649c313 Try to get it to run and build on my docker instance. 7 years ago
Bret Curtis 674925dfb5 Merge branch 'psi29a-master-patch-17094' into 'master'
what does this give us from a CI perspective?

See merge request OpenMW/openmw!1732
7 years ago
Miloslav Číž dcfbd554bb Remove try catch block 7 years ago
Bret Curtis 2e2be76e3f Update .gitlab-ci.yml 7 years ago
Bret Curtis 3e4dc31e39
Merge branch 'master' into fatigue 7 years ago
Bret Curtis a747318c90
Merge branch 'master' into terrainbleeding 7 years ago
Marc Zinnschlag 4c4d4672d4 Merged pull request #1752 7 years ago
Marc Zinnschlag 1ba0317905 Merged pull request #1670 7 years ago
Marc Zinnschlag 48711bbdde Merged pull request #1592 7 years ago
Miloslav Číž c3d7ee5a9e Resolve merge conflicts 7 years ago
Thunderforge b37f325126 #4324/Updating Changelog.md 7 years ago
Thunderforge 058cfb553c Adding CFBundleIdentifier to OpenMW's Info.plist file for Macs 7 years ago
wareya bd4badc153 update changelog 7 years ago
wareya 94f695cffc Fix #4452 and remove dead code 7 years ago
Miloslav Číž db8aaa74d6 Start cell border debug drawing 7 years ago
Bret Curtis 3c933ebaad Update .gitlab-ci.yml 7 years ago
Bret Curtis cc396f4dfd Update .gitlab-ci.yml 7 years ago
Nikolay Kasyanov 224b94c0ce Decompress cursors using SDL software renderer on Mac or if OSG >= 3.5.8 7 years ago
Andrei Kortunov 9c45cc7e48 Use player reference instead of pointer 7 years ago
Marc Zinnschlag a3911f52a0 Merged pull request #1750 7 years ago
Marc Zinnschlag 6114cff842 updated credits file 7 years ago
Marc Zinnschlag 97773697a9 Merge remote-tracking branch 'florianjw/precise-rotations' 7 years ago
Capostrophic 1c8a20a54a Set ok button focus in settings window by default (fixes #4368) 7 years ago
Marc Zinnschlag 565922f9ad naked expressions beginning with the member operator were allowed erroneously outside of the console (Fixes issue #2971) 7 years ago
Marc Zinnschlag 296ad8424e updated changelog 7 years ago
Marc Zinnschlag 8d0f717e72 Merged pull request #1739 7 years ago
Marc Zinnschlag 90febde783 Merged pull request #1742 7 years ago
Marc Zinnschlag 816a1733dc Allow comma after Begin and End script instruction (Fixes #4451) 7 years ago
Bret Curtis 1c736ea064 Update .gitlab-ci.yml 7 years ago
Andrei Kortunov bce6d79ad3 Add changelog entries, related to animations 7 years ago
Andrei Kortunov f299be8158 Play scripted animations even if SkipAnim is used 7 years ago
Bret Curtis a166534226 Update .gitlab-ci.yml 7 years ago
Bret Curtis dddceba8f2 Update .gitlab-ci.yml 7 years ago
Bret Curtis e3832cd2e2 Update .gitlab-ci.yml 7 years ago
Bret Curtis bc0eb3349b Update .gitlab-ci.yml 7 years ago
Andrei Kortunov 25bb7c1826 Make 'PlayGroup idle' to cancel scripted animations 7 years ago
Bret Curtis e5dff83e38 Update .gitlab-ci.yml 7 years ago
Bret Curtis a89441e879 Update .gitlab-ci.yml 7 years ago
Bret Curtis 20d8a424d6 Update .gitlab-ci.yml 7 years ago
Andrei Kortunov 0e441d48ac Give scripted animations highest priority (bug #4286) 7 years ago
Bret Curtis 8c4731728c Update .gitlab-ci.yml 7 years ago
Bret Curtis de1cad86ab Update .gitlab-ci.yml 7 years ago
Bret Curtis d986354d53 Update .gitlab-ci.yml 7 years ago
Bret Curtis 8714f48ce7 Update .gitlab-ci.yml 7 years ago
Bret Curtis 04dc74a1d6 Update .gitlab-ci.yml 7 years ago
Marc Zinnschlag 3af003d36b Merge branch 'test_update_workflow' into 'master'
Update README.md with an important distinction.

See merge request OpenMW/openmw!1731
7 years ago
Bret Curtis 7502a7dc4d what does this give us from a CI perspective? 7 years ago
Andrei Kortunov 0c92655250 Avoid code duplication in character manager 7 years ago
Andrei Kortunov e3812f4075 Check creature stats only for actors 7 years ago
Andrei Kortunov b0a140e714 Disable actor collision only after end of death animation 7 years ago
Andrei Kortunov ebaa6fb5a2 Play death scream only once 7 years ago
Bret Curtis 5fba1c599b Update README.md with an important distinction. 7 years ago
Andrei Kortunov 0d3f535590 Warn about mod conflicts 7 years ago
Andrei Kortunov 427be928d0 Do not update animation state for dead actors 7 years ago
Andrei Kortunov 977a27ecb7 Do not clear corpses until end of death animation (bug #4307) 7 years ago
Bret Curtis 7310e3c8c2
Merge pull request #1748 from akortunov/bookfix
Do not show any book text after last <BR> tag
7 years ago
Andrei Kortunov a42c663fd7 Do not interrupt scripted animations by death animation (bug #4286) 7 years ago
Andrei Kortunov d0619cfb35 Play death animation for non-persisting actors with 0 health (bug #4291) 7 years ago
Andrei Kortunov 6099735c60 Early out only when scripted animation is playing 7 years ago
Bret Curtis e53fb953bc
Merge pull request #1746 from Capostrophic/interrupt
Make WakeUpPC interrupt waiting if it was supposed to be (bug #3629)
7 years ago
Andrei Kortunov e234dd2a36 Do not interrupt scripted animations 7 years ago
Bret Curtis 23d16dc870
Merge pull request #1745 from Thunderforge/patch-1
Adding Feature #4345 to Changelog.md
7 years ago
Andrei Kortunov 66a46ff03c Do not show any book text after last <BR> tag. 7 years ago
Capostrophic d43766d3c9 Make WakeUpPC interrupt waiting if it was supposed to be (fixes #3629) 7 years ago
Thunderforge ab03d238bb
Adding Feature #4345
Implemented as part of #1623, but not added.
7 years ago
Andrei Kortunov acd3cba5fa Store previous items in the savegame 7 years ago
Andrei Kortunov 9fd2d57b86 Move previous items to player 7 years ago
Andrei Kortunov f977c6876f Bound items: store item ID instead of pointer 7 years ago
Andrei Kortunov 4de9d9fa77 Split adjustBoundItem() 7 years ago
Andrei Kortunov d1b1cb748d Reequip previous item only if the expired bound item was equipped 7 years ago
Andrei Kortunov 9b72a6ac69 Use the MWWorld::Ptr() instead of string ID 7 years ago
Andrei Kortunov 0375bedab2 Equip previous item after a bound item expires (bug #2326) 7 years ago
Bret Curtis 926ddcd47e
Merge pull request #1741 from akortunov/master
Do not reset mUpperBodyState for weapon->weapon switch
7 years ago
Marc Zinnschlag dbc87e7c7d updated changelog 7 years ago
Marc Zinnschlag 25e4c52adf Merged pull request #1744 7 years ago
Thunderforge a9ca528fb8 Adding version number of macOS build of OpenMW 7 years ago
wareya 7344323b9e remove indentation from blank lines 7 years ago
wareya 8f45b0d53a remove unnecessary conditions 7 years ago
Andrei Kortunov fba0c155df Fix assertion fail related to NiLookAtController 7 years ago
Andrei Kortunov ae87e0d3fc Do not reset mUpperBodyState for weapon->weapon switch (regression #4446) 7 years ago
Andrei Kortunov 5ead6353ac Add missing changelog entry 7 years ago
Andrei Kortunov 4ba361fea6 Unhardcode sunset and sunrise settings (bug #1990) 7 years ago
Marc Zinnschlag 7d9de93fd3 Merged pull request #1477 7 years ago
Marc Zinnschlag 551a69f1b1 Merged pull request #1559 7 years ago
Marc Zinnschlag efb4abbb7f Merged pull request #1623 7 years ago
Marc Zinnschlag 619110ca4c Merged pull request #1737 7 years ago
Marc Zinnschlag 76972bb2f6 Merged pull request #1709 7 years ago
Marc Zinnschlag 6a4cd975b6 Merge remote-tracking branch 'capostrophic/goodbye' 7 years ago
Thunderforge dfa9968565 Renaming Launcher::DataFilesPage::signalSelectedFilesChanged to signalLoadedCellsChanged 7 years ago
Thunderforge 62c4eb8d6a Explicitly flagging loaded cells changed as queued 7 years ago
wareya 6277f5511c fix #3876 and #3993 7 years ago
Andrei Kortunov 2e6cf2a414 Add changelog entries 7 years ago
Andrei Kortunov 6ed2773299 Do not stack return packages 7 years ago
Andrei Kortunov 74a2cbe696 AI: return back after pursuit 7 years ago
Andrei Kortunov 3d0631cfcc Store last AI package in savegame 7 years ago
Andrei Kortunov 3a0ee78d2b AiTravel: store mHidden flag in savegame 7 years ago
Andrei Kortunov 2f5beb8853 Remove unnecessary hack 7 years ago
Andrei Kortunov 57d686131e Remove redundant condition 7 years ago
Andrei Kortunov 5105c67642 Add mHidden field to AiTravel 7 years ago
Andrei Kortunov 81f29d8dcd AiWander: resume moving to destination after combat 7 years ago
Andrei Kortunov 18ff097e4a Add the parameter to AiSequence::stack() to control ability to cancel other AI packages 7 years ago
Andrei Kortunov 9d27eb197f AiWander: return to initial position only after combat 7 years ago
Bret Curtis 3c2c0960d1
Merge pull request #1734 from MocquillonCedric/windows-cmake-pre3.9-support
Add support for msvc with cmake version pre 3.9 (fixes #4429)
7 years ago
Bret Curtis 61c969e970
Merge branch 'master' into hitboxfix 7 years ago
Capostrophic b274931165
Revert erroneous changes 7 years ago
Capostrophic dd2a11b243
Merge branch 'master' into goodbye 7 years ago
Capostrophic 99781ab70c
Fix changelog 7 years ago
Capostrophic 01f12a6bd5
Update changelog 7 years ago
Capostrophic 24c1ee7744 Use relative stat difference for haggling 7 years ago
Capostrophic b7026df551 Improve the offered price formula (Fixes #2222) 7 years ago
Andrei Kortunov fed10e87aa Store integer actor ID in AI packages (bug #4036) 7 years ago
Marc Zinnschlag 9d0ce25052 Merged pull request #1738 7 years ago
Cédric de5a3eaae9 Fix indentation issue: replace tab by spaces 7 years ago
Marc Zinnschlag 7899f44173 Merged pull request #1619 7 years ago
Bret Curtis 6c04cecab1
Merge pull request #1704 from akortunov/per_group_animation
[Feedback needed] Support for per-group KF-animation files
7 years ago
Andrei Kortunov fea34bd73f Added support for per-group animation files 7 years ago
Capostrophic 0db702dfa7
Update changelog 7 years ago
Capostrophic 11103211c5 Make Goodbye and Choice choices mutually exclusive 7 years ago
Andrei Kortunov 2fada94879 Improve MRK NiStringExtraData handling (bug #4419) 7 years ago
Marc Zinnschlag 53e8882366 updated changelog 7 years ago
Marc Zinnschlag 21ea49fe83 Merge remote-tracking branch 'capostrophic/physics' 7 years ago
Cédric b784c7873d Update authors 7 years ago
Cédric 4a9b790dbe Update changelog 7 years ago
Cédric 7cafec9861 Add support for msvc with cmake version pre 3.9 (fixes #4429) 7 years ago
David Cernat 2a3c74bfcc Merge pull request #447 from OpenMW/master while resolving conflicts
# Conflicts:
#	README.md
7 years ago
Capostrophic 1a354f88ac Make choices trigger goodbye if Goodbye is used (fixes #3897) 7 years ago
Bret Curtis f8c2caf309
Merge pull request #1735 from akortunov/readmefix
Update AppVeyor build status link
7 years ago
Bret Curtis c1b7fe4643
Merge pull request #1731 from AnyOldName3/windows-pre-build-error-messages
Add easily understood error messages to the prebuild script instead o…
7 years ago
Bret Curtis 30fd8a4914
Merge pull request #1732 from akortunov/docfix
Use link to OpenMW Wiki page instead of direct NifSkope page
7 years ago
Andrei Kortunov 05026b891e Add changelog entries 7 years ago
Andrei Kortunov 57b2948ee1 Update AppVeyor build status link 7 years ago
Bret Curtis 937cbfa0a1
small commit to rigger AV 7 years ago
Andrei Kortunov 02f1f71221 Use link to OpenMW Wiki page instead of direct NifSkope page 7 years ago
AnyOldName3 a1ab1dc7fe Add easily understood error messages to the prebuild script instead of vague/silent failures. 7 years ago
Andrei Kortunov 6eb531c6ac Add missing changelog entries 7 years ago
Andrei Kortunov 1b9edbe119 Add unequip animation during stance switching (bug #4327) 7 years ago
Andrei Kortunov bde1d07d4e Use hitboxes and focused object for touch spells (bug #3374) 7 years ago
Andrei Kortunov 4666a6a0ab Use default hit formula as fallback 7 years ago
Andrei Kortunov 9e5d577a71 Aim from center of attacker to center of target 7 years ago
Andrei Kortunov f5dc9f0162 Use hitbox cone only as fallback 7 years ago
Andrei Kortunov ab433102a4 Increase hit distance for player by halfExtents 7 years ago
Marc Zinnschlag fb3facde54 updated changelog 7 years ago
Marc Zinnschlag 7b4a69ff2f Merged pull request #1728 7 years ago
Marc Zinnschlag 362aa23546 Merged pull request #1724 7 years ago
Marc Zinnschlag 2ab31b0c18 Merged pull request #1723 7 years ago
David Cernat 2942bf6455
Merge pull request #445 from OpenMW/master
Add OpenMW commits up to 6 Jun 2018
7 years ago
David Cernat 72862dc255 [General] Turn PlayerMap into WorldMap, now a Worldstate packet 7 years ago
Marc Zinnschlag 98063c5afc updated changelog with last-minute crash-bug fix 7 years ago
David Cernat a28b27f5d9 Merge pull request #443 from OpenMW/master while resolving conflicts
# Conflicts:
#	README.md
7 years ago
David Cernat 0d0c4ac235 [Client] Use REPLY_TO_REQUEST container sub-action for partial requests 7 years ago
David Cernat 04a2025340 Fix crash when adding items to certain disabled creatures (bug #4441) 7 years ago
David Cernat 83014d6381 [Client] Set actors as the owners of their items when editing containers 7 years ago
David Cernat bacecc93e3 [Server] Make it possible to resend a received ObjectList of any kind
Additionally, make existing related functions less confusing.
7 years ago
David Cernat 494edbe5cb [General] Add REPLY_TO_REQUEST container sub-action 7 years ago
David Cernat c24157f6f9 [General] Fix CMakeLists in components for BaseObject 7 years ago
Marc Zinnschlag 7605d928db added section for 0.45 to changelog 7 years ago
David Cernat 8ea9485e6b [Client] Make container debug information more useful 7 years ago
David Cernat c20a0c72c5 Merge pull request #442 from OpenMW/master while resolving conflicts
# Conflicts:
#	CMakeLists.txt
7 years ago
Marc Zinnschlag 13f7b53b1c Revert "Don't force DDS file usage (fixes #1392)"
This reverts commit 90f3ff2da4.
7 years ago
Marc Zinnschlag cd7268e9af Merge remote-tracking branch 'akortunov/effectResistFix' into openmw-44 7 years ago
Marc Zinnschlag 2193983a69 updated changelog 7 years ago
Marc Zinnschlag cae744161b increased version number 7 years ago
Thunderforge d46590934a Importing mutex 7 years ago
Thunderforge e282ece3d1 Fixing bug with autocomplete not loading correctly during startup 7 years ago
Thunderforge 103a7ac628 Using a mutex lock to prevent race conditions 7 years ago
Capostrophic c14536a399 Update faction-owned items confiscation 7 years ago
Bret Curtis 896825e71d
Merge pull request #1729 from elsid/fix_utf8_encoding
Fix UTF-8 econding
7 years ago
elsid c71df7249d
Fix UTF-8 econding
To be able run gcovr
7 years ago
Capostrophic 3810ade67a Don't make unnecessary faction ID searches 7 years ago
Capostrophic 191cc76378 Consider faction ownerships in item stolen checks (fixes #4293) 7 years ago
Thunderforge e26c675829 Changing join to detach so that the thread will not block the UI 7 years ago
Bret Curtis 4a2b973052
Merge pull request #1726 from elsid/fix_catch_warnings
Fix warnings: catching polymorphic type by value
7 years ago
Bret Curtis 2810a87956
Merge pull request #1727 from Capostrophic/refloading
Make weapon durability short unsigned (bug #4435)
7 years ago
Capostrophic eecde340cf Make weapon health short unsigned (fixes #4435) 7 years ago
elsid dba79f4d4d
Fix warnings: catching polymorphic type by value
openmw/apps/openmw/mwworld/worldimp.cpp: In member function ‘virtual bool MWWorld::World::findExteriorPosition(const string&, ESM::Position&)’:
openmw/apps/openmw/mwworld/worldimp.cpp:2650:25: warning: catching polymorphic type ‘class std::invalid_argument’ by value [-Wcatch-value=]
             catch (std::invalid_argument)
                         ^~~~~~~~~~~~~~~~
openmw/apps/openmw/mwworld/worldimp.cpp:2654:25: warning: catching polymorphic type ‘class std::out_of_range’ by value [-Wcatch-value=]
             catch (std::out_of_range)
                         ^~~~~~~~~~~~

openmw/components/widgets/numericeditbox.cpp: In member function ‘void Gui::NumericEditBox::onEditTextChange(MyGUI::EditBox*)’:
openmw/components/widgets/numericeditbox.cpp:41:21: warning: catching polymorphic type ‘class std::invalid_argument’ by value [-Wcatch-value=]
         catch (std::invalid_argument)
                     ^~~~~~~~~~~~~~~~
openmw/components/widgets/numericeditbox.cpp:45:21: warning: catching polymorphic type ‘class std::out_of_range’ by value [-Wcatch-value=]
         catch (std::out_of_range)
                     ^~~~~~~~~~~~
7 years ago
Andrei Kortunov be394870e4 Fix regressions in spell resistance 7 years ago
Andrei Kortunov 84c8fb9df7 Add pursue package only when crime was reported (bug #4433) 7 years ago
Andrei Kortunov 24863f620b RotateWorld: rotate around world axis (bug #4426) 7 years ago
Bret Curtis d73c6ebe60
Merge pull request #1721 from akortunov/appveyor
AppVeyor: build with Release configuration
7 years ago
Andrei Kortunov de2513653e AppVeyor: build with Release configuration 7 years ago
Thunderforge 26dfef7970 Changing where we are loading cells to prevent Qt access issue 7 years ago
Thunderforge 78234e9468 Moving autocomplete code to thread 7 years ago
David Cernat 669d4d3d7e
Merge pull request #440 from OpenMW/master
Add OpenMW commits up to 27 May 2018
7 years ago
David Cernat 3efe05a88e [General] Implement WorldCollisionOverride packet 7 years ago
David Cernat 5d30a884ba [Client] Add Worldstate to CMakeLists 7 years ago
David Cernat e8ec031a81 [Client] Create Worldstate class that inherits BaseWorldstate 7 years ago
scrawl dbb7277544
Merge pull request #1722 7 years ago
scrawl 31ea7c8edd
Revert "set rebalance soul gem values to true by default"
This reverts commit 2963524a01.
7 years ago
Thunderforge c2fff61ccd Changing so that data changes happen only after the addon is checked 7 years ago
Capostrophic 7e38bb8513 Verifier: improve handling of class name and description 7 years ago
scrawl cfdf99f601
Revert "Merged pull request #1573"
This reverts commit 7324bd368f, reversing
changes made to 810e4416f6.
7 years ago
scrawl 99ffaafe30
Revert "Merge pull request #1701 from akortunov/standfix"
This reverts commit da47fc79f5, reversing
changes made to 7324bd368f.
7 years ago
Marc Zinnschlag b151a89528 Merged pull request #1568 7 years ago
Marc Zinnschlag bbc337a0af code cleanup 7 years ago
Marc Zinnschlag e76df5f4d3 minor tooltip fixes 7 years ago
Marc Zinnschlag e30ade81be Merged pull request #1680 7 years ago
David Cernat f7a084c824 [Client] Use faster check for whether actors are DedicatedPlayers 7 years ago
David Cernat c8ec77875c [Client] Update old comments for changes made by tes3mp 7 years ago
Bret Curtis 13391e833d
Merge pull request #1718 from akortunov/appveyor
Preserve AppVeyor artifacts
7 years ago
Andrei Kortunov 48e15dabc3 Try to generate PDB for release builds 7 years ago
Marc Zinnschlag 832b4bb778 Merged pull request #1659 7 years ago
Bret Curtis 42ef4ed843
Merge pull request #1719 from nikolaykasyanov/deduplicate-nightlies
[macOS, CI] Do not upload a nightly if there's already one of the same commit
7 years ago
David Cernat 416ee77639 [General] Add placeholder for WorldCollisionOverride packet 7 years ago
David Cernat 2edb511a0b [Client] Remove unnecessary condition from WorldTime processor 7 years ago
David Cernat 49ea76aa9d [General] Add notes for InputDialogs in GUIBoxes packet 7 years ago
David Cernat 3b5fb9cd6b [General] Make it possible to set year via WorldTime 7 years ago
Nikolay Kasyanov ba3a02ad05 [macOS, CI] Do not upload a nightly if there's already one of the same commit 7 years ago
Andrei Kortunov 77c5e85e8d Enable release builds 7 years ago
Andrei Kortunov 8c95676352 Preserve AppVeyor builds 7 years ago
David Cernat 4acf93b7db [General] Make it possible to set days passed via WorldTime 7 years ago
David Cernat 74c2a0b311
Merge pull request #438 from OpenMW/master
Add OpenMW commits up to 24 May 2018
7 years ago
Andrei Kortunov 1abff5365b Capitalize enchanted items names again in spells window 7 years ago
Andrei Kortunov afae398b5c Use utf8 lowercase function for journal index to avoid code duplication 7 years ago
Andrei Kortunov b5374029e5 Implement case-insensitive search in spell window 7 years ago
Marc Zinnschlag 1daf8474a4 Merged pull request #896 7 years ago
Andrei Kortunov 9ac752ea70 Implement filtering in the spells window 7 years ago
David Cernat 46744ee90f [General] Make WorldTime script functions more consistent with others 7 years ago
Bret Curtis da47fc79f5
Merge pull request #1701 from akortunov/standfix
Do not apply queue movement for standing actors
7 years ago
Marc Zinnschlag 7324bd368f Merged pull request #1573 7 years ago
Marc Zinnschlag 810e4416f6 Merged pull request #1691 7 years ago
Marc Zinnschlag d92d754834 Merged pull request #1697 7 years ago
Marc Zinnschlag 1564a3f6aa Merged pull request #1713 7 years ago
Marc Zinnschlag 2f958881b7 Merged pull request #4413 7 years ago
David Cernat 8d36d0d945 [General] Make it possible to change world's time scale via WorldTime 7 years ago
David Cernat f01c761cb1 [General] Use correct orderChannel for WorldTime packets 7 years ago
David Cernat 0be6de6607 [General] Turn RecordDynamic into a Worldstate packet 7 years ago
David Cernat 031a80ed5a [Client] Don't advance time when waiting, traveling, training or jailed 7 years ago
David Cernat 02ba641bef [Server] Use correct index changes for dynamic stat script functions 7 years ago
Thunderforge d58cce9c72 Adding WIP code to dynamically change the autocomplete fields 7 years ago
David Cernat da66face25 [General] Rename GameTime packet into WorldTime 7 years ago
David Cernat 296c69d788
Merge pull request #436 from OpenMW/master
Add OpenMW commits up to 22 May 2018
7 years ago
Bret Curtis 3fa3fc9d85
Merge pull request #1716 from declan-millar/soulgem_value_rebalance
Soul gem value rebalance
7 years ago
declan-millar 2963524a01 set rebalance soul gem values to true by default 7 years ago
Nelsson Huotari 825c331764 Remove texture filtering, better ltex importing, reindexing duplicates 7 years ago
declan-millar 7092dc4f40 Merge branch 'master' of https://github.com/OpenMW/openmw into soulgem_value_rebalance 7 years ago
Bret Curtis b4098b24b7
Merge pull request #1717 from akortunov/default_terrain
Render default land texture for Wilderness cells with distant terrain
7 years ago
Andrei Kortunov 888c2d9a33 Render default land texture for Wilderness cells with distant terrain 7 years ago
declan-millar b8df4b7c5a Tidy in-code comment 7 years ago
declan-millar 844aef85f3 Replace spelling: soulgem -> soul gem in code comment 7 years ago
declan-millar 9ed4f33048 Replace spelling: soulgem -> soul gem 7 years ago
declan-millar 028b528c0b Get soul magnitude before checking the rebalance setting 7 years ago
declan-millar 9346a552fa Use Rebalance soulgem values option to set soulgem value 7 years ago
declan-millar 0320f9a74d Merge branch 'master' of https://github.com/OpenMW/openmw into soulgem_value_rebalance 7 years ago
declan-millar 78e79d5775 Add advanced option to Rebalance soulgem values to the launcher 7 years ago
David Cernat 5af1150ab2 [General] Turn GameTime into a Worldstate packet 7 years ago
David Cernat e87e1dbb30 [General] Fix Worldstate packets by adding missing lines 7 years ago
David Cernat 815d17d9db
Merge pull request #433 from OpenMW/master
Add OpenMW commits up to 21 May 2018
7 years ago
Bret Curtis 5775f420e2
Merge pull request #1714 from ananace/patch-9
Switch Appveyor CI to x64 VS2015 / 2017
7 years ago
David Cernat e690ff0e29
Merge pull request #432 from OpenMW/master
Add OpenMW commits up to 18 May 2018
7 years ago
Nelsson Huotari 8ae46519cf Fix missed worldspacehits, add linebreak to tooltip 7 years ago
Nelsson Huotari 21e8d08e69 Handle invalid texture id's 7 years ago
Alexander "Ananace" Olofsson d05de8e411
Give boost the correct toolset for 2017 7 years ago
Alexander "Ananace" Olofsson 4f758bdd48
Use different environments for 2015 and 2017 7 years ago
Alexander "Ananace" Olofsson 3bd8dc3ef6
Use the right boost version for Appveyor 7 years ago
Alexander "Ananace" Olofsson bcfa2a13a6
Use the VS2017 packaging of Qt5 for Appveyor 7 years ago
declan-millar 4b1247597e Use soulgem value rebalance formula from morrowind code patch 7 years ago
Alexander "Ananace" Olofsson e1e7a4b11a
Change Appveyor to use Visual Studio 2017 7 years ago
Alexander "Ananace" Olofsson 12b201348a
Switch to the supported VS versions on Appveyor 7 years ago
Alexander "Ananace" Olofsson ea6c73333b
Bumping Qt to 5.10 for Appveyor 7 years ago
Alexander "Ananace" Olofsson f8304a52c4
Enable verbose logging for CI 7 years ago
Capostrophic 867a5938ca Don't reset sneaking camera offset while in GUI (fixes #4420) 7 years ago
Marc Zinnschlag ec900ef4ad Merged pull request #1710) 7 years ago
Nelsson Huotari c2cddc91e4 Brush maximum size to a custom setting 7 years ago
David Cernat 43a944ddaf [General] Add and implement new Worldstate packet type 7 years ago
David Cernat e8b22a2e5e [Server] Use correct source group for ObjectProcessors 7 years ago
tri4ng1e f2613a74b1
Write settings before invoking openmw-iniimporter 7 years ago
tri4ng1e 7e03dd0f12
Read data paths from `data-local` section too 7 years ago
tri4ng1e 3b86f73ae7
Replace MwIniImporter::numberToString with std::to_string 7 years ago
David Cernat 18167a734e
Merge pull request #419 from Aesylwinn/Travis-0.6.3
Travis 0.6.3
7 years ago
Capostrophic 4e485dbd44 Rename Original Creature column to Parent Creature (fixes #2897) 7 years ago
David Cernat 049d0d9ba7 [General] Fix remaining references to world packets/events 7 years ago
David Cernat dc9a3bf73f
Merge pull request #429 from OpenMW/master
Add OpenMW commits up to 16 May 2018
7 years ago
Bret Curtis 67c381df4e
Merge pull request #1708 from akortunov/refidfix
fix GCC warnings
7 years ago
Andrei Kortunov a68de93308 Initialize srate variable in openal_output 7 years ago
Andrei Kortunov e5db5e2651 Fix 'maybe-uninitialized' warning in openal_output 7 years ago
Andrei Kortunov df459199dd Avoid left shift of negative value 7 years ago
Nelsson Huotari 17e01ca336 Setting "Scene Drops" rename "3D Scene Editing" 7 years ago
Nelsson Huotari 758ccac75a Show texture id + filename 7 years ago
Bret Curtis caf1760251
Merge pull request #1707 from akortunov/weaponreach
Display weapon reach on tooltips in feet
7 years ago
Andrei Kortunov 164e3d12fe Display weapon reach on tooltips in feet. 7 years ago
Bret Curtis e410c47660
Merge pull request #1706 from akortunov/refidfix
Fix compiler warning in getNestedData()
7 years ago
Andrei Kortunov 6a3ff5ed81 Fix compiler warning in getNestedData 7 years ago
David Cernat 2ac334664b [Server] Add deprecated alternatives for ObjectList functions
This will avoid server crashes in older scripts.
7 years ago
David Cernat 51698bed48 [Client] Rename WorldProcessor into ObjectProcessor 7 years ago
David Cernat 02d8e08c58 [Server] Rename WorldProcessor into ObjectProcessor 7 years ago
David Cernat 1e749938fb
Merge pull request #426 from OpenMW/master
Add OpenMW commits up to 15 May 2018
7 years ago
David Cernat bef36f77ca [Server] Create WorldstateFunctions and move GameTime functions there 7 years ago
Bret Curtis c75d774356
Merge pull request #1692 from akortunov/playsound
Prevent PlaySound overlapping
7 years ago
Andrei Kortunov f8655d2425 Use actor's physics position as a ray origin in tracer 7 years ago
David Cernat 9b9dd4abaf
Merge pull request #425 from OpenMW/master
Add OpenMW commits up to 13 May 2018
7 years ago
Capostrophic e32f38b939 Allow jumping when you're stuck on a slope (fixes #4221) 7 years ago
Capostrophic 409d466e42 Make 0/0 encumbrance 0% encumbrance 7 years ago
Capostrophic ba077e7291 Fix movement fatigue loss encumbrance calculation (fixes #4413) 7 years ago
Capostrophic 1c9fba9a8c Fix jumping encumbrance calculation 7 years ago
Marc Zinnschlag bdfa430857 updated credits file 7 years ago
Marc Zinnschlag 0f22600a98 Merged pull request #1703 7 years ago
David Cernat d4f7936a76 [Server] Rename WorldFunctions into ObjectFunctions 7 years ago
David Cernat 78234f9071 [General] Rename Event into ObjectList & WorldObject into BaseObject 7 years ago
David Cernat 6bf3a0be1e [General] Rename WorldPackets into ObjectPackets for clarity 7 years ago
David Cernat 5458e09c8a
Merge pull request #420 from OpenMW/master
Add OpenMW commits up to 11 May 2018
7 years ago
David Cernat 77389538e8 [General] Implement ActorAI packet, part 1
The server can now make actors become followers of players or other actors.
7 years ago
tri4ng1e 9126e844bf
Use data paths from config (bug #4412) 7 years ago
Marc Zinnschlag b7cce1a665 Merged pull request #1702 7 years ago
Marc Zinnschlag 6630a02c3f updated credits file 7 years ago
Kyle Cooley d78ae4bab4 Allow the clang build to fail for now 7 years ago
Kyle Cooley 6c7d73af7f Bump c++ standard version to 14 7 years ago
David Cernat c00b3bbe97 [Documentation] Update credits 7 years ago
Kyle Cooley cf5bd0dca7 Travis: use qt5, newer boost libraries, callff, gcc/clang builds... 7 years ago
David Cernat 57b791ea2a [Client] Show selected object's refNum & mpNum in console window title
This allows for much easier debugging of all objects and actors.
7 years ago
Nelsson Huotari 49ae5bc75c List initialization -> initialization in constructor 7 years ago
Nelsson Huotari 1c79d5311c Brush history menu 7 years ago
Nelsson Huotari d2cf764a46 Tooltips, fixes 7 years ago
Nelsson Huotari 62066f01bd clean-up 7 years ago
Nelsson Huotari d33c98c68d Revert unintended changes 7 years ago
Nelsson Huotari 5656745445 Select dragged texture-assets, add brush settings widget-type, fixes. 7 years ago
Nelsson Huotari baa707b5e3 User setting for selective cell editing or new land creation 7 years ago
Nelsson Huotari 24977fcc0f improve hit calculation accuracy for texture editing 7 years ago
Nelsson Huotari e8a9bff85c Drop textures to landtextures from assets (try-method) 7 years ago
Nelsson Huotari 7139889566 Brush button window opens at modebutton, slider 1-50, doxygen comments 7 years ago
Nelsson Huotari 20d1d8ac89 Fixed brush calculations, implement undostack macro when clicked. 7 years ago
Nelsson Huotari 5f3c8b2b99 c_str -> fromStdString, remove TextureBrushButton class 7 years ago
Nelsson Huotari cf7a0f715e Command macro for complete drag-editing operations. 7 years ago
Nelsson Huotari 9f742d5b1f Brush affects adjancent cells 7 years ago
Nelsson Huotari 1ca2710a2a Formatting, fixes 7 years ago
Nelsson Huotari 1c113eca9c 15 to landTextureSize-1 7 years ago
Nelsson Huotari 3327d6f7c4 Drag terrain painting, code cleanup 7 years ago
Nelsson Huotari a54a1b9940 Command system and undo 7 years ago
Nelsson Huotari cc415526b0 fix texture index +1, better icons 7 years ago
Nelsson Huotari 316d05bdc4 {} to () 7 years ago
Nelsson Huotari 4649d1258c Direct data terrain editing 7 years ago
Nelsson Huotari 4ae75d1d20 Terrain texture brush frame 7 years ago
David Cernat 12727b66ea [Server] Use consistent variable names in map tile script functions 7 years ago
David Cernat 7f00005f04 [Client] Fix GCC build
Based on 71040659ac39dc1236af654b5c3177d015e749e5
7 years ago
Alf Henrik Sauge d4f278a113 Replacing tab with spaces 7 years ago
David Cernat 32d71de2f5 Update MapWindow every frame, not just when it's open (bug #4279) 7 years ago
Alf Henrik Sauge feeee50a88 Dropping a separate NPDTstruct12 object and instead use NPDTstruct52
NPDTstruct12 is now only used when loading and saving. Turning auto calc
on and off now no longer switches between to different set of values
7 years ago
tri4ng1e 103a07b744
Less cryptic abbreviations 7 years ago
Marc Zinnschlag 3197ebd8e7 Merged pull request #1694 7 years ago
David Cernat 715012f087 [General] Implement sending of image data for map tiles in PlayerMap 7 years ago
Andrei Kortunov 2f89080b36 Load default markers definitions in editor 7 years ago
Andrei Kortunov b15bed8e22 Avoid excessive loadSound calls 7 years ago
tri4ng1e 905cde10db
Smart-sorting in iniimporter (time + dependency) 7 years ago
Marc Zinnschlag 53b6ef6f8c minor code cleanup 7 years ago
Marc Zinnschlag 57ee5f9b53 updated credits file 7 years ago
Marc Zinnschlag e661e3cf74 Merged pull request #1677 7 years ago
Marc Zinnschlag f5f8f62e8e updated credits file 7 years ago
Marc Zinnschlag a255bdebd4 Merged pull request #1700 7 years ago
Nelsson Huotari a2745683e6 new run icon 7 years ago
Alf Henrik Sauge 9b971caddc CSVTools::ReportTable should now have case insensitive sorting 7 years ago
Andrei Kortunov 17222eb821 Get rid of unnecessary find 7 years ago
Bret Curtis c44f87afd1
Merge pull request #1699 from Capostrophic/editorwarnings
Editor verifier updates
7 years ago
Bret Curtis 0fc198be52
Merge pull request #1698 from Capostrophic/c++11
A bunch of C++11-related updates
7 years ago
Capostrophic 2502d53816
Object record verifier updates
Removed light 0 duration warning
Spelling fixes
7 years ago
Capostrophic 91b97a27ea
Remove empty class description warning 7 years ago
Capostrophic e22409c266
Fix sound range warning message 7 years ago
Andrei Kortunov 3636cf2015 Do not apply queue movement for standing actors 7 years ago
Capostrophic 3d3bef94cd
Use range-based for loop 7 years ago
Andrei Kortunov 1dd36329a3 Load default markers definitions (bug #4410) 7 years ago
tri4ng1e f5b7a230fc
ESMReader::close now clears mHeader 7 years ago
Bret Curtis c219c89603
Merge pull request #1696 from Capostrophic/feature-2694
Rename "Model" column to "Model/Animation" (feature #2694)
7 years ago
Capostrophic 9ac9f94638
Rename "Model" column to "Model/Animation" (feature #2694) 7 years ago
David Cernat 980ddcb114 [Server] Add DoesFileExist() script function 7 years ago
Capostrophic 8be93b4a12
Initialize mandatoryIds vector C++11-way 7 years ago
Capostrophic 85b7aa4f09
Uncomment is_pod test in fixed string tests 7 years ago
Nelsson Huotari e4e225f4e7 Add topic, journal and related -info icons. 7 years ago
Marc Zinnschlag 69c659852d Merge pull request #1689) 7 years ago
David Cernat 51fd937250 [Server] Remove hardcoded debug messages when using script callbacks 7 years ago
David Cernat df0f9b0f5e [Client] Require a certain Skill progress amount before sending packet 7 years ago
David Cernat 1b1e5e86d1 [Client] Avoid sending CellStates to server after initialization
Although b4e8560698 made players instantly able to see each other on minimalist servers that did not change their cells from the default, it created problems with the default CoreScripts where players need to be logged in before receipt of a CellStates packet from them is taken into account, with the result being that a player was recorded as having loaded their initial cells on the server's C++ side but not on the Lua side.

It may simply be best to expect servers to set player cells.
7 years ago
Andrei Kortunov 4872edc5ed Prevent PlaySound overlapping 7 years ago
Andrei Kortunov 6cc7405194 Remove unnecessary command from QuadTreeWorld destructor (bug #4408) 7 years ago
Andrei Kortunov 22fb1f3403 Play spellcasting effects from objects 7 years ago
David Cernat 099f85be0a [General] Implement PlayerMomentum packet & associated script functions 7 years ago
David Cernat 273179fd5a
Merge pull request #414 from OpenMW/master
Add OpenMW commits up to 29 Apr 2018
7 years ago
David Cernat 4b501a39f4 [General] Implement DoorDestination packet & associated script functions 7 years ago
David Cernat d47b06fe7a [Server] Prevent SetGameMode() and SetHostname() from crashing server
Previously, turning off communication with the MasterServer from the server config and then attempting to use SetGameMode() or SetHostname() led to a server crash.
7 years ago
scrawl b995584ad2
Merge pull request #1688 7 years ago
scrawl f4cd7ff5b2
Merge pull request #1690 7 years ago
Capostrophic d967983f5c Assume Morrowind.esm dependency for dependency-less content addons (fixes #2829) 7 years ago
Andrei Kortunov 5afcc56860 Handle NiLookAtController (feature #4407) 7 years ago
David Cernat 3b07dc4b42 [Client] Send equipment packets whenever an item charge or count changes
Since the beginnings of TES3MP, equipment packets have only been sent whenever an item has been replaced by an item with a different refId, with changes in an item's charge or count not sending a packet (but being included in the next packet sent as a result of a refId change). The reason for this was ostensibly the fact that every single equipment packet always included the details for all 19 equipment items (as per Koncord's original design decision), which would have led to massive packet spam if such a packet was sent every time you shot an arrow or lost a little bit of your armor's condition.

With minimalist equipment packets, it is now viable to send equipment packets whenever any item changes in some way, by having the equipment packet contain only that one item.
7 years ago
David Cernat 399e049d87 [Client] Fix logic for minimal size packets in LocalPlayer
Previously, the index changes were not cleared at the start of their corresponding update functions, which in turn meant that an Attribute/Skill/StatsDynamic/Equipment packet received by a player from the server made that player send back the same packet, as the index changes from it were retained.

Additionally, exchangeFullInfo was not set to false, thus sometimes leading to constant full exchanges of information.
7 years ago
David Cernat 66d5109509 [General] Fix information exchange for players sharing a cell
Previously, two players entering the same cell only sent and received their latest changes for dynamic stats, attributes, skills and equipment when they started sharing that cell.
7 years ago
David Cernat 7db74509e0 Merge pull request #412 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/mwscript/transformationextensions.cpp
7 years ago
Capostrophic 6b47f72959
Set character preview scene ambient to 0, 0, 0 7 years ago
scrawl bdf1070852
Merge pull request #1688 7 years ago
scrawl f0507e6b46
Merge pull request #1686 7 years ago
scrawl 4cc65239ff
Add section on dealing with regressions 7 years ago
Capostrophic bfcdf660f2 Utilize inventory character preview lighting rotation fallback settings 7 years ago
Capostrophic 9073e4d4ba Initialize playlist file list in playPlaylist (fixes #4134) 7 years ago
Capostrophic b69e812a52 Utilize inventory character preview lighting color fallback settings 7 years ago
scrawl 55a6344fb0
Revert log spam 7 years ago
scrawl d8d26f1de8
Merge pull request #1685 7 years ago
scrawl ec4e2f0064
Merge pull request #1684 7 years ago
scrawl 063c5b6fd6
Merge pull request #1687 7 years ago
Alexander Olofsson f0288282be Slight appdata cleanup and improvement 7 years ago
David Cernat 608dcbafe6 [Client] Fix skill updates for LocalPlayer partially broken by 78441c769a 7 years ago
Evgeny Kurnevsky c025b8f8f3
Remove useless comparison. 7 years ago
David Cernat 02eef933fd
Merge pull request #411 from OpenMW/master
Add OpenMW commits up to 19 Apr 2018
7 years ago
Evgeny Kurnevsky 48fb6bb9e8
Fix crash when rollDice is called with 0. 7 years ago
David Cernat a541d7df3c [General] Rework PlayerStatsDynamic packets so they are of minimal size
(cherry picked from commit fc5e883160)
7 years ago
David Cernat b9520c11da [General] Rework PlayerEquipment packets so they are of minimal size
Moreover, rename BaseNetCreature's equipedItems into equipmentItems.

(cherry picked from commit d1ad0c91f8)
7 years ago
Capostrophic 37dc3200d1 Inherit the calling object scale in PlaceAt (fixes #4308) 7 years ago
David Cernat c5b08d6109 [General] Simplify storing of attribute and skill index changes
(cherry picked from commit bd9e8bd10f)
7 years ago
David Cernat 2c77d5f498 [General] Set enforcedLogLevel to -1 when initializing BasePlayer 7 years ago
David Cernat 7b702bf8c2 [General] Add and use utility function for int value checks in vectors
(cherry picked from commit a796f81444)
7 years ago
David Cernat b6099024df [General] Rework PlayerAttribute packets so they are of minimal size
Previously, whenever a single attribute value changed for a player, that player then sent a PlayerAttribute packet with all values for all 8 attributes.

This did not cause anywhere as much packet spam as PlayerSkill used to, but there was no good reason not to fix it as well.

(cherry picked from commit b0965f094a)
7 years ago
scrawl 1f1f47431f
Merge pull request #1672 7 years ago
Capostrophic 48467814d4 Improve random number generation 7 years ago
David Cernat 78441c769a [General] Rework PlayerSkill packets so they are of minimal size
Previously, whenever a single skill value changed for a player, that player then sent a PlayerSkill packet with all values for all 27 skills, plus the player's progress towards the next level and the bonuses to each attribute on the next level up as the result of sklll increases thus far.

This commit makes PlayerSkill contain only the values of specific skills, moves the player's progress towards the next level to PlayerLevel packets, and moves the bonuses to each attribute on the next level up to PlayerAttribute packets.

Players now also send a PlayerSkill packet whenever their progress towards a new point in a skill changes. This was previously avoided so as to not have massive packet spam.

(cherry picked from commit ef79a98544)
7 years ago
scrawl 5d1b40c5ea
Merge pull request #1678 7 years ago
David Cernat af4fcb7261 [Client] Don't force skill update on cell change
Previously, an attempt by the server to simultaneously change a player's cell and skills (as you'd expect when a player file is loaded) led to:

1) The server sending the cell packet first and the skill packet afterwards

2) The player receiving the cell packet and sending their own skill packet as part of the client's forced skill update

3) The player receiving the skill packet from the server

4) The server receiving the skill packet from the player

The result was that, if the player then left the server without sending another skill packet, the server's memory retained the skills the player had sent instead of the skills it had sent to the player.

This is the first step in a solution to that situation and similar ones.

(cherry picked from commit cac4684986)

Note: In 0.6.x, this was only a problem if a player's cell was set by the server first and their skills were set next, i.e. this was not a problem in the default CoreScripts because the opposite order used there masked the problem. It was a more significant problem in 0.7 because all packets were queued for a player and sent in a specific hardcoded order.
7 years ago
David Cernat 57070b7f5c [Client] Disable automatic transition to other chargen menus from OpenMW
Previously, after finishing the TES3MP chargen once, mCreationStage was set to 4 in OpenMW, which in turn made it impossible to go through only specific chargen menus again as the result of the relevant TES3MP script function (tes3mp.SetCharGenStage(pid, startStage, endStage) in 0.6.3, player:setCharGenStages(startStage, endStage) in 0.7). In other words, trying to allow a player to just choose their class again made it so the player started at that menu and went through all the other subsequent menus as well, i.e. the player went through the class, birthsign and review menus.
7 years ago
David Cernat 28f1c1b0d3 [General] Rework CharGen slightly for clarity purposes
Previously, charGenStage.end was doing double duty as both the variable indicating the number of CharGen stages and – when set to 0 – the variable indicating that CharGen was over. The latter role is now filled by a new boolean.

(cherry picked from commit 926106cf8c)
7 years ago
David Cernat 9d46de88e0 [Client] Send cell states correctly after inputting name
Previously, initial cell states were sent in LocalPlayer::processCharGen() and were ignored by the server because the player was not yet regarded as loaded. The result was that existing players logging in could not see each other until they went through at least one cell change.

(cherry picked from commit b4e8560698)

# Conflicts:
#	apps/openmw/mwmp/LocalPlayer.cpp
7 years ago
David Cernat 306252ecdc [Server] Fix confusing script function names 7 years ago
Capostrophic 8617d0603b Display a message if a spell the player tries to use via a quick key is missing (fixes #4391) 7 years ago
scrawl ce1b2a612c
Merge pull request #1674 7 years ago
David Cernat 9e5ddeac50
Merge pull request #408 from OpenMW/master
Add OpenMW commits up to 18 Apr 2018
7 years ago
Capostrophic 90f3ff2da4 Don't force DDS file usage (fixes #1392)
Fallback to a DDS file if the requested texture path doesn't point to an existing file, not vice versa
7 years ago
tri4ng1e d310d36ea3
[Fix] Some PVS-Studio and cppcheck fixes 7 years ago
tri4ng1e d4d1703bcf
Some PVS-Studio and cppcheck fixes
cppcheck:
[apps/esmtool/record.cpp:697]: (performance) Prefer prefix ++/-- operators for non-primitive types.
[apps/esmtool/record.cpp:1126]: (performance) Prefer prefix ++/-- operators for non-primitive types.
[apps/esmtool/record.cpp:1138]: (performance) Prefer prefix ++/-- operators for non-primitive types.
[apps/niftest/niftest.cpp:36]: (performance) Function parameter 'filename' should be passed by reference.
[apps/niftest/niftest.cpp:41]: (performance) Function parameter 'filename' should be passed by reference.
[apps/opencs/model/prefs/boolsetting.cpp:25]: (warning) Possible leak in public function. The pointer 'mWidget' is not deallocated before it is allocated.
[apps/opencs/model/prefs/shortcuteventhandler.cpp:52]: (warning) Return value of std::remove() ignored. Elements remain in container.
[apps/openmw/mwstate/quicksavemanager.cpp:5]: (performance) Variable 'mSaveName' is assigned in constructor body. Consider performing initialization in initialization list.

PVS-Studio:
apps/opencs/model/filter/parser.cpp  582  warn  V560 A part of conditional expression is always true: allowPredefined.
apps/opencs/view/world/referencecreator.cpp  67  warn  V547 Expression '!errors.empty()' is always false.
apps/opencs/view/world/referencecreator.cpp  74  warn  V547 Expression '!errors.empty()' is always false.
apps/opencs/view/doc/loader.cpp  170  warn  V560 A part of conditional expression is always true: !completed.
apps/opencs/view/doc/loader.cpp  170  warn  V560 A part of conditional expression is always true: !error.empty().
apps/opencs/model/tools/pathgridcheck.cpp  32  err  V517 The use of 'if (A) {...} else if (A) {...}' pattern was detected. There is a probability of logical error presence. Check lines: 32, 34.
apps/opencs/model/world/refidadapterimp.cpp  1376  err  V547 Expression 'subColIndex < 3' is always true.

apps/openmw/mwgui/widgets.hpp  318  warn  V703 It is odd that the 'mEnableRepeat' field in derived class 'MWScrollBar' overwrites field in base class 'ScrollBar'. Check lines: widgets.hpp:318, MyGUI_ScrollBar.h:179.
apps/openmw/mwgui/widgets.hpp  319  warn  V703 It is odd that the 'mRepeatTriggerTime' field in derived class 'MWScrollBar' overwrites field in base class 'ScrollBar'. Check lines: widgets.hpp:319, MyGUI_ScrollBar.h:180.
apps/openmw/mwgui/widgets.hpp  320  warn  V703 It is odd that the 'mRepeatStepTime' field in derived class 'MWScrollBar' overwrites field in base class 'ScrollBar'. Check lines: widgets.hpp:320, MyGUI_ScrollBar.h:181
apps/openmw/mwmechanics/actors.cpp  1425  warn  V547 Expression '!detected' is always true.
apps/openmw/mwmechanics/character.cpp  2155  err  V547 Expression 'mode == 0' is always true.
apps/openmw/mwmechanics/character.cpp  1192  warn  V592 The expression was enclosed by parentheses twice: ((expression)). One pair of parentheses is unnecessary or misprint is present.
apps/openmw/mwmechanics/character.cpp  521  warn  V560 A part of conditional expression is always true: (idle == mIdleState).
apps/openmw/mwmechanics/pathfinding.cpp  317  err  V547 Expression 'mPath.size() >= 2' is always true.
apps/openmw/mwscript/interpretercontext.cpp  409  warn  V560 A part of conditional expression is always false: rank > 9.
apps/openmw/mwgui/windowbase.cpp  28  warn  V560 A part of conditional expression is always true: !visible.
apps/openmw/mwgui/journalwindow.cpp  561  warn  V547 Expression '!mAllQuests' is always false.
apps/openmw/mwgui/referenceinterface.cpp  18  warn  V571 Recurring check. The '!mPtr.isEmpty()' condition was already verified in line 16.
apps/openmw/mwworld/scene.cpp  463  warn  V547 Expression 'adjustPlayerPos' is always true.
apps/openmw/mwworld/worldimp.cpp  409  err  V766 An item with the same key '"sCompanionShare"' has already been added.
apps/openmw/mwworld/cellstore.cpp  691  warn  V519 The 'state.mWaterLevel' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 689, 691.
apps/openmw/mwworld/weather.cpp  1125  warn  V519 The 'mResult.mParticleEffect' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 1123, 1125.
apps/openmw/mwworld/weather.cpp  1137  warn  V519 The 'mResult.mParticleEffect' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 1135, 1137.

apps/wizard/unshield/unshieldworker.cpp  475  warn  V728 An excessive check can be simplified. The '(A && B) || (!A && !B)' expression is equivalent to the 'bool(A) == bool(B)' expression.
apps/wizard/installationpage.cpp  163  warn  V735 Possibly an incorrect HTML. The "</p" closing tag was encountered, while the "</span" tag was expected.

components/fontloader/fontloader.cpp  427  err  V547 Expression 'i == 1' is always true.
components/nifosg/nifloader.cpp  282  warn  V519 The 'created' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 278, 282.
components/esm/loadregn.cpp  119  err  V586 The 'clear' function is called twice for deallocation of the same resource. Check lines: 112, 119.
components/esm/cellref.cpp  178  warn  V581 The conditional expressions of the 'if' statements situated alongside each other are identical. Check lines: 175, 178.
components/esmterrain/storage.cpp  235  warn  V560 A part of conditional expression is always true: colStart == 0.
components/esmterrain/storage.cpp  237  warn  V560 A part of conditional expression is always true: rowStart == 0.
7 years ago
scrawl 789f552ad4
Delete old mygui_resource_plugin which is unlikely to be brought back in its current form because resources can't be accessed by MyGUI's editor if not using the Ogre resources system. 7 years ago
scrawl 6c79c0fb35
Add an empty compileGLObjects implementation to Rig/MorphGeometry to avoid unnecessary creation of display list done by osg 7 years ago
scrawl 40f6497f40
Clarify how to link bugs 7 years ago
Bret Curtis 1427648d64
Merge pull request #1682 from a17r/qt-5.11
Fix build with Qt 5.11_beta3 (dropping qt5_use_modules)
7 years ago
David Cernat 311f770de7 [Server] Document script functions, part 4
Additionally, clean up some variable names.
7 years ago
David Cernat 76e7392a84 [Server] Create ShapeshiftFunctions and move relevant functions there 7 years ago
David Cernat 2bb7a4253e [Server] Forcibly kick players after too many handshake attempts 7 years ago
Andreas Sturmlechner 2c9d46a60b
Fix build with Qt 5.11_beta3 (dropping qt5_use_modules) 7 years ago
David Cernat 17678ee60f
Merge pull request #407 from OpenMW/master
Add OpenMW commits up to 17 Apr 2018
7 years ago
David Cernat 50fe54af5d [Client] Update DedicatedPlayer creature if displayCreatureName changes 7 years ago
David Cernat 36e0f0471a [Server] Add SetCreatureNameDisplayState script function 7 years ago
Nelsson Huotari af558e07a3 implement +6 icons 7 years ago
Nelsson Huotari 69aacdff17 Lamoot's new icon set 7 years ago
scrawl fc72483ddf
Merge pull request #1673 7 years ago
scrawl 985ae12767
Merge pull request #1676 7 years ago
Capostrophic b08d7b4a3b Use centroid interpolation for shader lighting (fixes #4143) 7 years ago
David Cernat db41704e52 [Server] Use clearer function name for checking creature name display 7 years ago
David Cernat a01fc577f1 [Client] Add setAttributes() and setSkills() methods to DedicatedPlayer 7 years ago
David Cernat 716809f2db [Client] Prevent errors from NPC-only packets for DedicatedPlayers 7 years ago
David Cernat 68ee64902d [Client] Track & use previous race & creatureRefId for DedicatedPlayers 7 years ago
David Cernat acb1335d78 [Client] Make creature disguises update correctly 7 years ago
David Cernat 9bd79ba498
Merge pull request #405 from OpenMW/master
Add OpenMW commits up to 12 Apr 2018
7 years ago
David Cernat 70f9cb535e [General] Use RecordHelper methods to create and update DedicatedPlayers 7 years ago
Andrei Kortunov 174b3d2249 Reset an inventory filter after reload or a new game start (bug #4392) 7 years ago
scrawl a70e14e282
Add guidelines for pull request reviews 7 years ago
David Cernat 49e94725aa [Client] Prevent MechanicsManager::playerLoaded() from enabling AI 7 years ago
David Cernat 9d27f5f154 [Client] Create RecordHelper class with initial NPC and creature methods 7 years ago
David Cernat 9697595857 [Client] Don't equip already equipped items in local setEquipment()
This avoids the following error when receiving repeated PlayerBaseInfo packets: "Error in frame: Invalid slot, make sure you are not calling RefData::setCount for a container object"

Additionally, only re-equip items as the result of a PlayerBaseInfo packet if resetStats is true (because of its side effect of auto-equipping items for the player).
7 years ago
David Cernat 72463cfdb6 [Client] Refresh equipment for DedicatedPlayers when setting base info
Additionally, move default fatigue value to DedicatedPlayer initialization.
7 years ago
David Cernat fa652964fd
Merge pull request #403 from OpenMW/master
Add OpenMW commits up to 9 Apr 2018
7 years ago
Capostrophic d9acd19dc0
Merge branch 'master' into illusion 7 years ago
scrawl 0982d2175a
Merge pull request #1473 7 years ago
scrawl 92d0fb2981
Merge pull request #1667 7 years ago
scrawl 35300c04cd
Merge pull request #1671 7 years ago
scrawl ef050d7869
Merge pull request #1660 7 years ago
scrawl 308551ad49
Merge pull request #1644 7 years ago
scrawl cbddb4a0a9
Merge pull request #1638 7 years ago
David Cernat bdc9132e7c [General] Add SetResetStats server script function
Add reading and writing of resetStats variable to PlayerBaseInfo Packet

Fix typos in various server script function descriptions
7 years ago
David Cernat 73dea494c4 [General] Allow changes from PlayerBaseInfo without player stat reset 7 years ago
Capostrophic cddc0914c8 Option to charge for all companions travelling (fixes #4064) 7 years ago
David Cernat 34893ff631 [Server] Split up handshake handling into multiple functions for debug
Unfortunately, the handshake attempt limit implemented in 4ebfcc4a21 for 0.7 and then ported over to 0.6 in a3a341fee6 does not appear to work properly, which is why gathering more information on it is important.
7 years ago
David Cernat c132dc70d2 [Client] Make PlayerShapeshift turn DedicatedPlayers into creatures 7 years ago
David Cernat 141eb8b7c2 [Client] Streamline creation of references for DedicatedPlayers
Additionally, delete DedicatedPlayers who disconnect.

Previously, all disconnected DedicatedPlayers were still kept in memory, but never used again. There was code that suggested they were meant to be reused upon reconnecting, but that reuse had never actually been implemented, and would probably not be that useful anyway.
7 years ago
David Cernat 14f90e773d [Client] Split up creation of DedicatedPlayers into multiple methods
Additionally, print player guids using their string representations for consistency.

The creation and updating of DedicatedPlayer references remains very inelegant, but this commit is the first step towards fixing that.
7 years ago
Thunderforge fb27f34a32 Add autocomplete to the "Start default character at" field 7 years ago
Capostrophic 77467f17c9
Fix a typo 7 years ago
David Cernat c8abd11f5d [General] Move creature disguises for players to PlayerShapeshift packet
Additionally, make associated variables clearer, and move associated server script functions next to other shapeshifting functions.
7 years ago
David Cernat 34be9383e5 [General] Add isPlayer boolean to targets in packets 7 years ago
David Cernat 0eed05610b [Client] Fix autoequipping for creatures in WorldEvent::editContainers() 7 years ago
David Cernat a86c68c5a1 [General] Add sync for ranged weapon & projectile strike enchantments 7 years ago
David Cernat 3f8d94b030 [General] Synchronize strike enchantments in combat 7 years ago
Andrei Kortunov 27c831959e Handle OnPCHitMe variable (bug #2703) 7 years ago
David Cernat 76468dc8c6 [Server] Remove remnant of hardcoded container sync 7 years ago
David Cernat e3c43c6af7 Merge pull request #400 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/mwmechanics/spellcasting.cpp
7 years ago
Capostrophic 4f64ba7b7f Implement sBookSkillMessage GMST 7 years ago
scrawl c6abec1e51
Merge pull request #1641 7 years ago
scrawl 0071878106
Merge pull request #1642 7 years ago
scrawl d935e78f93
Merge pull request #1645 7 years ago
scrawl c610b8acc8
Merge pull request #1649 7 years ago
scrawl cd9f767e29
Merge pull request #1650 7 years ago
scrawl 9e176aba9f
Merge pull request #1652 7 years ago
scrawl e73af18824
Merge pull request #1653 7 years ago
scrawl 8e37f6bf3e
Merge pull request #1656 7 years ago
scrawl f36adfec5f
Merge pull request #1657 7 years ago
scrawl 80a8ef6d49
Merge pull request #1661 7 years ago
scrawl 0065f277ef
Merge pull request #1664 7 years ago
elsid 14daadded7
Add virtual destructors
To fix warnings:
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.3.1/../../../../include/c++/7.3.1/bits/shared_ptr_base.h:588:8: warning: delete called on non-final 'NifOsg::ControllerFunction' that has virtual functions but non-virtual destructor
      [-Wdelete-non-virtual-dtor]
              delete __p;
              ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.3.1/../../../../include/c++/7.3.1/bits/shared_ptr_base.h:595:4: note: in instantiation of function template specialization
      'std::__shared_count<__gnu_cxx::_S_atomic>::__shared_count<NifOsg::ControllerFunction *>' requested here
        : __shared_count(__p)
          ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.3.1/../../../../include/c++/7.3.1/bits/shared_ptr_base.h:1079:17: note: in instantiation of function template specialization
      'std::__shared_count<__gnu_cxx::_S_atomic>::__shared_count<NifOsg::ControllerFunction *>' requested here
        : _M_ptr(__p), _M_refcount(__p, typename is_array<_Tp>::type())
                       ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.3.1/../../../../include/c++/7.3.1/bits/shared_ptr.h:129:25: note: in instantiation of function template specialization 'std::__shared_ptr<NifOsg::ControllerFunction,
      __gnu_cxx::_S_atomic>::__shared_ptr<NifOsg::ControllerFunction, void>' requested here
        shared_ptr(_Yp* __p) : __shared_ptr<_Tp>(__p) { }
                               ^
/home/elsid/dev/openmw/components/nifosg/nifloader.cpp:242:39: note: in instantiation of function template specialization 'std::shared_ptr<NifOsg::ControllerFunction>::shared_ptr<NifOsg::ControllerFunction, void>' requested here
                callback->setFunction(std::shared_ptr<NifOsg::ControllerFunction>(new NifOsg::ControllerFunction(key)));
                                      ^

/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.3.1/../../../../include/c++/7.3.1/bits/unique_ptr.h:78:2: warning: delete called on non-final 'MWGui::ResponseCallback' that has virtual functions but non-virtual destructor
      [-Wdelete-non-virtual-dtor]
        delete __ptr;
        ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.3.1/../../../../include/c++/7.3.1/bits/unique_ptr.h:268:4: note: in instantiation of member function 'std::default_delete<MWGui::ResponseCallback>::operator()' requested here
          get_deleter()(__ptr);
          ^
/home/elsid/dev/openmw/apps/openmw/mwgui/dialogue.cpp:58:23: note: in instantiation of member function 'std::unique_ptr<MWGui::ResponseCallback, std::default_delete<MWGui::ResponseCallback> >::~unique_ptr' requested here
    PersuasionDialog::PersuasionDialog(ResponseCallback* callback)
                      ^
7 years ago
David Cernat 26a56d6a02 [Client] Include NPC/creature containers when adding all cell containers 7 years ago
David Cernat 1e3c4fd488 [Client] Fix ProcessorContainer typos caused by careless copy-pasting 7 years ago
David Cernat 7b97e8671d
Merge pull request #398 from OpenMW/master
Add OpenMW commits up to 30 March 2018
7 years ago
David Cernat f80f3bd484 [Client] Make it possible to reply to requests about specific containers
Previously, a Container packet with a REQUEST action always made the client respond with the contents of all the containers in that cell.

The previous behavior now only happens for requests that have no WorldObjects attached, while requests that have WorldObjects attached get a reply with the contents of those specific containers.
7 years ago
David Cernat ec1311fcb7 [Client] Make it possible to check whether a class has a ContainerStore 7 years ago
David Cernat 258e319acb [Client] Require InventoryStore for autoequipping actors 7 years ago
David Cernat afe8c97cb9 [Client] Require InventoryStore for unequipping actors in editContainers 7 years ago
David Cernat d8b48f6cf4 [Client] Remove redundant container methods from CellController 7 years ago
Capostrophic 1aa3ed0c18 Font loader fallback character reorganization (fixes #1987) 7 years ago
Capostrophic baaf65bc2c Add vanilla enchanted weaponry behavior option, on by default (fixes #4136) 7 years ago
Bret Curtis f97d094aa5
Merge pull request #1658 from xyzz/android-sdl-2.0.8
android: Update for sdl 2.0.8
7 years ago
Capostrophic 2dca389a3b Extend magic resistance/weakness to all effects that can be resisted (fixes #4309) 7 years ago
Ilya Zhuravlev fdcfbdbdd1 android: Update for sdl 2.0.8 7 years ago
Capostrophic e6d9bce519 Implement fWerewolfHealth GMST (fixes #4142) 7 years ago
David Cernat 365f485e8d Merge pull request #397 from OpenMW/master while resolving conflicts
Conflicts:
	components/CMakeLists.txt
7 years ago
Capostrophic 76f50312f2
Remove a redundant check 7 years ago
Bret Curtis 5e6be0307e
Merge pull request #1651 from psi29a/remove_gles_but_keep_android
remove native GLESv* support, as it never worked; make things less co…
7 years ago
David Cernat ac82124a5d Merge pull request #395 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/mwmechanics/actors.cpp
7 years ago
David Cernat 1c340568d2 [Client] Disallow resting if player has not finished chargen
Previously, players pressing T rapidly before logging in had the Wait screen show up for them.
7 years ago
Capostrophic be542507f8
Make hasMaster() behavior consistent with isGameFile() (fixes #3618) 7 years ago
Simon 9193ff4d15
Reworded one of the descriptions 7 years ago
bret curtis 4890ecd357 remove native GLESv* support, as it never worked; make things less complicated as result, fixed lighting.glsl to work with gl2es thanks to ptitSeb 7 years ago
Capostrophic 2d119e834a Add vanilla absorb attribute behavior option, on by default (Fixes #4135) 7 years ago
Capostrophic b6a2589e7b Don't apply harmful spell effects on the player in god mode (fixes #4264) 7 years ago
David Cernat 5f6ddcfc59 [General] Rework container sync to prevent item duping
A main priority in TES3MP development is to avoid making major changes to OpenMW code, so as to avoid merge conflicts in the future. Whenever avoiding potential conflicts seems especially difficult for the proper implementation of a particular multiplayer feature, that multiplayer feature is often put off until later or partially implemented with the intent of being revisited in the future.

Container sync is the perfect example. Previously, the OpenMW code for container actions was kept exactly as it was, with clients unilaterally accepting their own container changes as per singleplayer-specific code, with only the addition that clients sent container packets every time they made a change in a container, packets which were then forwarded unquestioningly by the server to other players. This meant that two players clicking on the same item in a container at the same time both managed to take it, thus duplicating the item.

Immediately after the packets were already forwarded, server scripts were able to check for incorrect changes, such as the removal of more items than should have existed in a container, but they had to send their own packets that attempted to fix what had already been accepted on the initial client and then forwarded to all clients, which was quite onerous in some scenarios, such as when a player on a slow connection immediately dropped items in the world after taking them from a container (which is why the default TES3MP serverside scripts made no attempt at sending corrective packets at all, preferring to expect the matter to be solved in a later C++ implementation).

This commit fixes item duping in containers by preventing container actions from initially running on clients and by ending the automatic forwarding of container packets by the server. Instead, clients now send container packets that act as requests for container actions, and serverside scripts have to forward these requests themselves. In other words, without a matching Container event in the server's Lua scripts, players are completely unable to affect containers for themselves or for others.

To forward a received Container packet, the following line must be used in a Container event in the Lua scripts:

tes3mp.SendContainer(true, true)

When an invalid action count is used in a container request, the serverside scripts can amend it using the following new function:

tes3mp.SetReceivedContainerItemActionCount(objectIndex, itemIndex, actionCount)

Thus, the serverside scripts are able to allow only container actions that are correct based on their own recorded contents for that container.

The OpenMW code allowing unilateral container actions in mwgui/container.cpp is now prevented from executing. When a player's container request is returned to them, code in mwmp/WorldEvent.cpp simulates those container actions instead.
7 years ago
David Cernat 9165b12d78 [Client] Update inventory views when receiving inventory or equipment 7 years ago
Capostrophic 41f89c84f8 Don't move the player if opposite direction keys are held down at the same time (Fixes #4233) 7 years ago
David Cernat bb15ee9215 [Client] Make it possible to get ContainerWindow from elsewhere in code 7 years ago
Bret Curtis 1e600de44e
Merge pull request #1640 from unelsson/typofix_updatecrimepersuit
Typofix: updateCrimePersuit -> updateCrimePursuit
7 years ago
Capostrophic 5a3086b0c6
Auto-detect the actual Morrowind assets path (Fixes #4336) 7 years ago
Capostrophic 42b7846f81 Replace a redundant playerAllies check with a boolean (Fixes #4229) 7 years ago
Nelsson Huotari 63e34a5575 Typofix: updateCrimePersuit -> ...Pursuit 7 years ago
David Cernat bbdc30628b [Client] Use the correct guid for a received WorldEvent or ActorList 7 years ago
scrawl c02920bcd1
Merge pull request #1634
Conflicts:
	apps/openmw/mwworld/worldimp.hpp
7 years ago
scrawl f47429d575
Merge pull request #1635 7 years ago
scrawl ff7f964643
Merge pull request #1636 7 years ago
scrawl 5c1551d1ac
Merge pull request #1637 7 years ago
David Cernat 14f0299322 [Client] Don't log InputBox inputs for client 7 years ago
Andrei Kortunov fed3e56fc1 Weather manager: get rid of World dependency 7 years ago
Andrei Kortunov 53ef345680 Update magic effect particles after building new animation (bug #2254) 7 years ago
Andrei Kortunov a0a30cdbf5 AI: hide torches during bad weather (bug #4334) 7 years ago
Andrei Kortunov bd6c7de579 Do not unequip two-handed weapon when equipping torch 7 years ago
RoadTrain d626d89c49 OpenMW-CS: Fix a typo in startup warning. 7 years ago
Capostrophic 5b49248d6e
Restrict opening doors to bipedal actors (Fixes #4313) 7 years ago
scrawl eb723f5ae6
Merge pull request #1629 7 years ago
scrawl edb57306b6
Merge pull request #1628 7 years ago
scrawl 17fa1a4d51
Merge pull request #1630 7 years ago
scrawl 7a5748a9f1
Merge pull request #1632 7 years ago
Thunderforge d42791e260 Moving testing options to Advanced page 7 years ago
Bret Curtis 9b93741c7b
Merge pull request #1631 from elsid/rm_duplicate_includes
Remove duplicated include
7 years ago
Capostrophic 002ad9ae1b Print a warning in case a fallback value wasn't found 7 years ago
elsid a26483ab26 Fix memory leak
There is no delete for TextFormat objects in PageDisplay destructor.
7 years ago
elsid 26df0e6ebd Remove duplicated include 7 years ago
elsid 2f9b6b536b Label gtest directories as system
To hide all warnings when use custom GTEST_ROOT.
7 years ago
David Cernat 20caea083a [Client] Use correct count for items in equipment packets
Previously, throwing weapon sync was completely broken for players, as the count for their equipped throwing weapons was never set and – as a result – defaulted to a count of 1 on other clients. As a result, any time a player threw a dart, they would then appear as having switched to hand-to-hand for other players.

Moreover, the count of equipped items was mistakenly based on the total count of items with that refId in the inventory. As a result, if – for example – I equipped 1 Daedric Longsword and had 4 others in my inventory, my DedicatedPlayer on other clients would equip a Daedric Longsword with a count of 5. If I was overencumbered by having that many Daedric Longswords on me and then dropped 4 of them, allowing myself to move again, my DedicatedPlayer would still walk around with 5 Daedric Longswords and lack animations due to still being overencumbered on the other clients.

These problems were less prevalent for actors, but their equipment updating code has also been changed to match that of players.
7 years ago
Capostrophic e4531a6910 Use middle gray instead of pure black as default fallback color (Fixes #2841) 7 years ago
Andrei Kortunov e0aa5e8e79 Prevent overlapping for journal and books scrolling 7 years ago
David Cernat b249162ca1 [General] Implement setting of enforced client log level in GameSettings
Certain servers do not want the players to have debug information about the locations and actions of other players, so a client's log level can now be enforced by the server via the GameSettings packet.
7 years ago
David Cernat a3a341fee6 [Server] Reimplement 4ebfcc4a21 for 0.6 7 years ago
David Cernat bf906b3f0a
Merge pull request #393 from OpenMW/master
Add OpenMW commits up to 10 March 2018
7 years ago
scrawl 27610a85ac
Merge pull request #1627 7 years ago
David Cernat b7c6261e16 Merge pull request #392 from OpenMW/master while resolving conflicts
# Conflicts:
#	README.md
7 years ago
Andrei Kortunov 62c04c6758 Unstack soulgem, added via AddSoulGem console command (bug #4351) 7 years ago
Thunderforge f07a12af73 Changing label "and may cause issues" to "and will cause issues" 7 years ago
scrawl e81faf5f2f
Add an option to disable GUI keyboard navigation (Bug #4333) 7 years ago
scrawl 870c658500
Remove missing souls, remove some runaway exceptions (Fixes #4111) 7 years ago
scrawl 7f39dbb129
Merge pull request #1626 7 years ago
Harald H d3b623b5d3 http to https for supported urls (#1625)
* http to https for supported urls

* http to https

* http to https

* http to https

* http to https

* http to https

* http to https

* http to https

* http tp https

* http to https

* http to https

* http to https

* http to https

* http to https

* http to https

* http to https

* http to https

* some url fixes

* http to https
7 years ago
Thunderforge dfcd243150 Remove the word "interior" from cell not found message 7 years ago
Thunderforge 6931f6cadc Adding message indicating the purpose of the "Testing" block 7 years ago
scrawl 96c2b9374f
Merge pull request #1621 7 years ago
scrawl bf78c18296
Merge pull request #1624 7 years ago
scrawl 148cda254d
Merge pull request #1617 7 years ago
Capostrophic 3b922d810a Don't use floating point arithmetics for formatted count (Bug #4346) 7 years ago
Capostrophic 60a663ef58 Account for all possible count values in getCountString (Bug #4346) 7 years ago
Thunderforge dcc262ed91 Fixing Skip Menu checkbox not working correctly 7 years ago
Thunderforge 082e166fae Making "start default character at" field enabled or disabled by the previous checkbox 7 years ago
Thunderforge da74ca5ce0 Add testing options to the Settings page 7 years ago
Thunderforge 6c3ac834c4 Preventing max quicksaves from being saved to settings.cfg if it is unchanged. 7 years ago
Chris Robinson 01dbac7b15 Don't use a different setting for distant viewing distance 7 years ago
Chris Robinson 41669467ae Make settings for distant fog parameters 7 years ago
Chris Robinson 4caa7c9674 Workaround older MSVC quirk 7 years ago
Chris Robinson 154cc8c659 Use alternate fog parameters when distant land is enabled
This allows the distant land to actually be seen when the user enables it. The
values used are replicated from MGE XE's default settings and should probably
be exposed somewhere.
7 years ago
Chris Robinson 6d557fec8e Increase the far clip plane when distant terrain is enabled 7 years ago
Capostrophic d371bebb33 Prevent items in a container owned by a dead actor from being counted as stolen (Bug #4328) 7 years ago
Capostrophic cc0c6ddaa6 Account for empty victimRef (Bug #4328) 7 years ago
scrawl 839196e4fa
Force normal polygon mode for the map camera (Fixes #4235) 7 years ago
Florian Weber 10fe334247
add more precise float-spinbox and use it for rotations 7 years ago
David Cernat c18d07827d [Client] Hide difficulty widget because it has no use in multiplayer 7 years ago
David Cernat 37b349c2f6
Merge pull request #390 from OpenMW/master
Add OpenMW commits up to 28 Feb 2018
7 years ago
scrawl 29101607c6
Merge pull request #1618 7 years ago
Thunderforge b6d9b6f544 Formatting improvement for advanced page 7 years ago
Thunderforge 4292351993 Adding Max Quicksaves setting to Launcher 7 years ago
scrawl 4a2e9f2e3d
Update AUTHORS.md 7 years ago
scrawl 9e9c278527
Merge pull request #1597 7 years ago
bret curtis 81d90d7fb7 break for all errors that would raise when checking for version, make them UNRELEASED 7 years ago
bret curtis 3393ad623f fix rtd 7 years ago
Capostrophic 929fc68160
Consider items with dead owner not stolen (fixes bug #4328) 7 years ago
David Cernat 9e10eb9c84
Merge pull request #389 from OpenMW/master
Add OpenMW commits up to 24 Feb 2018
7 years ago
David Cernat 03266d7648 [Client] Prevent guards from arresting players who are currently jailed 7 years ago
Miloslav Číž db6107f12f
Merge branch 'master' into screenshot360 7 years ago
scrawl 31d7e6af32
Merge pull request #1608 7 years ago
scrawl 56613d817e
Merge pull request #1612 7 years ago
scrawl dd3d3f5a8b
Merge pull request #1610 7 years ago
Capostrophic 089666dd68
Round up displayed encumbrance 7 years ago
Capostrophic 46377fa348
Update [Windows] documentation 7 years ago
Capostrophic 534f3ef094
Bring UI dimensions and positions more in line with Morrowind UI 7 years ago
scrawl ea028a2076
Improve settings documentation 7 years ago
scrawl 95a07bdc77
Merge pull request #1609 7 years ago
Thunderforge a67373d116 Fixing "Show Enchant Chance" checkbox setting melee info instead 7 years ago
Capostrophic 99360e132f
Only display "new journal entry" message in dialogue if there *is* a new entry 7 years ago
David Cernat 60f686ee43 [General] Implement setting of physics framerate as part of GameSettings 7 years ago
Daniel Vukelich 104495a9a4 Set default number of quicksaves to 1 7 years ago
Daniel Vukelich 3bdd989a50 Remove numeric quicksave slot IDs
When multiple quicksaves occurred in quick succession, the numeric order
of the saves could not be guaranteed.  To prevent players from getting
confused as to why their saves appear out of order, don't number them.
7 years ago
David Cernat 65c3472772
Merge pull request #386 from OpenMW/master
Add OpenMW commits up to 13 Feb 2018, part 2
7 years ago
David Cernat 886b3431bc [Client] When resurrecting players, set pcknownwerewolf to 0
This makes it so players are no longer known werewolves and are no longer attacked infinitely by guards.
7 years ago
scrawl 9b8c56761b
Fix timing error 7 years ago
scrawl 79e9876a24
Merge pull request #1606 7 years ago
Alexander "Ananace" Olofsson 145b47a550
Fix Windows builds
`std::min`/`std::max` are part of algorithm, which is not implicitly included in Windows builds
7 years ago
David Cernat 53d758ba16
Merge pull request #385 from OpenMW/master
Add OpenMW commits up to 13 Feb 2018
7 years ago
scrawl ac1609c433
Merge pull request #1604 7 years ago
scrawl 123f7b83d5
Make the CompositeMapRenderer use available time and add related setting 7 years ago
scrawl a708ac488e
Don't call Store::setUp() unnecessarily
Fixes a threading issue with ESM::Land store caused by calling setUp() while it's being used.
7 years ago
David Cernat a7e3261b0b
Merge pull request #383 from OpenMW/master
Add OpenMW commits up to 11 Feb 2018
7 years ago
scrawl 5bb7d76913
Merge pull request #1605 7 years ago
scrawl 899d464b0d
Cap the rain emitter's frame time (Fixes #4314) 7 years ago
scrawl f28024b541
Don't use Activate and Move keys for GUI navigation if bound to mouse buttons (Fixes #4225, Fixes #4320) 7 years ago
Andrei Kortunov f626a7fcc7 Take in account PC rank during disposition calculation (bug #4322) 7 years ago
uramer 5502790ed9 removed the unnecessary comment 7 years ago
uramer 86c25f5dba Removed NIF flag handling to replicate vanilla engine behaviour 7 years ago
David Cernat 74765b3ace [General] Implement selected spell sync as part of PlayerMiscellaneous 7 years ago
Marc Zinnschlag 2a5a574134 Merge remote-tracking branch 'thunderforge/feature/4054-launcher-advanced-settings-panel' 7 years ago
Thunderforge a78acbac85 Changing page description to address Zini's concerns 7 years ago
Thunderforge cc0f7d19dc
Removing "Use these settings at your own risk" 7 years ago
David Cernat 029dfc56ba [General] Implement player scale as part of PlayerShapeshift 7 years ago
David Cernat aa448523f8 [Client] Clean up WorldEvent::runConsoleCommands() slightly 7 years ago
David Cernat ce5670e57e [Client] Ignore invalid object refIds from ObjectPlace packets 7 years ago
David Cernat 4496625154
Merge pull request #381 from OpenMW/master
Add OpenMW commits up to 31 Jan 2018
7 years ago
David Cernat 66078bfea7 [General] Implement Mark location sync as part of PlayerMiscellaneous 7 years ago
scrawl b1b8e31562
Use unique_ptr over new/delete (Fixes #4305) 7 years ago
David Cernat 989f6e6b51 [General] Implement PlayerReputation packet 7 years ago
David Cernat 88ae0772cf [Server] Initialize new processors and fix issues with RecordDynamic 7 years ago
David Cernat 3d80e2db62 [General] Add placeholders for new packet types, part 2 7 years ago
Thunderforge 8b17844781 Replacing Qt5-only method with Qt4-compatible code 7 years ago
David Cernat 273a1f50af
Merge pull request #377 from OpenMW/master
Add OpenMW commits up to 29 Jan 2018
7 years ago
David Cernat 02af7f6ba1 [General] Add placeholders for new packet types 7 years ago
scrawl 25a6a67508
Fix the optimizer messing up LOD node's children (Fixes #4301) 7 years ago
Thunderforge 04f79c34a2 Fixing typo "Tooltip" -> "Tool Tip" 7 years ago
Thunderforge 8837046d9c Adding panel for advanced settings.cfg options 7 years ago
David Cernat 78df8c5ebe
Merge pull request #375 from OpenMW/master
Add OpenMW commits up to 29 Jan 2018
7 years ago
scrawl 89c6b59c30
Merge pull request #1602 7 years ago
David Cernat ce11a1dfa9 [Client] Fix potential invalid pointer when storing cell unloads
Notably, builds of the client done with Clang were crashing on startup before this.
7 years ago
David Cernat 420dab10e1 [General] Track objects directly placed by players in ObjectPlace
This allows the OnPCDrop variable to get set correctly even when object placements have to go through the server first in order to gain a unique multiplayer index (mpNum).

Among other things, this makes it possible to roll marijuana joints in the popular mod "Tribunal Code Patch".
7 years ago
David Cernat 595bc5a152 [Client] Only send ObjectScale packets when scale actually changes 7 years ago
David Cernat 613adf6b30 [General] Update version to 0.6.3 7 years ago
David Cernat 5d4b97645d Merge pull request #374 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/CMakeLists.txt
7 years ago
David Cernat d7e29f1f61 [Client] Unequip items with constant effect damage when resurrected 7 years ago
David Cernat d19d8b0a34 [Client] Add and use enchantmentType argument for unequipItemsByEffect() 7 years ago
David Cernat 6c4bb8c423 [Client] Move resurrection code for local player to LocalPlayer 7 years ago
David Cernat 6b75a82777 [Client] Ignore equipment items for DedicatedActors with count below 0 7 years ago
David Cernat e3bc11d9eb [Client] Fix ListBox overlap crashes by removing ListBoxes properly 7 years ago
Ilya Zhuravlev 9e9f6f3132 loadtes3: don't pack() non-POD structs 7 years ago
David Cernat c6a85ee8f9 [Client] Add doesEffectListContainEffect() method to MechanicsHelper 7 years ago
David Cernat aa392ebf20 [Client] Unequip items if necessary when attr/skill modifier is set to 0 7 years ago
David Cernat ace825b99c [Client] Ignore invalid player class IDs from packets
Additionally, clean up variables names in related code.
7 years ago
David Cernat c6874509b6 [Client] Ignore invalid faction IDs from packets 7 years ago
Ilya Zhuravlev b4ec8aaf5e VideoState::queue_picture: ffmpeg expects a buffer of 4 pointers in sws_scale 7 years ago
Ilya Zhuravlev 8d44d3124e Android: Add callbacks for basic cursor handling. 7 years ago
Ilya Zhuravlev 359910762d GraphicsWindowSDL2: support setting up GLESv2 context for android 7 years ago
Ilya Zhuravlev 455f718394 Android: register a virtual controller definition 7 years ago
Ilya Zhuravlev a038327521 SDLCursorManager: fix possibly invalid read when no cursor present
On android we have no cursor so I moved the check closer to usage
7 years ago
Daniel Vukelich 3af8f63895 Use unsigned integer types for QuickSave indices 7 years ago
David Cernat 5894ffae7d [Client] Ignore dynamic object placements or spawns in packets 7 years ago
David Cernat 28f47c4f81 [General] Update version to 0.6.2-hotfixed 7 years ago
David Cernat 9935f56d46 [General] Use doubles instead of ints for enchantmentCharge
Additionally, include enchantmentCharges for items  in PlayerEquipment packets.
7 years ago
David Cernat f746958afa [Client] Send enchantmentCharge for items added or removed in containers 7 years ago
David Cernat bce3d0eb4c [Client] Use more descriptive message for version mismatch 7 years ago
Bret Curtis 588c1df0f0
Merge pull request #1599 from xyzz/android
Update android port.
7 years ago
Ilya Zhuravlev d2121ccd62 Update android port. 7 years ago
Thunderforge 36843ed31e Adding a tutorial for placing the ring in plain sight (#1598)
* Rearranging sections

* Adding instructions to place the ring in plain sight
7 years ago
Daniel Vukelich f09fd6795c Follow openmw style guide 7 years ago
scrawl 2caaa48b91
Workaround to make sure message box remains on top (Fixes #4298) 7 years ago
scrawl e2e48e0a50
Add default value for 'sAnd' GMST (Fixes #4269) 7 years ago
scrawl d9d8de3061
Catch exceptions in updateWindowManager (Bug #4269) 7 years ago
scrawl 047c44f265
Ignore duplicate data directories to work around the fallout of (Fixes #3557) 7 years ago
scrawl 80f7279a4d
Change default installation directory from 'data' to 'basedata' (Bug #3557) 7 years ago
scrawl 259919d125
Print a warning when an ambiguous file on a case-sensitive file system is found 7 years ago
scrawl 4a96934f56
Merge pull request #1596 7 years ago
Daniel Vukelich 97924d97c7 Add the option for multiple quicksave slots
With more than 1 quicksave slot, slots will be created each time you
quicksave until the maximum number (configured in settings) of
quicksaves has been reached.  After that, the oldest quicksave slot will
be replaced each time you quicksave.  Saves are numbered sequentially,
unless the maximum number of slots is 1, in which case it is not numbered.
7 years ago
Marc Zinnschlag 2dff3aab22 allow . and - in the name part of a begin script statement, but not at the beginning of a name. Fixes #4061 7 years ago
Andrei Kortunov eccb49da18 Do not summon the bound bow if there is no suitable ammo 7 years ago
Andrei Kortunov b995617559 implement rateAmmo() function 7 years ago
scrawl dd5ebe225b
Merge pull request #1580 7 years ago
scrawl bba9a8dd91
Don't update off-screen animations
Make flying creatures animate in-place when out of processing range
7 years ago
scrawl 1522bda60b
Fix crash in getDistance when invoked before the game starts 7 years ago
scrawl 83726ee06a
Fix Reset Controls button not functioning properly 7 years ago
David Cernat 14ef2fa791
Merge pull request #369 from OpenMW/master
Add OpenMW commits up to 9 Jan 2018
7 years ago
scrawl c7f60a6dc8
Merge pull request #1595 7 years ago
scrawl f6ca7295a6
Revert "Merge pull request #1595"
This reverts commit 7ef7b1a7b1, reversing
changes made to 9e7e4de0ab.
7 years ago
scrawl 7ef7b1a7b1
Merge pull request #1595 7 years ago
scrawl 9e7e4de0ab
Merge pull request #1594 7 years ago
Andrei Kortunov dba071f881 Remove the 'Screenshot saved' message (bug #4191) 7 years ago
David Cernat 8316ec0fa7 [Client] Update tes3mp change comment for object rescaling 7 years ago
David Cernat 09548d05f7 [Client] Ignore cell changes that move actors to where they already are 7 years ago
David Cernat 4a9a628a0f [Client] When getting an actor, make sure their cell is initialized 7 years ago
David Cernat 4caf7ca30a [Client] Add temporary fix for crashes caused by custom GUI elements 7 years ago
David Cernat 0cc86c04d1 [Client] Print plugin discrepancies, not just plugin lists side by side 7 years ago
David Cernat a639d3494a [Client] Fix use of DedicatedPlayers as targets for ConsoleCommand 7 years ago
David Cernat 502df7d9c1 [Client] Clean up GUIChat slightly 7 years ago
David Cernat a818140c14
Merge pull request #365 from OpenMW/master
Add OpenMW commits up to 2 Jan 2017
7 years ago
Thunderforge bd072b131b Moving controller file out of the controllers subdirectory 7 years ago
David Cernat 1cf2f35a28 [Server] Add script functions to set & get plugin enforcement state 7 years ago
Andrei Kortunov b277b83810 Display the 'Screenshot saved' message after the screenshot saving (bug #4191) 7 years ago
Bret Curtis b86118f76f
Merge pull request #1593 from psi29a/fix_mips_builds
fix building on mips machines
7 years ago
Bret Curtis c3c3fbc68e overriden -> overridden 7 years ago
David Cernat 65d978a3cb
Merge pull request #364 from OpenMW/master
Add OpenMW commits up to 1 Jan 2017
7 years ago
David Cernat bca9c55046 [Client] Reinstate "Merge pull request #1529 from drummyfish/animfix"
This reverts commit 2f4cd6b713 and adds back the changes made by 45993d3da2 because the OpenMW issue at https://bugs.openmw.org/issues/4250 has been fixed by 57257d057f
7 years ago
Thunderforge 096e734df6 Adding gamecontrollerdb.txt file that got left behind due to being on .gitignore 7 years ago
Thunderforge 3f7143556a Providing different mappings depending on the version of SDL installed 7 years ago
Thunderforge a5e4f95ed4 Updating controller mappings to latest version 7 years ago
Bret Curtis 7367899634 update openmw.appdata.xml to fix https://lintian.debian.org/tags/appstream-metadata-legacy-format.html 7 years ago
Bret Curtis 93f14c219c camelCase 7 years ago
Bret Curtis 7a7b040216 fix building on mips machines 7 years ago
Miloslav Číž a73ab39fdd Update refraction scaling docs 7 years ago
Miloslav Číž 3b741dc4b7 Revert "Add slider for refraction size in settings window"
This reverts commit ee40b41285.
7 years ago
scrawl c920f95d1e
Don't incorrectly discard root node transformation (Fixes #4272) 7 years ago
scrawl 57257d057f
Remove unintended jump cooldown (Fixes #4250) 7 years ago
David Cernat 47a3dc9ff2 [Server] Add broadcast argument to functions for sending WorldPackets 7 years ago
David Cernat 1e2517698d [Server] Send player speech and animation packets only to nearby players 7 years ago
David Cernat 2f4cd6b713 [Client] Revert "Merge pull request #1529 from drummyfish/animfix"
This reverts commit 45993d3da2, reversing
changes made to 3d347730dc.

That commit made players have to wait around 1.5 seconds after each jump before doing a new one.

It will be reinstated once its accompanying OpenMW issue at https://bugs.openmw.org/issues/4250 is fixed.
7 years ago
David Cernat db0e0d376e [Client] Use new code to set the console's Ptrs from server scripts
Previously, reusing the console's object selection code made it so using the same Ptr twice in a row was akin to clicking on the same object twice in the console window, i.e. the object was deselected the second time around. Additionally, that same code was setting key focus to the hidden console window, preventing players from moving until they activated another window (such as their inventory or chat window).
7 years ago
David Cernat 5fd9079b26 [Client] Stop drag and drop when setting player inventory 7 years ago
David Cernat 40e70ebf9c [Client] Fix key focus for chat window 7 years ago
David Cernat bed96e5a3d [Client] Remove check of GM_RestBed GUI mode that no longer exists 7 years ago
David Cernat 4f1df7c0c5 [Documentation] Update credits 7 years ago
David Cernat cac2c6c1e8 Merge pull request #360 from TES3MP/0.6.1-openmw-updates while resolving conflicts 7 years ago
David Cernat ecb0ad0d77 Merge pull request #359 from OpenMW/master while resolving conflicts
# Conflicts:
#	.travis.yml
7 years ago
David Cernat 06daddbd27 [Documentation] Update changelog for 0.6.2 7 years ago
David Cernat 993081ba1e [General] Add enchantmentCharge to worldObjects and items 7 years ago
scrawl b8c25e6bff
Use the correct priority of animation sources in getStartTime (Fixes #4263) 7 years ago
Marc Zinnschlag 7245b251e8 Merge remote-tracking branch 'drummyfish/cs-cam' 7 years ago
Marc Zinnschlag 93716cecd9 Merge remote-tracking branch 'origin/master' 7 years ago
scrawl 993982628d
Merge pull request #1590 7 years ago
Andrei Kortunov 1a58171e86 Do not allow to sell items from containers with zero capacity (bug #4268) 7 years ago
Bret Curtis 1c25b7ca57
Merge pull request #1589 from Thunderforge/build/setting-cmake-cxx-standard
Explicitly setting CMAKE_CXX_STANDARD to C++11
7 years ago
David Cernat fef6bddc68 [Client] Fix typo related to drag and dropping 7 years ago
Thunderforge e4a1b6b5b8 Explicitly setting CMAKE_CXX_STANDARD to C++11 7 years ago
David Cernat 535fba0cb3 [Client] Finish drag and drops when arrested or teleported by server 7 years ago
Miloslav Číž 01f9d90315 CS: Reorder 3D input menu 7 years ago
Miloslav Číž 13dc1bd41e CS: Add tooltip to camera-ortho-size preference 7 years ago
Miloslav Číž 1f5feeddb9 CS: Change camera parameter types to int 7 years ago
Miloslav Číž f2777f7242 CS: Mover object-marker-alpha under Rendering 7 years ago
Marc Zinnschlag ecf1cea1b7 Merge remote-tracking branch 'drummyfish/cs-cam' 7 years ago
Miloslav Číž 79527b746a Remove unused variable 7 years ago
Miloslav Číž b246580c63 Fix orbit camera axis 7 years ago
scrawl ccd8ca2e69
Merge pull request #1586 7 years ago
scrawl b6ac1c5697
Merge pull request #1587 7 years ago
scrawl 269c3227ea
Make sure we have cmake for the before_install step 7 years ago
Andrei Kortunov ba46473038 Do not skip weather transitions from SetPos script command (bug #3603) 7 years ago
David Cernat ebf88d12a3 [Client] Send PlayerInventory packet after buying skill training 7 years ago
scrawl e9ecaf712b
Merge pull request #1584 7 years ago
scrawl 7d62f05f81
Merge pull request #1583 7 years ago
scrawl 70661a4b1c
Merge pull request #1585 7 years ago
David Cernat 0ad9c99cf4 [Client] Send PlayerInventory packet after completing a vendor trade 7 years ago
Andrei Kortunov 0e04a26ef6 Set duration of magic effects from ingredients (bug #4261) 7 years ago
Andrei Kortunov c908ad2fba Do not allow to place actors underground via SetPos (bug #3783) 7 years ago
Chris Robinson 08e947319a Restore exception throwing to the decoder 7 years ago
Miloslav Číž ee40b41285 Add slider for refraction size in settings window 7 years ago
Miloslav Číž d13fc06baf Add basic refraction scale documentation 7 years ago
Chris Robinson 06ae61479a If a sound effect fails to load, substitute silence. 7 years ago
Miloslav Číž e309dfd234 CS: Rename variables (AppVeyor fix) 7 years ago
scrawl 9cee439e37
Merge pull request #1577 7 years ago
scrawl 1d823d8ae1
Merge pull request #1579 7 years ago
scrawl b12cd1f5b2
Merge pull request #1581 7 years ago
Miloslav Číž c979a9e34f
Merge branch 'master' into cs-cam 7 years ago
Miloslav Číž 199e41833f
Merge branch 'master' into cs-cam 7 years ago
Miloslav Číž d85f8deaa3 CS: Add fixed roll setting, plus ortho fix 7 years ago
Miloslav Číž 1b77e3ed62 CS: Add ortho camera setting 7 years ago
Miloslav Číž bfad5ebde4 CS: Fix camera orbit control with keys 7 years ago
Chris Robinson aecf74e7bb Don't throw exceptions from the audio decoder 7 years ago
Miloslav Číž 5e076ee015 CS: Fix camera orbit with arbitrary roll 7 years ago
Miloslav Číž cfdc6c788e CS: Make camera FOV change dynamically 7 years ago
Miloslav Číž 7d36dd68dc CS: Make orbit camera not change roll 7 years ago
Miloslav Číž 360d786ff2 CS: Add rendering prefs and camera FOV 7 years ago
Andrei Kortunov 744859f327 Take in account armor condition in the armor rating calculation (bug #4246) 7 years ago
Miloslav Číž a142a67972 Add default settings for 360 screenshots 7 years ago
Miloslav Číž b69c16e682 Add setting option to scale water refractions 7 years ago
Allofich 7e87ce8787 Prevent combat on/off cycling for calmed actors 7 years ago
Allofich e0c54b3f39 Stop guards trying to arrest player when calm
(Fixes #3863)
7 years ago
Andrei Kortunov a28cc37501 Do not sell ingredients from organic containers 7 years ago
scrawl d2b3f902c7
Merge pull request #1576 7 years ago
Andrei Kortunov 29b2308b2c Do not display cyrillic soft/hard signs in the journal index 7 years ago
Andrei Kortunov b6ae7f3cc8 Do not add greetings to the journal index (bug #4342) 7 years ago
scrawl 441420225f
Contributing.md: referencing issues in commit messages 7 years ago
David Cernat e97c9f72a2 [General] Rework getting/clearing of skill modifiers as with attributes 7 years ago
David Cernat 07f0cc2b0e
Merge pull request #353 from OpenMW/master
Add OpenMW commits up to 4 Dec 2017
7 years ago
scrawl 58de366c21
Merge pull request #1574 7 years ago
scrawl ff1226c96b
Merge pull request #1575 7 years ago
Andrei Kortunov 8decd35607 Fixes crash on quickload from the container menu (bug #4239) 7 years ago
Alexander "Ace" Olofsson 50deed126b
Update SDL to 2.0.7 7 years ago
David Cernat 047ad40b96 [Client] Clear FortifyAttribute effects when server sets modifier to 0 7 years ago
David Cernat 2944be18ae [Server] Actually, turn SetAttributeModifier into ClearAttributeModifier
There's no way SetAttributeModifier() was going to make sense if, say, a player had drunk 3 different potions fortifying the same attribute and was wearing equipment fortifying it as well. How would one change the sum modifier of those while accounting for each specific effect's duration and magnitude?

The only workable solution is to allow the server to clear the modifier.
7 years ago
Miloslav Číž 37aa761283 Change spherical screenshot filtering to nearest 7 years ago
Miloslav Číž 390838e084 Replace switch with ifs in shader 7 years ago
Miloslav Číž ea5e078526 Update shaders in CMakeLists 7 years ago
David Cernat ef6dc61797 [Client] Send PlayerAttribute packets when attribute modifiers change 7 years ago
David Cernat e8d636ebc3 [Server] Rework Get/SetAttributeCurrent into Get/SetAttributeModifier
As seen here, attributes don't use the concept of current values, but rather of value modifiers and value damage:

https://github.com/OpenMW/openmw/blob/master/apps/openmw/mwmechanics/stat.cpp#L217
7 years ago
David Cernat c9c363ebef [General] Allow GameSettings to set bed & wilderness resting separately 7 years ago
David Cernat e7f20e7daf Merge pull request #351 from OpenMW/master while resolving conflicts
# Conflicts:
#	CMakeLists.txt
#	README.md
7 years ago
scrawl a4d8aef40d
Merge branch openmw-43 into master
Conflicts:
	CMakeLists.txt
	README.md
	files/mygui/openmw_trade_window.layout
7 years ago
scrawl bb7ca055d0
Update AUTHORS.md 7 years ago
scrawl 47a5229eed
Merge pull request #1564 7 years ago
scrawl 59bfd670c0
Merge pull request #1571 7 years ago
David Cernat 22521578eb
Merge pull request #349 from OpenMW/master
Add OpenMW commits up to 28 Nov 2017
7 years ago
Grigorii Latyshev 2abb1a2ec2 Added checkMagicka parameter 7 years ago
Grigorii Latyshev 9fe5a4d236 Revert condition changes 7 years ago
Grigorii Latyshev dab72b45db Move mana reducing code back 7 years ago
scrawl 3984dc8f16
Merge pull request #1570 7 years ago
Andrei Kortunov b9d9660efd Update music state in the menu mode (bug #3664) 7 years ago
Andrei Kortunov f7f8dfaf2a AiWander: do not allow flying/swimming creatures to use pathgrid 7 years ago
scrawl 9920779a7b
Merge pull request #1543 7 years ago
scrawl c50b18b3bb
Move PathgridGraph out of CellStore
By definition this is not 'Mutable state of a cell' and does not belong in CellStore.

This change should improve startup times (graph is now loaded on demand) and edits to 'pathgrid.hpp' no longer cause the entirety of OpenMW to be rebuilt.
7 years ago
scrawl 5fe68ab062
Merge pull request #1419 7 years ago
scrawl fee2e946d1
Merge pull request #1565 7 years ago
David Cernat 3508a16836 [General] Use GameSettings packet to set ability to rest and wait 7 years ago
Kyle Cooley eb23367175 Fix rendering depth/order issues 7 years ago
Grigorii Latyshev ce32462358 Move code to apps/openmw/mwmechanics/spellcasting.cpp, move reduce mana code to CastSpell::cast(const ESM::Spell*) 7 years ago
Andrei Kortunov dea7d0beff Do not interrupt swim and sneak idle animations during attack (bug #4122) 7 years ago
Kyle Cooley c8f79ea838 Adjust rotation markers 7 years ago
scrawl 88ec6179ff
Merge pull request #1566 from akortunov/guifixes
Set default values for class and birthsign select menus
7 years ago
David Cernat 300ca905fc [Client] Don't pause game when minimizing window, despite MyGUI issues 7 years ago
Andrei Kortunov 55db3c2712 Set default values for class and birthsign select menus (bug #4226) 7 years ago
David Cernat d06817a356
Merge pull request #347 from OpenMW/master
Add OpenMW commits up to 25 Nov 2017
7 years ago
Grigorii Latyshev 32096ae0cc Fix displayed spell success chance in God Mode 7 years ago
scrawl 665ca5b2d5
Merge pull request #1558 from akortunov/rusjournal
Cyrillic journal index (bug #2485)
7 years ago
scrawl 8226c8dc92
Merge pull request #1560 from akortunov/guifixes
Fix the Topics button position if the Tribunal is not installed
7 years ago
scrawl f5c075b188
Merge pull request #1563 from drummyfish/throwfix
Make thrown projectiles rotate (#4216)
7 years ago
Grigorii Latyshev a7c953b318 Display 0 chance for spell if player does not have enought magic energy 7 years ago
David Cernat 2373be9735
Merge pull request #345 from OpenMW/master
Add OpenMW commits up to 23 Nov 2017
7 years ago
Miloslav Číž 4373fea21e Correct projectile rotation 7 years ago
Miloslav Číž d0a299caab Rotate thrown projectiles around the bb center 7 years ago
Miloslav Číž 38bda3bd71 Do not save thrown state for projectiles 7 years ago
scrawl 02b37dc036
Merge pull request #1562 from akortunov/carriage
Do not show carriage return characters
7 years ago
Andrei Kortunov 94c0e3ed10 Move toUpper() from StringUtils to the JournalViewModel 7 years ago
Andrei Kortunov a8bf4cdd98 Remove redundant include 7 years ago
Miloslav Číž 3dbcda6686 Make use of mEffectAnimationTime for projectile rotation 7 years ago
Miloslav Číž 2b9a0a7732 Save new projectile state 7 years ago
Andrei Kortunov 4f190bf7f4 Do not show carriage return characters (bug #3696) 7 years ago
Andrei Kortunov 4d384889af Fix the Topics button position if the Tribunal is not installed 7 years ago
David Cernat 656453725b
Merge pull request #343 from OpenMW/master
Add OpenMW commits up to 23 Nov 2017
7 years ago
Miloslav Číž de42aa9d03 Make thrown projectiles rotate 7 years ago
David Cernat 6668b9ab42 [General] Implement ConsoleCommand packet 7 years ago
Andrei Kortunov 86a17b1e3e Get rid of the redundant Utf8Stream when during journal index creation 7 years ago
Andrei Kortunov 3571f7f413 Remove getEncoding() from WindowManager 7 years ago
scrawl 2136003e1c
Reapply commit a3f821cdc which got lost in a merge 7 years ago
scrawl cd4f71d5cd
Merge pull request #1555 from akortunov/guifixes
Reworked trade window
7 years ago
Andrei Kortunov 67acb83b62 Add missing include 7 years ago
Andrei Kortunov 5f41f7c48d Clean code up a bit 7 years ago
Andrei Kortunov ba91cd658b Convert topic name to Unicode 7 years ago
Andrei Kortunov ea36956ff1 Reworked trade window 7 years ago
Andrei Kortunov f0ca3eabd3 Merge from upstream master 7 years ago
Andrei Kortunov a83a43e376 Determine when need to use the Cyrillic journal index 7 years ago
scrawl e840c4352f
Merge pull request #1556 from jbo-85/master
Fix search paths in FindSDL2.cmake to find SDL2 built from source
7 years ago
scrawl cc3c27f241 Clean up layout files to use Spacer class 7 years ago
scrawl a3f821cdcd Disable keyboard for trade +/- buttons
For one, because their RepeatClick handler breaks the keyboard function, and because its redundant anyway (just press Up/Down arrow with the edit box focused to do the same thing)
7 years ago
scrawl 9fda3b6db4 Fix NumericEditBox behavior broken by switch to std::stoi
For some reason stoi doesn't throw an error for '1foo' while 'foo1' does.

Now the edit box flat out rejects any non-digit key events.
7 years ago
scrawl 719255c5c6
Merge pull request #1557 from akortunov/journalfix
[Feedback needed] Handle 128px Tx_menubook_topics textures
7 years ago
scrawl 39a9e90b1d
Merge pull request #1553 from drummyfish/leakfix
Fix memory leak in WindowManager
7 years ago
Andrei Kortunov ce5bdd6361 Split the JournalBooks::createTopicIndexBook() 7 years ago
Andrei Kortunov a391990f2a Provide multibyte toLower() and single chars comparator 7 years ago
Andrei Kortunov 4dcaf040e6 A Russian journal index 7 years ago
Andrei Kortunov 60d0c83cca Handle 128px Tx_menubook_topics textures 7 years ago
jbo-85 f896c9acb6 Fix search paths in FindSDL2.cmake to find SDL2 built from source 7 years ago
Miloslav Číž ea2bbce68a Fix memory leak in WindowManager 7 years ago
David Cernat b2536d5296
Merge pull request #341 from testman42/patch-1
Update scripts repo link
7 years ago
Testman 7e0662cf81
Update scripts repo link
Change repo name from PluginExamples to CoreScripts.
7 years ago
David Cernat 28e1947f23 Merge pull request #339 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/engine.cpp
7 years ago
Miloslav Číž df61a30259 preincrement 7 years ago
Miloslav Číž ddbf6c162f use linear filtering for the cubemap 7 years ago
Miloslav Číž fc507c66f7 remove no longer needed stuff 7 years ago
Miloslav Číž 3ae5310567 use loading screen to freeze the screen 7 years ago
Miloslav Číž 2b5f147545 allow non-power-of-2 sized cubemaps 7 years ago
scrawl 36f4f0ef85 Don't increase simulationTime while the game is minimized (Fixes #4211) 7 years ago
Miloslav Číž 902862aa8b display confirming message for all screenshots 7 years ago
Miloslav Číž bccff768ff select closest power of 2 resolution for the cubemap 7 years ago
Miloslav Číž 56c74fb96f add scene switch node 7 years ago
Miloslav Číž 1a4f351e3d move camera freeze code 7 years ago
David Cernat 5aff515d3f
Merge pull request #337 from OpenMW/master
Add OpenMW commits up to 15 Nov 2017
7 years ago
scrawl cf40d19d7d
Merge pull request #1551 from thegriglat/abs
Change abs to std::abs
7 years ago
scrawl 35d68f038d Update dialogue topics list after result script is run
Regression from 0.42.
7 years ago
scrawl 60fba7acd8 Fix reorder warning 7 years ago
scrawl c36d250044 Parse dialogue text for keywords after the resultscript runs (Fixes #4210) 7 years ago
scrawl 7c5d2a1ac4 Update dialogue topics list after result script is run
Regression from 0.42.
7 years ago
scrawl 5a93b6a324 Enable word-wrapping for the console history 7 years ago
Miloslav Číž af38d3a47d get rid of sphericalscreenshot class 7 years ago
Miloslav Číž 226fb9c26b render cubemaps in OGL coordinates 7 years ago
Miloslav Číž 1c3d45f641 dirty 360 screenshot GPU setup 7 years ago
Miloslav Číž 823218bb61 freeze screen during screenshot taking 7 years ago
Grigorii Latyshev 6e4f6c4bd5 Change abs to std::abs 7 years ago
David Cernat 2ba1c84cf7 Merge pull request #335 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/mwgui/container.cpp
7 years ago
Alexander Stillich 93e9df15c9 Fixed parameter naming 7 years ago
Alexander Stillich 52b3507a2b Removed escape_hash_filter::mPrevious, removed usage of boost::replace_all 7 years ago
Alexander Stillich 09aac22782 Added StringUtil::replaceAll() 7 years ago
Alexander Stillich 92aaff3b78 Fixed escaping @ in boost program options filter 7 years ago
scrawl a7fd27f413
Merge pull request #1544 from rexelion/archerrangefix
use fProjectileMaxSpeed for ranged weapons distance (fixes #4192)
7 years ago
scrawl 98b4f9c596
Merge pull request #1549 from akortunov/itemmodels
Item models reworking
7 years ago
scrawl ae9f79c192
Merge pull request #1550 from akortunov/trackingfix
Do not track a nearest actor during combat and pursue
7 years ago
scrawl dc016059c3 Disable Activate key when textinput is active (Bug #4151) 7 years ago
scrawl 3b9e1e8c1b Make movement keys not function in text input mode 7 years ago
scrawl b7eda61f7a Fix overlapping widgets in trade window layout (Fixes #4205) 7 years ago
Miloslav Číž 1ab854446c remove unused include 7 years ago
Andrei Kortunov 8c0dcd8b2b Do not track a nearest actor during combat and pursue (bug #4179) 7 years ago
Miloslav Číž 511a5686da planet mapping adjustment 7 years ago
Miloslav Číž 4fc532d873 reference screenshot settings only from one place 7 years ago
Miloslav Číž d71d984cfa more unused stuff cleanup 7 years ago
Miloslav Číž e804c4a011 remove no longer used method 7 years ago
Miloslav Číž 525f8b4d8e get rid of special key for 360 screenshot 7 years ago
rexelion f0649849b8 changed variable name to be more descriptive 7 years ago
Andrei Kortunov 9943bd4d74 AiWander fast forwarding improvements (bug #3638) 7 years ago
Andrei Kortunov 03f129b53c remove redundant allowedToInsertItems() function from ItemModel 7 years ago
Andrei Kortunov 99517d83ea Bound items detection refactoring 7 years ago
Andrei Kortunov a02124f884 Handle item owners during pickpocketing 7 years ago
David Cernat 01db219de4
Merge pull request #333 from OpenMW/master
Add OpenMW commits up to 11 Nov 2017
7 years ago
scrawl a5ba1caed1
Merge pull request #1541 from astillich/4189
Fixed escaping @ in boost program options filter
7 years ago
scrawl f1aeb416ec Disable Activate key when textinput is active (Bug #4151) 7 years ago
scrawl a5adc5b018 Add NPC base skeleton files to the optimizer blacklist (Fixes #4159) 7 years ago
scrawl b06512a60d Fix error message that referred to the wrong file (Bug #4159) 7 years ago
scrawl 1afbf99f74 Make movement keys not function in text input mode 7 years ago
scrawl b9baee51d5 Fix overlapping widgets in trade window layout (Fixes #4205) 7 years ago
Miloslav Číž 1f49612ca3 enable water effects for 360 screenshots 7 years ago
Miloslav Číž 319ed2f9b8 disable 360 screenshots in vanity/preview mode 7 years ago
Miloslav Číž 497b33e403 small corrections 7 years ago
rexelion 69a56eaea3 don't initialise rangeAttackOfTarget 7 years ago
Miloslav Číž 9ab3a0c44b set cubemap width differently 7 years ago
Miloslav Číž 5baff05bac add cubemap mapping 7 years ago
Miloslav Číž 5a07d135ae add settings for cubemap size 7 years ago
Kyle Cooley 1cd539bad2 Fix render order for markers 7 years ago
Andrei Kortunov 3694b6ec90 Move onClose() check to item models 7 years ago
Andrei Kortunov ac33ff9482 Move onDropItem() check to item models 7 years ago
Andrei Kortunov 3604b73d60 Move onTakeItem() to item models 7 years ago
Kyle Cooley 556117f6e6 Update marker transparency when changed. 7 years ago
David Cernat f2a6957e16 Merge pull request #331 from OpenMW/master while resolving conflicts 7 years ago
Miloslav Číž 43c49e2f31 delete accidentally commited files 7 years ago
Miloslav Číž 1b184d8716 correct player mask 7 years ago
Miloslav Číž e54c0a90fa fix mirrored spherical screenshots 7 years ago
Miloslav Číž d763e9fe46 add settings for spherical screenshots 7 years ago
Kyle Cooley de214db8d4 Use configured transparency. 7 years ago
Kyle Cooley 197ea95646 Prevent arrows for move/scale markers from intersecting. 7 years ago
Miloslav Číž 8f32114025 segfault fix 7 years ago
Miloslav Číž d4fd08a63f save 360 screenshots in the configured directory 7 years ago
Miloslav Číž 1b97a541f4 make a new action for 360 screenshot 7 years ago
rexelion 983c33c4c8 don't use a pointer for ActionWeapon 7 years ago
Miloslav Číž f60840754f disable water effects for spherical screenshots 7 years ago
Miloslav Číž 5698d70806 small planet mapping 7 years ago
Miloslav Číž 5f36518181 spherical mapping 7 years ago
scrawl 41ecbdbe6c Add missing WaitDialog::clear() (Fixes #4196) 7 years ago
scrawl 9ecdcc187f Clarify a warning message refers to inventory objects 7 years ago
scrawl 95b3c1181a Update shader with a non-color tracking material when equipment is changed during chameleon/invisibility effects (Fixes #4190) 7 years ago
scrawl e42bd71081 Add missing WaitDialog::clear() (Fixes #4196) 7 years ago
scrawl 244cc5b861 Reduce error spam 7 years ago
scrawl 7b4add2ae4 Fall back to non-shader material if creating the shader fails
Also fixes an uncaught exception that will break the whole game.
7 years ago
Alexander Stillich 43b5c2e36b Fixed parameter naming 7 years ago
Alexander Stillich 70d578d050 Removed escape_hash_filter::mPrevious, removed usage of boost::replace_all 7 years ago
Alexander Stillich af3e1f92ec Added StringUtil::replaceAll() 7 years ago
Miloslav Číž 4761a3d98b dirty cylindrical projection 7 years ago
Miloslav Číž 3be9e2ee95 make spherical screenshot class 7 years ago
rexelion cab0002461 Backing up distance is now dependent on opponents's weapon range; don't back up from ranged oponents 7 years ago
Miloslav Číž 5afe02505b hide player in first person 360 screenshot 7 years ago
Miloslav Číž ce55d7c2f5 basic cubemap rendering 7 years ago
Miloslav Číž 7feba7e498 basic setup for 360 screenshots 7 years ago
rexelion a1d9f11b04 use fProjectileMaxSpeed for ranged weapons distance 7 years ago
Kyle Cooley 492b99b008 Transparent object markers 7 years ago
scrawl 801f2d42d5
Merge pull request #1537 from drummyfish/guardfix
Check the real distance to target in AIPursue (issue #4184)
7 years ago
Miloslav Číž f98a821482 fix possible bug in aipursue 7 years ago
Alexander Stillich 7d39c5450c Fixed escaping @ in boost program options filter 7 years ago
scrawl 87c79d7102
Merge pull request #1536 from rexelion/knockoutfix
Wait a few seconds before getting up (fixes #3884)
7 years ago
scrawl 45993d3da2
Merge pull request #1529 from drummyfish/animfix
Stop character landing animation when turning (issue #4177)
7 years ago
Miloslav Číž 430d01a39a additional animation refactor 7 years ago
rexelion de7a7d842b mTimeUntilWake is initialised in the constructor 7 years ago
scrawl 3d347730dc
Merge pull request #1524 from psi29a/cmake_31
standerdise on 3.1.0
7 years ago
Miloslav Číž 282800b5b2 Create LICENSE (#1532)
* Create LICENSE

Let's add the license file so that GitHub officially registers it and displays it next to the project.

* move license files

* update licenses in cmakelists.txt

* fix link in README
7 years ago
scrawl e3c42251f9
Update AUTHORS.md 7 years ago
scrawl e6303c578c
Merge pull request #1530 from rexelion/curseitemfix
Trigger OnActivate when item is picked up through the inventory (Issue #3726)
7 years ago
rexelion 48ec680f23 use game time instead of real time 7 years ago
Miloslav Číž f34223fce9 check the real distance to target in aipursue 7 years ago
rexelion ab66034ed1 use uniform_int_distribution instead of rand() 7 years ago
rexelion ee2f3db9a8 fixed randomness 7 years ago
rexelion 8c2cc0f42f break invisibility first 7 years ago
rexelion bcbfa5fe1e prevent activation, leave the rest to the script 7 years ago
rexelion de83ad0116 use real time; wait random number of seconds 7 years ago
rexelion 5b8610b34b knocked out characters wait some time before getting up 7 years ago
David Cernat 2ca4017371 [Client] Force position updates for players in animations 7 years ago
rexelion a9e5e19482 OnActivate is triggered when the item is picked up 7 years ago
Miloslav Číž ff1265c0e7 refactor jump animation 7 years ago
David Cernat be25decee2 [General] Implement PlayerSpeech packet 7 years ago
David Cernat a31d43965f
Merge pull request #328 from OpenMW/master
Add OpenMW commits up to 31 Oct 2017
7 years ago
scrawl 5e69f6033f
Merge pull request #1531 from drummyfish/cyclefix
Don't switch weapon when cycling to the same weapon (issue #4180)
7 years ago
rexelion e8743f3f79 check the presence of OnActivate using the SuppressActivate flag instead of looking for keywords 7 years ago
Miloslav Číž 3c65bdaf14 weapon cycle fix 7 years ago
Miloslav Číž 7bc512974f use mcurrentjump instead of custom attrib 7 years ago
David Cernat 605b06c303 [General] Find actor speech captions instead of sending them in packets 7 years ago
rexelion 4e6f53d6f1 item added to the player and OnActivate is triggered when the inventory is closed 7 years ago
rexelion 1ee5dcff77 added a function to determine if a script contains OnActivate 7 years ago
Miloslav Číž 5c8f491441 move animation disabling code to a better place 7 years ago
David Walley 41dc82abad Update Links to Documentation in settings.cfg files (#1523)
* Update settings-default.cfg

* Update settings.cpp
7 years ago
scrawl 9c9da7b49f
Merge pull request #1527 from drummyfish/master
Remove redundant condition
7 years ago
scrawl d61fc6e8f0
Merge pull request #1528 from ace13/downgrade-mygui
Downgrade MyGUI to 3.2.2 for Windows builds
7 years ago
Miloslav Číž f9c396e0ea stop landing animation when turning 7 years ago
Alexander "Ace" Olofsson 04af200ae8 Downgrade MyGUI to 3.2.2 for Windows builds 7 years ago
Miloslav Číž 03401bb5df remove redundant condition 7 years ago
David Cernat 413893aa51 [General] Implement PlayerAnimPlay packet 7 years ago
David Cernat 37304655da Merge pull request #326 from OpenMW/master
Add OpenMW commits up to 25 Oct 2017
7 years ago
Bret Curtis d19839a666 standerdise on 3.1.0 7 years ago
scrawl f9397ce933 Merge branch 'master' into openmw-43 7 years ago
scrawl ae14aa0c84 Merge pull request #1522 from AnyOldName3/yet-another-cmake-fix
Ensure the git-version target puts the version file in the appropriate directory/ies
7 years ago
scrawl 9f5e49f726 Merge pull request #1521 from ace13/fix-cpack-nsis
Windows: Update CPack configuration for NSIS packages
7 years ago
scrawl 90f4e9530a Merge pull request #1517 from ace13/update-osg
Updating OSG packages to 3.4.1
7 years ago
David Cernat 50d5fffb7f [General] Add and implement PlayerQuickKeys packet 7 years ago
AnyOldName3 c1a871ff1f Make indentation consistent. 7 years ago
AnyOldName3 daf7d8451c Switch to a more reliable method of passing the git-version targt the data it needs 7 years ago
AnyOldName3 e3142b9643 Add missing variables to those forwarded to the git-version target 7 years ago
Alexander "Ace" Olofsson 3e51c9e6b3 Missed the OpenCS config file 7 years ago
Alexander "Ace" Olofsson 2e6cf53fdd Update CPack configuration for NSIS packages
Now grabs generated files from the configuration directory where they're
generated
7 years ago
scrawl 4a7be0ffda Don't reset journal index to a lower value (Fixes #4172) 7 years ago
scrawl 954475f61f Merge branch 'master' into openmw-43 7 years ago
David Cernat dd25c7db4e Merge pull request #324 from OpenMW/master
Add OpenMW commits up to 24 Oct 2017
7 years ago
David Cernat a94d4ce6f5 Merge pull request #323 from TES3MP/0.6.1
Add hotfix commit for 0.6.1 from 23 Oct 2017
7 years ago
scrawl 4437a72e47 Merge pull request #1519 from drummyfish/rainfix
fix rain ripple regression (bug #4169)
7 years ago
Miloslav Číž 3731e20228 fix rain ripple regression 7 years ago
scrawl 0c6ef17fb5 Add explicit variant of 'OnActivate' 7 years ago
scrawl e564dd842e Refactor dialogue responses to make sure messages from scripts are printer afterwards, not before the dialogue response (Fixes #4166)
Don't delete Link objects prematurely (Fixes #4171)
7 years ago
scrawl 2a0b2c4e24 Hide modal window before deleting it (Fixes #4168) 7 years ago
David Cernat 8c47d63b08 [General] Update version to 0.6.2 7 years ago
David Cernat 3aedc2e5bc [Server] Don't automatically share PlayerTopic packets between players 7 years ago
Marc Zinnschlag dcd08e6329 updated changelog 7 years ago
Marc Zinnschlag 0153b54c3f increased version number 7 years ago
David Cernat 360cf2ead7 Merge pull request #321 from OpenMW/master
Add OpenMW commits up to 22 Oct 2017
7 years ago
Alexander "Ace" Olofsson 32bdd500af Updating OSG packages to 3.4.1 7 years ago
scrawl 8b19a8b7f6 Merge pull request #1513 from lukago/feature4082b
Feature #4082: use many ingredients/potions instantly
7 years ago
scrawl 3d0094bd2e Fix behavior of 'journal' command when invoked with already seen entry 7 years ago
scrawl 768da57da2 Fix dialogue topics displayed in lower case 7 years ago
David Cernat 3a9e5e3a7b Merge pull request #319 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/mwworld/worldimp.hpp
7 years ago
scrawl f3be39660b Merge pull request #1516 from baszczewski/patch-1
Fix assert with empty setting value
7 years ago
Marcin Baszczewski 46b015d3d9 Fix assert with empty setting value
Local value could be empty, so it's important to check it size before read first char.
7 years ago
lukago b6cb3b445c use getIndex to handle other windows, nullsafe fixes 7 years ago
scrawl bb4ffb7743 Merge pull request #1514 from akortunov/ringfix
Do not replace an equpped ring of the same value
7 years ago
scrawl 075a7fee20 Merge pull request #1515 from akortunov/guifixes
Fix a 'Good Beast' companion window
7 years ago
scrawl 5b2fe01375 Merge pull request #1508 from AnyOldName3/shut-up-travis
Mark worldimp functions as override to stop distracting Travis CI war…
7 years ago
Andrei Kortunov eaff7e30aa Fix a 'Good Beast' companion window 7 years ago
Andrei Kortunov e64f14b7ce Do not replace an equpped ring of the same value 7 years ago
lukago a3225364ff refactor, use dragItem method 7 years ago
AnyOldName3 03fc3353b9 Tidy up indentation 2 7 years ago
AnyOldName3 f3e6b26e6b Tidy up indentation 7 years ago
scrawl 9be27193a3 Merge pull request #1512 from Rhiyo/patch-1
fixed new clothing replacing old clothing of same value
7 years ago
lukago 43f94a8890 simplify drag and drop on avatar for potions and ingredients 7 years ago
Marc Zinnschlag 0b163f0a50 Merge remote-tracking branch 'aesylwinn/forceNewProject' 7 years ago
Marc Zinnschlag bdabace7e2 Merge remote-tracking branch 'aesylwinn/LLmerge' 7 years ago
Rhiyo d9fe3aac99 fixed new clothing replacing old clothing of same value
Found on the bug http://bugs.openmw.org/issues/4165.

In original Morrowind, new clothing of the same value wouldn't replace old clothing. Tested with common and expensive clothing by selling to merchants and using the AddItem console command in original Morrowind. 

In OpenMW, before this change, new clothing of the same value would replace old clothing, tested with the same methods used above.
7 years ago
Kyle Cooley 6d8666d80d Force new project file when creating new project 7 years ago
AnyOldName3 9571cd8754 Switch defaultfilters to be handled by a binary-friendly version of the resource macro 7 years ago
AnyOldName3 2abff22c08 Make MWWorld::World final to enable compiler optimisations 7 years ago
AnyOldName3 7440cf37bc Remove redundant virtual keywords implied by override keywords 7 years ago
David Cernat 260b3411c3 Merge pull request #317 from OpenMW/master
Add OpenMW commits up to 18 Oct 2017
7 years ago
AnyOldName3 69da89be39 Mark a method I missed out the first time as override 7 years ago
scrawl 33ceddc58b Merge pull request #1506 from akortunov/swimanimations
Use SwimTurnLeft/Right animations correctly
7 years ago
scrawl 21a705fb75 Merge pull request #1507 from AnyOldName3/data-local-fix
Fix the loading of 'data-local' lines which I broke
7 years ago
scrawl 7328de6c50 Merge pull request #1505 from drummyfish/master
Make snow create water ripples (fixes #4156)
7 years ago
AnyOldName3 2aad5bed7a Mark worldimp functions as override to stop distracting Travis CI warnings and prevent future typos 7 years ago
AnyOldName3 43e9e955c8 Do the same for the CS 7 years ago
AnyOldName3 1f77f9654b Strip quotes from the data-local setting if present (because for whatever reason it's a string, not a boost::filesystem::path) 7 years ago
Andrei Kortunov 4d4d247565 Use SwimTurnLeft/Right animations correctly 7 years ago
Miloslav Číž a7cad65aab fix water shader switching bug 7 years ago
Miloslav Číž 8a1e0e74fd update uniform from one place 7 years ago
Miloslav Číž 797e407269 make snow create water ripples 7 years ago
Miloslav Číž da47653625 move rain intensity uniform to water node 7 years ago
David Cernat 184c5f2b29 Merge pull request #315 from OpenMW/master
Add OpenMW commits up to 17 Oct 2017
7 years ago
scrawl a3a7b5b357 Merge pull request #1504 from AnyOldName3/escape-hash-oversight-fix-two-electric-boogaloo
Switch openmw-cs to the escape versions of option types
7 years ago
scrawl 7f8d996eff Merge pull request #1502 from AnyOldName3/launcher-and-wizard-ampersand-escape-support
Launcher and wizard ampersand escape support
7 years ago
Kyle Cooley 6d7a24224b Add documentation. 7 years ago
AnyOldName3 654bd401fb Switch openmw-cs to the escape versions of option types 7 years ago
David Cernat e164e6305e Merge pull request #313 from OpenMW/master while resolving conflicts
# Conflicts:
#	.travis.yml
#	CMakeLists.txt
#	apps/openmw/mwgui/jailscreen.cpp
#	apps/openmw/mwmechanics/mechanicsmanagerimp.cpp
7 years ago
scrawl 136ef1f738 Fix incomplete settings in recreateShaders() 7 years ago
scrawl 03554b2f4b Fix some style issues flagged by cppcheck 7 years ago
scrawl 64d02f577e Fix missing null check 7 years ago
scrawl 624046c558 Fix unused event handler 7 years ago
scrawl 50d7eb8e54 Fix crash when adding a NULL object to the cache 7 years ago
scrawl 4c174ecd12 Merge changes to coverity scan script 7 years ago
scrawl bbf9b0c0a7 Merge pull request #1503 from akortunov/regressions
Handle Trespassing crime differently from Theft
7 years ago
scrawl 97ec38affb Merge pull request #1492 from drummyfish/master
fix rain/snow moving with player (issue #2698)
7 years ago
Andrei Kortunov 8f255a6b72 Handle Trespassing crime differently from Theft (bug #4158) 7 years ago
AnyOldName3 49dbb4a9ca Add a third copy of a comment where I felt clarification was missing 7 years ago
AnyOldName3 7329e6a9ef Load 'data=...' lines correctly when starting the wizard or launcher, and save them correctly when exiting the launcher. 7 years ago
AnyOldName3 28ff677337 Save 'data=...' lines correctly when exiting the wizard 7 years ago
Miloslav Číž af6eeddbe5 use operator instead of drawcallback 7 years ago
Miloslav Číž 65977b910e wrap weather around in all directions 7 years ago
Miloslav Číž 380a5799dd use bbox as wrap range & apply to all particle systems 7 years ago
Miloslav Číž 38bfa64100 transform weather particles to world space 7 years ago
Miloslav Číž 8114126a62 make use of renderinfo 7 years ago
Miloslav Číž 33a1459b11 search for particle system by class name 7 years ago
Miloslav Číž b95c9ba483 rain independent from camera plus wrap-around 7 years ago
Kyle Cooley 11eae16645 Get rid of duplicate function, fix flag checking 7 years ago
scrawl 5fbdb64bb9 Add OPENMW_DECOMPRESS_TEXTURES environment variable to decompress textures in software if not supported by graphics hardware
Disabled by default due to requiring new functionality that was just added to OSG 3.6 or OpenMW/OSG.
7 years ago
Kyle Cooley d27071f06a Fix LTEX import bug. 7 years ago
Kyle Cooley 98c38ad7d1 Merge cleanup. 7 years ago
Kyle Cooley 6d9d98c02c Merge Land/LandTextures 7 years ago
scrawl 548af6dbfb Fix jail screen fading 7 years ago
scrawl f3ca9832b0 Merge pull request #1500 from akortunov/extraspell
Implement ExtraSpell magic effect
7 years ago
Andrei Kortunov 30b05b557b ExtraSpell magic effect: a basic implementation 7 years ago
scrawl a5b39e0842 Update AUTHORS.md 7 years ago
scrawl 09d7681254 Merge pull request #1499 from lukago/bug4155
Bugfix #4155: NPCs don't equip a second ring in some cases
7 years ago
scrawl cf1106f3eb Merge pull request #1498 from AnyOldName3/cmake-resource-handling
Make CMake copy the runtime resources to the correct location
7 years ago
glbwsk 83a5c7c3d8 removed unnecessary comments, added gitignore for clion cmake 7 years ago
scrawl 548e90a7bc Set cursor active when moving by controller 7 years ago
glbwsk ff9cb22a58 npc swap cheaper ring during auto equip 7 years ago
glbwsk e6e482ea98 added some comments for autoEquip 7 years ago
glbwsk a25903b075 fixed autoequiping rings by npc - now checks if right hand is free 7 years ago
AnyOldName3 c9e86a8ebc Remove superfluous argument 7 years ago
AnyOldName3 a52c485090 Fix list length error 7 years ago
AnyOldName3 6af8ad70a5 Remove superfluous copy_all_files macro 7 years ago
AnyOldName3 76c4ff983a Fix getting cmake property as variable 7 years ago
AnyOldName3 1f86fa3c31 Fix resource copying on non-MSVC targets 7 years ago
AnyOldName3 b00b94f0db Use CMAKE_CONFIGURATION_TYPES instead of manually listing the possible configuration types. 7 years ago
AnyOldName3 f9a3562ccd Remove duplicate macro definition and fix warning 7 years ago
AnyOldName3 2652a89df4 Fix mismatched indentation that apparently the .editorconfig file doesn't handle automatically 7 years ago
AnyOldName3 5ceaaabeb2 Remove MESSAGE calls I accidentally left in 7 years ago
AnyOldName3 f8fe992dc0 Adjust CMake's run-time resource handling such that the Windows CI script does not have to copy these files 7 years ago
David Cernat ec2c964ae1 Merge pull request #311 from TES3MP/0.6.1
Add hotfix commit for 0.6.1 from 10 Oct 2017
7 years ago
David Cernat f532ab241d [Server] Avoid duplicates of the same player in a cell's loaders 7 years ago
David Cernat c35101cc36 [Client] Don't use message box call boolean for regular message boxes 7 years ago
David Cernat 4f112ba3d7 [Client] Use regular message boxes where expected to do so
This helps us move towards using the same terminology as OpenMW for GUI elements, leading to less confusion.
7 years ago
David Cernat 41ff3fee89 Merge pull request #310 from OpenMW/master while resolving conflicts
# Conflicts:
#	CMakeLists.txt
7 years ago
scrawl 479f9535b4 Allow training window exit() 7 years ago
scrawl 9cde3e4408 Merge pull request #1495 from akortunov/regressions
Add showsInInventory() check to the ContainerItemModel
7 years ago
scrawl 75c8628613 Merge pull request #1496 from ace13/add-nsis-autolaunch
Add a checkbox for launching OpenMW in the Windows installer
7 years ago
Alexander "Ace" Olofsson dc127fbb93 Add a launch checkbox to the OpenMW installer 7 years ago
Andrei Kortunov ea3729790f Add showsInInventory() check to the ContainerItemModel 7 years ago
David Cernat 182f8c1f06 [General] Print client version on startup 7 years ago
David Cernat 3d38da0e85 [Server] Put includes in a specific order 7 years ago
David Cernat 61b1a59814 [General] Move server's version printing method to Utils 7 years ago
David Cernat 08f34e5356 [Client] Fix recent problems with password window 7 years ago
David Cernat 711c4d83da [Client] Fix build after recent OpenMW changes to GUI 7 years ago
David Cernat 3e8d7c8416 Merge pull request #306 from OpenMW/master
Add OpenMW commits up to 7 Oct 2017
7 years ago
Kyle Cooley b14404e9cc Fix region colors 7 years ago
scrawl 7021d354c6 Merge pull request #1493 from akortunov/regressions
Regression fixes
7 years ago
scrawl 2805781542 Fix a crash when exit() already hides the window (Fixes #4148) 7 years ago
Andrei Kortunov ad27e0f945 Fix owned tooltip in the spellwindow 7 years ago
Andrei Kortunov e2afd3690c Remove item by id from InventoryStore 7 years ago
David Cernat 38247ff086 Merge pull request #303 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/mwbase/dialoguemanager.hpp
#	apps/openmw/mwdialogue/dialoguemanagerimp.hpp
#	apps/openmw/mwgui/container.cpp
#	apps/openmw/mwgui/windowmanagerimp.cpp
#	apps/openmw/mwscript/dialogueextensions.cpp
7 years ago
scrawl 842a42ee66 Fix non-top level Windows accepting key focus 7 years ago
scrawl 8c0790580a Add screen fading for exterior cell transitions 7 years ago
scrawl cd437f094d Fix exiting savegamedialog with 'esc' when no game is running 7 years ago
scrawl d94235e3a7 Update the saves list/preview image when character selection changes to make it more convenient to flip through characters with the keyboard 7 years ago
scrawl 12510efab7 Fade screen out during loading screen (when travelling) 7 years ago
scrawl a4737d8417 Use MyGUI frame events for ScreenFader 7 years ago
scrawl e4f0f7157a Fix pinned windows not being updated 7 years ago
scrawl 49a0922f1b Remove 'visibility mask' gui feature which did not end up being useful 7 years ago
scrawl 7c68ed04b2 Don't require modal windows to be removed in the same order they were added 7 years ago
scrawl b5c9977a7b Merge pull request #1489 from akortunov/guifixes
Use an "owned crosshair" feature for items in containers
7 years ago
David Cernat 13e7504348 [Documentation] Update information 7 years ago
Andrei Kortunov 1cb7ed5db1 Use owned tooltips for items in containers correctly 7 years ago
scrawl 433028e8d7 Fix GUI regressions 7 years ago
Nikolay Kasyanov a795aa7685 Merge pull request #1490 from nikolaykasyanov/ci-dependency-update
[macOS, CI] Update dependencies
7 years ago
Nikolay Kasyanov c598f1313c [macOS, CI] Update dependencies
The following changes are included:
- https://github.com/OpenMW/openmw-deps-mac/pull/37
- https://github.com/OpenMW/openmw-deps-mac/pull/38
7 years ago
Marc Zinnschlag dd17f70068 Merge remote-tracking branch 'aesylwinn/landrecords' 7 years ago
scrawl d7a5622485 Fix book window buttons overlap 7 years ago
Kyle Cooley 2f5449a68c Remove now unnecessary overrides. 7 years ago
Kyle Cooley 137ea872d3 Hide base land textures. 7 years ago
scrawl b24fd77ea2 Merge pull request #1488 from akortunov/equipfix
AI: Autoequip armor when bound armor spell expires
7 years ago
scrawl 302e3c8b3d Merge pull request #1486 from akortunov/pickpocketfix
Fix some issues with pickpocketing (bug #4131)
7 years ago
Andrei Kortunov 21b6bd176f AI: Autoequip armor when bound armor spell expires 7 years ago
Andrei Kortunov c5fcb9684e Improve owned crosshair feature behaviour 7 years ago
Andrei Kortunov b8fd530ee1 Do not speak with unconscious creatures 7 years ago
Andrei Kortunov f26206b630 Make unconscious actors do not speak and do not track targets 7 years ago
Andrei Kortunov 3ebb18ce18 Make unconscious actors do not report about crimes 7 years ago
Andrei Kortunov 34895157f9 Consider taking items from unconscious NPC as a theft 7 years ago
Andrei Kortunov 04452b0949 Use a pickpocket crime instead of theft when pickpocketing was failed 7 years ago
scrawl 3c62a8c5c2 Fix console selected object persisting on a new game 7 years ago
scrawl 097b9d90bc Fix travel service not showing 7 years ago
Kyle Cooley dfcbee3ab1 Ignore case when comparing textures, also add new textures to lookup map. 7 years ago
scrawl 77ddaa869b Merge pull request #1484 from drummyfish/master
fix rain ripple bug
7 years ago
scrawl 841990fcdb Merge pull request #1485 from akortunov/master
Fix a failed assert in the getCell() check during a new game start
7 years ago
Andrei Kortunov 03daf2b9e3 Fix a failed assert in the getCell() check during a new game start 7 years ago
Miloslav Číž 4999c667b6 fix rain ripple bug 7 years ago
scrawl 5b10e3128e Use first resolution in fullscreen if current is not supported (Fixes #4113) 7 years ago
scrawl 64e27c032b Merge pull request #1481 from scrawl/keyfocus
WindowManager overhaul & improved keyboard support
7 years ago
scrawl 05348ab7ed Merge pull request #1483 from drummyfish/master
water shader improvements plus rain ripple effect (#452)
7 years ago
Miloslav Číž 64793a55dc get rid of buggy shader trick 7 years ago
scrawl 7bb0a76df2 Fix tooltips showing when cursor isn't visible 7 years ago
Miloslav Číž c9c6326d87 fix non-refraction water rain ripples 7 years ago
Miloslav Číž 8416feaf5b link rain water ripple effect to actual rain 7 years ago
scrawl 14c9e858c8 Check to make sure button is enabled 7 years ago
scrawl 6ec66fa95f Restore keyfocus to goodbye when selecting a topic 7 years ago
David Cernat 44fb7518ee Merge pull request #300 from OpenMW/master
Add OpenMW commits up to 28 Sep 2017
7 years ago
scrawl e5d1fd022f Merge pull request #1479 from akortunov/physics
Make physics framerate configurable
7 years ago
scrawl 1ad6cf90c6 Merge pull request #1482 from akortunov/ownerfix
Inherit owner, if an item is in container (regression #4128)
7 years ago
scrawl 0ae009eb21 Hide message box before deleting it
Fixes a crash when closing the game window during the 'plugin mismatch' dialog. Modal windows have to be hidden before they are deleted to prevent a dangling pointer in WindowManager.
7 years ago
scrawl d53e7f8a3c Remove redundant code
Already worked around in WindowBase::setVisible
7 years ago
scrawl 0deda69a27 Fix wrong skin for levelup attribute values 7 years ago
scrawl e9d81fdf5a Fix being able to escape interactive messageboxes 7 years ago
scrawl db650df416 Fix 'blocking' messageboxes not handling key focus properly 7 years ago
scrawl a0f5e32113 Fix 'new game' from the main menu not removing menu afterwards 7 years ago
scrawl fb8306b61f Disable keyfocus for world map button
Fixes 'Tab' no longer working as a keybinding for closing the inventory window.
7 years ago
scrawl 0240a6c38b Fix controls window regression 7 years ago
Miloslav Číž 4a332a1807 improve rain ripples 7 years ago
David Cernat b1aacd5028 Merge pull request #299 from OpenMW/master
Add OpenMW commits up to 27 Sep 2017
7 years ago
Andrei Kortunov 668a947210 Inherit owner, if an item is in container (regression #4128) 7 years ago
Miloslav Číž 5c50506c83 water shader refactor plus basic rain ripples 7 years ago
scrawl f2146a2dc0 Update AUTHORS.md 7 years ago
scrawl 2d873a13ac Merge pull request #1469 from drummyfish/master
water shader improvements (partially fixes #3365)
7 years ago
scrawl 0ee57effcc Make 'Delete game' button not accept keyfocus, to prevent accidents 7 years ago
scrawl c7a82704c6 Fix key focus resets in SaveGameDialog 7 years ago
scrawl 74e806d974 Additionally use movement keys (default WASD) to navigate GUI buttons 7 years ago
scrawl 3d2ad2d339 Include cleanup 7 years ago
scrawl 87311d86b5 Fix what looks like a copy/paste error 7 years ago
scrawl 879da9c69a Add key focus for some more button skins 7 years ago
scrawl 7a3fbfb34a Slightly improve journal window keyboard navigation 7 years ago
scrawl 05814c0929 Add key focus handling for WaitDialog
Default is 'until healed'. Up/Down arrows change the hour slider and implicitely change the button to 'Wait'.
7 years ago
scrawl 8964fc93d6 Fix dialogue window not being exited properly 7 years ago
scrawl 7a64098da3 Avoid rebuilding the dialogue topics pane unnecessarily
Also retaining key focus.
7 years ago
scrawl 44720bf41a Allow MWList items to retain key focus 7 years ago
scrawl 22929e53fa Don't ignore my own advice
Can't wait until MyGUI 3.2.2 is a build dependency, then we can use key focus events to handle the SDL text input.
7 years ago
scrawl 1714271a76 Improve KeyboardNavigation to better handle modal windows
It's no longer possible to cycle to widgets that aren't part of the current modal window.

The window manager will remember the focused widget of a modal window on a limited basis (it'll be discarded when a different modal window opens).
7 years ago
scrawl 41fe16013b Select first widget if we can't find the current widget 7 years ago
scrawl 475ac46f3e Workaround keyfocus issues in current versions of MyGUI 7 years ago
scrawl b9341925f2 Set AutoSizedEditBox as Static by default
Would look very odd anyway to use it for editable text, with the widget resizing as you type.
7 years ago
scrawl 010a7ea5b3 Fix tooltip widgets being set to accept key focus 7 years ago
scrawl a0ee1c5630 Fix order of buttons in book window layout for key cycling 7 years ago
scrawl 2514cc5cc8 Workaround key focus being reset in BookWindow when next/prev are hidden 7 years ago
scrawl c88c535e0e Fix HBox/VBox not using Client widget with MyGUI <= 3.2.2 7 years ago
scrawl fce9a14986 Hide the mouse cursor until it's used 7 years ago
scrawl 09e93319f5 Restrict the 'fake mouse movement' workaround to where it's actually required (Fixes #3978) 7 years ago
scrawl 60604ef5e8 Update AUTHORS.md 7 years ago
David Cernat ddf0dfed55 Merge pull request #298 from OpenMW/master
Add OpenMW commits up to 26 Sep 2017
7 years ago
Andrei Kortunov 62177ebb30 Move physics framerate from setting to environment variable 7 years ago
scrawl 9b91ea5d34 Exit drag-and-drop if dragged item is deleted (Fixes #3097) 7 years ago
Andrei Kortunov 6062cd4b9c Make physics framerate configurable 7 years ago
Miloslav Číž cde2c13900 make water depth independent of view frustum 7 years ago
scrawl be7bdec2ed Merge pull request #1471 from crussell187/nif_stream_optimization
first pass on optimization of nif parsing functions from the file stream
7 years ago
scrawl 2ce79e07a4 Refactor dialogue GUI to talk to the dialogue manager, not the other way around and not both ways.
- Fix memory leaks in DialogueWindow
- Fix Link objects being deleted from their own event handler
7 years ago
scrawl 476bec41c5 Remove redundant code 7 years ago
scrawl c5613e384e Remove duplicate disposition code 7 years ago
scrawl e8c6a3b225 Fix crash in dialogue filter if local variables are not configured
This could happen e.g. by 'some_npc_in_remote_cell->forcegreeting'
7 years ago
scrawl 36c192a1dd Undo the console portion of 84657271c7 because it results in the console forgetting its object on opening 7 years ago
scrawl 717e68fab2 Remove redundant resetHistory argument 7 years ago
scrawl e14573fa8c Add missing null check 7 years ago
scrawl 19e07fad30 Remove redundant Services enum 7 years ago
scrawl f8ffd85146 Topic passed to keywordSelected() no longer has to be lower case
Remove redundant mDialogueMap
7 years ago
scrawl b7752ec52d Make TradeWindow not depend on DialogueWindow 7 years ago
scrawl 82a211ba03 Fix duplicate code 7 years ago
scrawl e4c9d84666 Disable NeedKey for ScrollView skins
The widget is set to accept key focus by default for no reason I can tell. Fix in MyGUI TBD
7 years ago
scrawl d78e822833 Add 'delay' argument for screen fading operations 7 years ago
scrawl c035548f37 Make Tab work if selected widget is marked as not needing keyfocus 7 years ago
scrawl ad8d0c5302 Use keypad to control the camera 7 years ago
scrawl 94b538ac82 Fix crash due to not calling WindowModal::onClose() 7 years ago
scrawl ca3b08b852 Make Activate key accept GUI buttons 7 years ago
scrawl 76ddf8d794 Support Up/DownArrow keys to change NumericEditBox value 7 years ago
scrawl 67dc4e019a Make Enter on trade window price attempt the trade 7 years ago
scrawl 8ae7e4c958 Make Enter on a name edit accept the dialog 7 years ago
scrawl 843106fc61 Handle the wait progress bar as part of the GUI mode 7 years ago
scrawl 9ed1b16553 Extend code that detects whether a key was consumed by the GUI (Fixes #4016) 7 years ago
scrawl 2c4b0cc408 Hide sneak indicator by default 7 years ago
scrawl 0e57f1317b Remove redundant setVisible(false) 7 years ago
scrawl 331192f2d6 Improve keyboard navigation of book/scroll windows 7 years ago
scrawl d58ff4a736 Remove obsolete Container GUI keyboard handling 7 years ago
scrawl c0d8bef82f Call changeInputMode() from updateVisible() 7 years ago
scrawl 222defc6d8 Extend HUD::clear() 7 years ago
scrawl f6c227b966 Reset screen faders in clear()
Fixes a black screen when loading a game while waiting/resting.
7 years ago
scrawl d10985e481 Remove unneeded window pointers 7 years ago
scrawl f67dbc8aa0 Remove redundant update function 7 years ago
scrawl e7d2a8a4dc Call clear() for every window 7 years ago
scrawl c6c01870ec Call onResChange for every window 7 years ago
scrawl 2b03bc0c56 Call WindowBase::onFrame() for every active window 7 years ago
scrawl ba7ae2663f Use a generic container to delete windows 7 years ago
scrawl 32f9c8058a Remove redundant RestBed gui mode 7 years ago
scrawl 9ead331741 Fix pinned windows showing in other GUI modes 7 years ago
scrawl 65a707348c Make Tab select the first widget if none is selected 7 years ago
scrawl 5f440a29bd Remember key focus per GUI mode
Among other things, this will remember the focused button in the container window, allowing quick looting of multiple containers.
7 years ago
scrawl 35110fb2f8 Remove unused and slightly broken custom button titles in ConfirmationDialog 7 years ago
scrawl ad4b91131f toggleGui renamed to toggleHud, remove unused variable 7 years ago
scrawl be19f51013 Adjust some more windows to be keyboard friendlier 7 years ago
scrawl 4fff2e2e34 Refactor exitCurrentGuiMode 7 years ago
scrawl 20766fb508 Associate open/close sounds with the GUI mode 7 years ago
scrawl 531e7ac586 Allow drag-and-drop to be cancelled (Esc or Inventory key) 7 years ago
scrawl 269094ba8d Restore the previous key focus widget when exiting modal dialog 7 years ago
scrawl bbafe1e456 Remove redundant player cell variable 7 years ago
scrawl 84657271c7 Improve WindowManager API with a generic way of passing a Ptr to the opened GUI window 7 years ago
scrawl 3820416277 Refactor the unholy mess that is WindowManager::updateVisible
GUI modes are now defined in a general and extensible way. The next commits are going to take advantage of this.
7 years ago
scrawl 622e3ebd60 Remove excessive padding in some GUI layouts 7 years ago
scrawl 01391b7eed Rename WindowBase's open/close to onOpen/onClose 7 years ago
scrawl 5482ad0482 Fix tab completion in console to not cycle key focus 7 years ago
scrawl c203a0774a Adjust some layouts to take better advantage of keyboard navigation 7 years ago
scrawl 1ad14b232f Adjust ImageButton to accept key focus and use the 'highlighted' texture 7 years ago
scrawl c11fe6788f Add basic keyboard navigation for the GUI
(Shift)Tab cycles, arrow keys move to the next button in that direction, Enter/Space accepts.

Note: Unless MyGUI is hacked to bits, clicking on an empty space will annoyingly reset the key focus. Not sure how to deal with that yet.

The visual highlight for selected buttons requires MyGUI commit 632d007429d0bf0c7d7f6c5db4a08353a63dd839 or later to appear (to be released in 3.2.3).
7 years ago
scrawl e7ad012977 Pass repeat key events to the GUI
For example, one can scroll to the last element in a list by holding down the 'Down Arrow' key.
7 years ago
scrawl b22fedf4ae Check 'sYes' in addition to 'sOk' for message box's default keyfocus 7 years ago
scrawl 5d1392b452 Merge pull request #1476 from akortunov/wanderfix
Fix regressions in PR1474
7 years ago
Andrei Kortunov 7d703a13a3 Fix a crash in the World::isUnderwater() if the cell is empty 7 years ago
Andrei Kortunov 9b04a7c1e6 Fix idle animations playing 7 years ago
scrawl 2a14af2e27 Merge pull request #1474 from akortunov/swimanimations
Implement missing swim animations
7 years ago
scrawl 22222f07ae Merge pull request #1475 from akortunov/wanderfix
AiWander: reset spawn position, if an actor was moved to another cell
7 years ago
scrawl 2494c22d66 Merge pull request #1470 from MiroslavR/convertmprj
ESS-Importer: Convert magic projectiles
7 years ago
Andrei Kortunov 91adfc9fc0 AiWander: reset spawn position, if an actor was moved to another cell (bug #4010) 7 years ago
MiroslavR b5f5268ff3 Clean up faraway projectiles 7 years ago
825de71b29 removed an iostream include used for debug prints from nifstream.hpp 7 years ago
Andrei Kortunov a57f6ac2af Fix a typo in attack animation name 7 years ago
Kyle Cooley 1fe1ec63c4 Fix Qt4 build 7 years ago
Kyle Cooley 3981f79d38 Change flag for base land textures 7 years ago
Kyle Cooley 054e6a780e Use map for texture lookup. 7 years ago
Kyle Cooley 4921e7f5c1 Get rid of reinterpret cast. 7 years ago
30a213a9b3 updates for nifstream optimization including fixing the non-x86 path for little endian reads 7 years ago
Miloslav Číž 9dececcbd2 rename a constant in water shader 7 years ago
Miloslav Číž 28f58d5a32 add deleted letter in macro 7 years ago
Miloslav Číž f274bc84cc fix depth computation in water shader 7 years ago
David Cernat 73e7aa838d Merge pull request #296 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/mwgui/container.cpp
7 years ago
Andrei Kortunov bcad431cc5 Implement SwimTurnLeft/Right animations 7 years ago
Andrei Kortunov 1c6cfad3cc Implement SwimHit animation 7 years ago
Andrei Kortunov 3eb1308c0d Implement SwimKnockdown/out animations 7 years ago
Andrei Kortunov 6260bb1366 Implement SwimAttack1-3 and SwimDeathKnockDown/Out animations 7 years ago
scrawl 0e648222b8 Merge pull request #1446 from akortunov/takeallfix
Do not allow to equip a replacement, when take all items from a dead corpse
7 years ago
Miloslav Číž 8df79625e8 fix water shader 7 years ago
Andrei Kortunov 4580024d76 Unequip all items from dead corpse when take all items (bug #4095) 7 years ago
8834066dea make streaming to a type array in nif a direct copy from the file into the vector 7 years ago
090a8408b8 made nif basic type read optimizations more portable 7 years ago
Miloslav Číž 658fa0fdae fix typo 7 years ago
Miloslav Číž c43baf6e94 remove commented code 7 years ago
Miloslav Číž 16d9773c6c fix water shader artifacts at shores 7 years ago
scrawl 75c047a6e0 Merge pull request #1472 from akortunov/equipfix
Do not play draw weapon animation when equip a new weapon
7 years ago
Andrei Kortunov 5da532a36c Do not play draw weapon animation when equip a new weapon (bug #4056) 7 years ago
c72aa19d6d first pass on optimization of nif parsing functions from the file stream 7 years ago
scrawl f004622530 Fix global map arrow/button not showing for a split second when the window is opened for the first time 7 years ago
scrawl aaa727757d Don't use MW_Dialog skin with plain Widgets
After MyGUI commit cfdaf5f , the 'Client' area will be used for every type of widget, whereas previously it would only be used for some widgets like 'Window'. Use 'Window' widget where the client was always used.

This fixes a wrong margin when built with cfdaf5f or later.
7 years ago
scrawl 58f9688433 Use client coordinates in HBox/VBox 7 years ago
scrawl fe6f9ffff4 Fix skins incorrectly named 'Client' to avoid a collision with new MyGUI feature cfdaf5f 7 years ago
scrawl fa364726b8 Merge pull request #1468 from akortunov/itemsorting
Improve item sorting in inventory and containers
7 years ago
scrawl 7dec773ea9 Fix global map arrow/button not showing for a split second when the window is opened for the first time 7 years ago
scrawl d07fe91cfe Don't use MW_Dialog skin with plain Widgets
After MyGUI commit cfdaf5f , the 'Client' area will be used for every type of widget, whereas previously it would only be used for some widgets like 'Window'. Use 'Window' widget where the client was always used.

This fixes a wrong margin when built with cfdaf5f or later.
7 years ago
scrawl fb975d02db Use client coordinates in HBox/VBox 7 years ago
scrawl 186cc1e370 Fix skins incorrectly named 'Client' to avoid a collision with new MyGUI feature cfdaf5f 7 years ago
MiroslavR f15de6d3ca ESS-Importer: Convert magic projectiles (Closes #2320) 7 years ago
Andrei Kortunov 771f58ce58 Remove unwanted warnings 7 years ago
Miloslav Číž 566fa6c118 Merge branch 'master' of git://github.com/OpenMW/openmw 7 years ago
Miloslav Číž 2346c5338e increase water fudge to get rid of artifacts 7 years ago
scrawl 5ebb43a422 Merge pull request #1467 from akortunov/guifixes
Restack soulgems when use SoulTrap
7 years ago
David Cernat 7f0ea7d01f Merge pull request #294 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/mwmechanics/character.cpp
7 years ago
Andrei Kortunov 9d826b2deb Improve item sorting in inventory and containers 7 years ago
Andrei Kortunov 9342a0254f Restack soulgems when use SoulTrap 7 years ago
scrawl 26e3de1025 Merge pull request #1464 from akortunov/guifixes
Fixed padding of MessageBox buttons
7 years ago
scrawl 5688257837 Merge pull request #1462 from kcat/master
Minor animation fixes
7 years ago
scrawl ed5b6320f3 Merge pull request #1463 from akortunov/getdetected
Allow to use GetDetected without a reference
7 years ago
David Cernat 4d4eb1bb9f Merge pull request #292 from OpenMW/master
Add OpenMW commits up to 18 Sep 2017
7 years ago
Andrei Kortunov 2806a35a61 Fixed padding of MessageBox buttons 7 years ago
Andrei Kortunov 65d8e2ff5d Allow to use GetDetected without a reference (bug #3110) 7 years ago
Chris Robinson 021627bdf8 Mark some functions with override
Fixes some Clang warnings about overriding a virtual function without the
override keyword.
7 years ago
Chris Robinson 917a3b5dff Avoid creating temp strings when looking for an animation stop key 7 years ago
Chris Robinson b770c1493f Don't spam about missing animations 7 years ago
Chris Robinson 074be7d7c6 Remove a function from the sound manager interface 7 years ago
Marc Zinnschlag e6caacec04 Merge remote-tracking branch 'plutonicoverkill/pref-pane-width' 7 years ago
Kyle Cooley 50d9d9f78f Get rid of some templates, exceptions instead of assert, and other small changes. 7 years ago
scrawl d294d7e284 Fix possible fall damage when switching from falling to flying 7 years ago
scrawl 00034192dc Fix player Ptr in RenderingManager not being updated on cell changes
Noticed that 'setpos' wasn't working in the console with the player selected.
7 years ago
scrawl fcb815f2c7 Move fall height reset into PhysicsSystem (Fixes #4049)
To avoid using onGround before it's actually set.
7 years ago
scrawl a560841705 Merge pull request #1460 from AnyOldName3/invalid-death-count-cleaning
Check death counts are for valid actors before loading them
7 years ago
scrawl 242d085da0 Merge pull request #1455 from kcat/master
Print sound init info and preload sound buffer info
7 years ago
scrawl f29d8f69d7 Merge pull request #1456 from loriel2/Docs-CS-manual-tour-chest
Docs cs manual tour chest
7 years ago
scrawl c39c29722b Merge pull request #1459 from akortunov/cyclingfix
Cycle only through weapons which player can equip
7 years ago
scrawl 054380e46f Merge pull request #1458 from akortunov/precisionfix
Use default 0 precision in the float formatting (bug #4096)
7 years ago
scrawl 277b57b26f Merge pull request #1457 from akortunov/guifixes
[Feedback needed] Add scrollbar to a birth effect lists (bug #4105)
7 years ago
AnyOldName3 0be7e2a5a5 Fix really obvious flaw with ignored records not being skipped that I missed 7 years ago
Andrei Kortunov 10a0136b4a Cycle only through weapons which can be equipped by player (bug #4104) 7 years ago
AnyOldName3 5a5cb1a160 Check death counts are for valid actors before loading them 7 years ago
Andrei Kortunov 4bb349a525 Use default 0 precision in the float formatting (bug #4096) 7 years ago
Andrei Kortunov 3fb3c4c20f Add scrollbar to a birth effect lists (bug #4105) 7 years ago
PlutonicOverkill 5e60fb7c10 Fix preferences pane width 7 years ago
David Cernat 960b91a53c Merge pull request #290 from OpenMW/master
Add OpenMW commits up to 17 Sep 2017
7 years ago
David Walley 6b56f25f9e Update tour.rst 7 years ago
David Walley 19d034f370 Docs CS-Manual - tour - add ring to chest
Extend the ring tutorial in the CS-Manual to put the ring in a chest.

Images omitted pending decisions on style and where to store them
7 years ago
Chris Robinson 41bb35655b Avoid an extra call to get the buffer size 7 years ago
Chris Robinson 5c53ee42a1 Prepare all Sound_Buffers when retrieving the first one 7 years ago
Chris Robinson 4b448c74d2 Use range-for loops instead of for_each 7 years ago
Chris Robinson 1e729e8da9 Avoid more explicit loops 7 years ago
Chris Robinson 9dbb713b7c Print a bit more information for sound initialization 7 years ago
Chris Robinson acd6d9cd72 Try opening the default device fallback in OpenAL_Output 7 years ago
scrawl f594eda574 Reset attackStrength when starting a new attack (Fixes #3935) 7 years ago
David Walley 2d712b5288 Merge pull request #2 from OpenMW/master
Update
7 years ago
Bret Curtis f24b807edc Merge pull request #1454 from loriel2/master
Docs - Reference Modding - Minor typoes
7 years ago
scrawl 5dd2e871c8 Merge pull request #1450 from kcat/master
Sound improvements
7 years ago
David Walley f1751b7f50 Merge pull request #1 from loriel2/ref_mod_diff_typoes
Docs - Reference modding - minor typoes
7 years ago
David Walley d2b5f7dea5 Update differences.rst 7 years ago
scrawl 340586bfea Merge pull request #1451 from loriel2/ring_tour
CS manual - extend tutorial tour to put ring into two npcs in the game
7 years ago
scrawl 820e0e9195 Merge pull request #1453 from MiroslavR/convertproj
ESS-Importer: Convert ballistic projectiles
7 years ago
scrawl a8c287b692 Merge pull request #1447 from akortunov/stancechangefixes
Clear player fields upon reload (bug #2639)
7 years ago
Andrei Kortunov 44738e1141 Clear player fields upon reload (bug #2639) 7 years ago
Kyle Cooley 2abf7f1752 Remove unnecessary cache dump 7 years ago
Chris Robinson d68e1581ee Use an std::array for the OpenAL stream buffers 7 years ago
Chris Robinson 780e82480d Make the PlayMode and PlayType enums scoped
Also shorten them by putting them in the MWSound namespace
7 years ago
Chris Robinson 0c1ad7c74e Replace a few more explicit loops 7 years ago
David Cernat c98e6dc833 Merge pull request #288 from OpenMW/master
Add OpenMW commits up to 14 Sep 2017
7 years ago
Chris Robinson 1e123a22e1 Avoid some explicit loops 7 years ago
Chris Robinson 3757571d46 Set HRTF when initializing the device 7 years ago
Chris Robinson c17edfd547 Don't be so throw-happy in the sound manager 7 years ago
Chris Robinson abe80f5868 Move the soundlist when updating a Ptr instead of copying 7 years ago
Chris Robinson 605c937572 Ensure 3D sources are spatialized
Standard OpenAL does not spatialize non-mono sounds, although the game has some
stereo sounds meant to play in 3D. The desired behavior can be achieved with
the AL_SOFT_source_spatialize extension.
7 years ago
Chris Robinson 6f57233ba1 Avoid copying the same Ptr with each iteration 7 years ago
Chris Robinson edfba68eb5 Apply reverb and a low-pass filter when underwater
This replaces the pitch-shift effect when available.
7 years ago
Chris Robinson 27eeaf90d0 Use unordered_map for the music playlist and sound buffer caches 7 years ago
Chris Robinson ec01b89e59 Increase the default buffer cache sizes 7 years ago
Chris Robinson 033303b911 Properly update the near water sound volume 7 years ago
Chris Robinson 0b720cd90c Set the appropriate meter/unit scale for sound 7 years ago
Chris Robinson c790fedd3f Load an effect and filter for underwater 7 years ago
Chris Robinson 3d37cb3cf6 Load EFX functions when available 7 years ago
Chris Robinson c5a3fb7ccd Simplify checking for near water sfx change
Rather than checking every frame you're near the water, only check when the
current cell changed (the sfx will only change when moving between interior and
exterior). It also doesn't need to look through all playing sounds, as it's a
local one not attached to a Ptr.
7 years ago
Chris Robinson 617c05f557 Make Sound and Stream sibling types
To avoid being able to accidentally cast a Stream* to a Sound*, or vice-versa.
7 years ago
Chris Robinson 9e45f6d05f Make a note that stopTrack needs to be called for a stopping track 7 years ago
Chris Robinson 9e7a49f66e Include alext.h to get OpenAL extension definitions 7 years ago
Chris Robinson 1fe60dd8e2 Replace some shared_ptrs with pointers to deque entries 7 years ago
MiroslavR a66d310a1d ESS-Importer: Fix uninitialized paid crime ID 7 years ago
MiroslavR 6e869c3123 ESS-Importer: Convert ballistic projectiles (Feature #2320) 7 years ago
Bret Curtis e517ad3f7b add ktx support for splashscreens 7 years ago
scrawl 5817674651 Merge pull request #1452 from psi29a/loading_screens
add support for png and dds splashscreens
7 years ago
Stanislav Zhukov f703dbd1df Merge pull request #283 from Johnnynator/tes3mp 7 years ago
Bret Curtis dff0a766a8 adding 3 more extensions 7 years ago
Bret Curtis b26887ef9b add support for png and dds splashscreens to begin with. 7 years ago
David Walley b9de4b1eac Update tour.rst 7 years ago
David Walley 7e83caab11 Manual modding - extend mod installation instructions (#1448)
Add section on .bsa files
Extend plugins to include .esm files
Fix typo propper->proper.
7 years ago
David Cernat bd541b1e5b Merge pull request #287 from OpenMW/master while resolving conflicts
# Conflicts:
#	CMakeLists.txt
#	apps/openmw/CMakeLists.txt
7 years ago
scrawl bd667c3847 Merge pull request #1435 from AnyOldName3/cmake-vs-debugging-dir
If CMake supports it, sets the debugger working directory for Visual …
7 years ago
scrawl 00ae9a01a1 Merge pull request #1445 from akortunov/guifixes
Allow to add levelup a description for levels > 20
7 years ago
scrawl 407640322d Merge pull request #1439 from akortunov/resistfix
Take in account elemental shields for GetResist and SetResist script commands
7 years ago
Marc Zinnschlag 5904e5a267 updated credits file 7 years ago
Marc Zinnschlag 9a8a4c744f Merge remote-tracking branch 'capostrophic/controlplus' 7 years ago
Andrei Kortunov 7760e4514c Allow to add levelup a description for levels > 20 7 years ago
scrawl 7688696765 Merge pull request #1437 from Capostrophic/nodemapfix
Use constant nodeMap during part updating in creature animation
7 years ago
Andrei Kortunov c6fd75bf42 Take in account elemental shields for GetResist and SetResist script commands (bug #4093) 7 years ago
Capostrophic 97ff24b8d6 Change ctl to ctrl in OpenMW-CS shortcut manager 7 years ago
AnyOldName3 afbdc27a34 Move calls to cmake_minimum_required as early in the CMake process as possible. 7 years ago
scrawl 618ec6dcdd Merge pull request #1440 from akortunov/guardfix
Allow guards to attack fighting creatures only in fAlarmRadius range
7 years ago
scrawl dcb2e20a55 Merge pull request #1436 from MiroslavR/missing-bookart
Log a warning in case of missing bookart instead of showing a pink rectangle
7 years ago
Andrei Kortunov 661232222f Allow guards to attack fighting creatures only in fAlarmRadius range 7 years ago
Kyle Cooley 09e645a0e0 Fix careless mistake. 7 years ago
AnyOldName3 de14e43680 Seemingly fix everything by setting policies that were unset upon entering the macro 7 years ago
Capostrophic 9503d61866 Use const nodeMap in creature animation 7 years ago
Kyle Cooley 25d4a0370f Changes to land data access in tables, also update Land once per frame in scene view. 7 years ago
AnyOldName3 33c77d7a2a Try using cmake_parse_arguments to make the macro work 7 years ago
Kyle Cooley d030b595f8 Fix potential segfault, cleanup, get rid of warnings. 7 years ago
krizd c9f099ce07 Change CMake version check to include 3.8 7 years ago
Kyle Cooley 72cb405de2 Some bug fixes, changes to land load code. 7 years ago
AnyOldName3 a9b95596bc Add a missed trailing new line. 7 years ago
AnyOldName3 8c74f16247 Restore trailing new lines to shrink PR 7 years ago
AnyOldName3 5ce34f1cbf Move new behaviour into macro to reduce code duplication 7 years ago
MiroslavR 1e585ac71a Log a warning in case of missing bookart instead of showing a pink rectangle (Fixes #3826) 7 years ago
scrawl 335ecd1162 Merge pull request #1434 from akortunov/guifixes
Update a disposition bar when a dialogue widget is disabled, but visible
7 years ago
Kyle Cooley 2eacc2f093 Changes to land creation, add ability to specifically clear terrain cache 7 years ago
AnyOldName3 3c0ec0d6d0 If CMake supports it, sets the debugger working directory for Visual Studio 7 years ago
Andrei Kortunov ac2f20f983 Update a disposition bar when a dialogue widget is disabled, but visible 7 years ago
Kyle Cooley ab607f3028 Tweaks to land loading, land cloning, terrain signals, placeholder land update handling 7 years ago
scrawl 8f1c8759e4 Merge pull request #1432 from akortunov/alchemyfix
Update alchemy effects after every created potion (#4079)
7 years ago
scrawl a7cecd491c Merge pull request #1433 from akortunov/factionfix
Use base skill value when calculating rank requirements
7 years ago
Andrei Kortunov dc0313a36f Use base skill value when calculating rank requirements 7 years ago
Andrei Kortunov 538498230b Declare mClient variable 7 years ago
Andrei Kortunov 7559d25317 Update alchemy effects after every created potion (#4079) 7 years ago
Kyle Cooley 99e90ef808 Cleanup. Also modify ltex index generation. 7 years ago
Kyle Cooley 97d0fd756a LTEX importing 7 years ago
scrawl dca31b7ffa Remove redundant _boundingBoxComputed which no longer exists in osg master (Fixes #4075) 7 years ago
Kyle Cooley 5c3e90da88 Fix includes 7 years ago
Kyle Cooley d3014cf394 Temporary fix for adding new lands, cloned lands will still reference old data though 7 years ago
David Cernat b94c0a9991 [Client] Don't send Attribute & Skill packets as werewolf, part 2 7 years ago
David Cernat b64f379949 Merge pull request #286 from OpenMW/master while resolving conflicts
# Conflicts:
#	CMakeLists.txt
#	apps/openmw/mwmechanics/actors.hpp
7 years ago
Stanislav Zhukov 3ba6a0e000 Merge pull request #284 from Johnnynator/desktop
[General] Add .desktop file for Server Browser
7 years ago
David Cernat 8c9d6a0160 [Client] Ensure that LocalPlayer's isWerewolf starts out false 7 years ago
David Cernat ccb15cc09e [Client] When players die, make guards willing to arrest them again 7 years ago
Kyle Cooley 90c485104a Land creator 7 years ago
Kyle Cooley 7cc95a11a4 Add more land table columns 7 years ago
Kyle Cooley 30ba1d4c25 Move touch command to creator, to allow customization and not break abstraction 7 years ago
Koncord f5e23d5fc6 [General] Empty strings should be sent too 7 years ago
scrawl 84bbb83109 Merge pull request #1431 from Thunderforge/adding-note-about-reflect-actors
Documentation: Adding that Reflect Actors can be toggled in the video panel
7 years ago
scrawl 2e58024f1c Fix intersections with Rig/MorphGeometry, was caused by an issue in the LineSegmentIntersector not respecting the cullingActive flag of a drawable. 7 years ago
Koncord d904628103 [General] Avoid limitation of 512 symbols in RakString Ctor 7 years ago
Thunderforge 10fff499a2 Adding that Reflect Actors can be toggled in the video panel 7 years ago
scrawl 7441f80e4c Merge pull request #1430 from Thunderforge/Bug-#4027-fix-OpenMW-CS-name
Fix OpenMW-CS internal name
7 years ago
Thunderforge e0ffc94f3e Fix OpenMW-CS internal name 7 years ago
John 0060e457a6 [General] Add .desktop file for Server Browser 7 years ago
Koncord 74c9a26d16 [Server] Fix "wrong packet with id: 14" 7 years ago
scrawl 5e790b567e Fix node path issue
Needs to be set so that the 'cullingActive' flag of the node path's end can be checked
7 years ago
scrawl 4bef8260ab Add const qualifiers 7 years ago
scrawl 5d524a6a10 Add custom version of MorphGeometry replacing osgAnimation
Double buffering, custom bounding box and the update in the cull visitor (instead of update) are now all handled internally rather than needing hacks and/or callbacks.
7 years ago
scrawl f1ebb129c1 Fix ShaderVisitor to deal with the fact RigGeometry no longer derives from Geometry 7 years ago
scrawl 4c5992a0d5 Warn if removing a node fails 7 years ago
scrawl 209e139aa8 Move double buffering implementation inside RigGeometry
The double buffering is an implementation detail so it should be handled as such, rather than mandating the scene graph to be structured in a certain way.

Override accept(NodeVisitor&) instead of using callbacks.
7 years ago
scrawl 132ac6001b Fix bug of Animation::mSkeleton not being assigned
This bug resulted in deactivating a Skeleton not working properly for creatures (that are out of processing range), therefore reduced performance.
7 years ago
scrawl 7a79ebb713 Merge pull request #1428 from akortunov/stancechangefixes
[Feedback needed] Stance switching changes, part II
7 years ago
John 51c7efa3f3 [CMake] CMake fix install 7 years ago
Andrei Kortunov 7f5f5458d4 Reset player attack animation when unequip weapon or tool 7 years ago
Andrei Kortunov a5b01fefec Allow to interrupt an attack, if attack button is held 7 years ago
Andrei Kortunov 0d7279ea2a Fixes a regression with bound weapons equipping (bug #4050) 7 years ago
Kyle Cooley 1d480015b4 Add ability to touch records, LAND records in particular 7 years ago
Kyle Cooley 9e41f1340a Replace nonconst getId with setId, add template specialization and specialized derived classes for LandTexture 7 years ago
Kyle Cooley 5d14a2afcc Initial LTEX/LAND tables 7 years ago
scrawl a8005c33d9 Revert unintended change to mOnGround variable that was somehow introduced with 38a2de3c51 7 years ago
scrawl 45f7563a55 Revert "Revert "Check for a Geometry node when attaching bodyparts""
Issue with shaders has been fixed with b9931fb71c

This reverts commit a1e3fb7604.
7 years ago
scrawl b9931fb71c Set the shader on the node containing the StateSet 7 years ago
David Cernat da7253bb57 [Documentation] Update documentation for 0.6.1 7 years ago
David Cernat 08df8f8d83 [General] Update version to 0.6.1 7 years ago
David Cernat 2e8718a0e0 Merge pull request #282 from OpenMW/master
Add OpenMW commits up to 31 Aug 2017, part 2
7 years ago
David Cernat 3fc1bdecb3 [Client] Shorten player names to 31 characters after they are inputted 7 years ago
David Cernat ac3254d85f [General] Don't send PlayerAttribute and PlayerSkill packets as werewolf
This will prevent the server from overwriting a player's human form stats with their werewolf form stats.

Additionally, share PlayerShapeshift packets last when exchanging data with another player.
7 years ago
scrawl d749b7f2a7 Merge pull request #1426 from akortunov/multiplesoundfix
Allow to play only one copy of given sound at time (bug #3647)
7 years ago
David Cernat 93d1aa2e4a [Client] Comment out the broken sending of custom spells until 0.7.0 7 years ago
David Cernat e81dafb28a Merge pull request #281 from TES3MP/0.6.0
Add hotfix commits for 0.6.0 up to 31 Aug 2017
7 years ago
David Cernat 98a7769b91 Merge branch 'master' into 0.6.0 7 years ago
Andrei Kortunov 1aaa8a76c5 Allow to play only one copy of given sound at time (bug #3647) 7 years ago
David Cernat 4468e6ec4a Merge pull request #280 from OpenMW/master while resolving conflicts
# Conflicts:
#	.gitignore
#	apps/openmw/mwmechanics/actors.hpp
#	apps/openmw/mwmechanics/mechanicsmanagerimp.cpp
7 years ago
Koncord 54f5104345 [General] Escape format for strings 7 years ago
David Cernat 499c7db121 [Server] Initialize interiors correctly if exterior 0, 0 has been loaded 7 years ago
Andrei Kortunov 91dcd5bc6e Do not allow to unequip weapon from inventory during attack 7 years ago
Andrei Kortunov 6f22d819c5 Do not allow to switch weapon to probe or lockpick during attack 7 years ago
David Cernat cca4991e74 [Utils] Use consistent names for utility functions added by tes3mp 7 years ago
David Cernat cf4021a7b5 [Client] Only add valid quests to journal 7 years ago
David Cernat 134dd06d48 [Client] Only add valid inventory & equipment items to LocalPlayer
Also add related debug information.
7 years ago
David Cernat c3d1eada89 [Client] Only add spells to players that are ensured to exist 7 years ago
David Cernat f6d36d5d80 [Client] Ensure that objects searched for have a valid reference number 7 years ago
scrawl 8c6a8ca48d Respect the framelimit in all cases (Fixes #3531)
Affects loading screen, videos & modal dialogs. Also skips rendering if window is minimized.
7 years ago
scrawl dc53573de4 Merge pull request #1405 from akortunov/stancechangefixes
Do not allow player to change weapon/spell during attack or spellcast
7 years ago
scrawl a1e3fb7604 Revert "Check for a Geometry node when attaching bodyparts"
This reverts commit 3fc8634206.
7 years ago
David Walley 47d6c5091f OpenMW CS Manual - typo fixes etc (#1422)
* Update files-and-directories.rst
* OpenMW CS Manual - minor typo fixes
7 years ago
scrawl 43fda6cf07 Merge pull request #1423 from akortunov/spellpriority
Combat AI: use effective cast cost when rate enchanted weapon
7 years ago
scrawl 8a1e014bb8 Merge pull request #1424 from akortunov/guifixes
Display negative values on fatigue progress bars
7 years ago
David Cernat 833d2a5dbe Merge pull request #277 from TES3MP/0.6.0
Add hotfix commits for 0.6.0 up to 29 Aug 2017, part 1
7 years ago
David Cernat 92553b8e29 [Server] Log startup errors by not deleting logger too early 7 years ago
Andrei Kortunov 73d5efabee Display negative values on fatigue progress bar 7 years ago
scrawl 3fc8634206 Check for a Geometry node when attaching bodyparts (Fixes #3957) 7 years ago
Andrei Kortunov 8003dbee12 Combat AI: use effective cast cost when rate enchanted weapon 7 years ago
Andrei Kortunov fb45995a41 Do not allow player to change weapon/spell during attack or spellcasting (bug #2445) 7 years ago
scrawl bc82c6a35d Use white color if told to use nonexisting vertexcolors (Fixes #3833) 7 years ago
scrawl 5d2fe5e887 Implement lightmode/vertmode of NiVertexColorProperty 7 years ago
scrawl 4fba157d3b Implement releaseGLObjects for cached resources 7 years ago
Harry 86ae2ae395 Improved shuffle (#1412) 7 years ago
AnyOldName3 1578fcbec7 Escape content file names before sending them to the GUI 7 years ago
scrawl 20310cf5c6 Merge pull request #1421 from hristoast/normals-doc-update
Use "Remove Branch" instead of "Remove" in normals tutorial
7 years ago
Marc Zinnschlag 91f674bb6f Merge remote-tracking branch 'aesylwinn/master' 7 years ago
Hristos N. Triantafillou 663f3088d1
Use "Remove Branch" instead of "Remove" in normals tutorial
* Pherim over at nexusmods advised me that using "Remove" leaves stranded references at the end of the file, and that the proper way to fully remove the unwanted `NiTextureEffect` block is to use "Remove Branch".  This commit clarifies that in the normal map conversion tutorial.
7 years ago
Kyle Cooley a8576d78ad Change default topic info values 7 years ago
Kyle Cooley 42b948dffe Fix pathgrid segfault 7 years ago
Marc Zinnschlag f4110a72cc Merge remote-tracking branch 'aesylwinn/fixvideotable' 7 years ago
David Cernat 2597f018d2 Merge pull request #272 from TES3MP/0.6.0
Add hotfix commits for 0.6.0 up to 23 Aug 2017
7 years ago
David Cernat a883c8f8aa [Client] Prevent scripts from creating PlayerTopic packet spam 7 years ago
Kyle Cooley 157ecb166c Fix wrong folder name 7 years ago
David Cernat 8f543fb34e [Client] Use less exploitable way of disabling console
Previously, large framerate drops allowed players to open and use the console for short periods of time.
7 years ago
David Cernat 056d54e9f7 [Client] Only send ObjectScale packets for objects located in cells 7 years ago
scrawl 30665b743d Merge pull request #1416 from akortunov/guifixes
Display large  journal entries correctly
7 years ago
scrawl aa95cb3d91 Merge pull request #1406 from Aesylwinn/reloadassets
Editor: Asset Reloading
7 years ago
scrawl 13ccc73457 Merge pull request #1413 from akortunov/spellpriority
Combat AI: allow only one summoned creature at time
7 years ago
Andrei Kortunov 0177fe6602 Display large entries in journal correctly 7 years ago
Kyle Cooley d3d04171f9 Fix seg fault, undo changes BsaArchive 7 years ago
Andrei Kortunov e799cbdb51 Combat AI: allow only one summoned creature at time 7 years ago
Kyle Cooley 8c4b12a603 VFS changes, one VFS and resource system per document.
Added ability to reset a VFS::Manager.
Removed ability to rebuild the index for a VFS::Manager.
Moved VFS creation to CSM::Data.
7 years ago
Kyle Cooley 979b0d7211 Code cleanup and more cache clearing 7 years ago
Kyle Cooley 679a284735 Use scoped lock instead of directly locking/unlocking mutex 7 years ago
Kyle Cooley 3b9326d238 Clear terrain cache and reload terrain 7 years ago
Kyle Cooley d4a722067d Reload water 7 years ago
Kyle Cooley b62cb0e2a4 Clear out GPU texture/stateset cache 7 years ago
Kyle Cooley 7914fd5c9c Re-index BSAs 7 years ago
Kyle Cooley d7744e8b16 A bit of cleanup 7 years ago
scrawl c52a579410 Merge pull request #1409 from akortunov/guifixes
Minor GUI layout fixes
7 years ago
scrawl 2c11ed2454 Merge pull request #1411 from OpenMW/revert-1401-master
Reverts OpenMW/openmw#1401
7 years ago
scrawl f0dea8b8e6 Revert "Implement a Fisher-Yates shuffle on background music" 7 years ago
Andrei Kortunov 6ef5d1408f Disabled transparency for description edit fields 7 years ago
Andrei Kortunov 765f982123 Removed cursor from Favorite Attributes label 7 years ago
David Cernat ac27ca663b [Client] Don't send ObjectState packets for items in containers 7 years ago
Kyle Cooley 5950b26912 Update scene assets 7 years ago
scrawl dbb8a5c959 Merge pull request #1401 from h313/master
Implement a Fisher-Yates shuffle on background music
7 years ago
scrawl d200287b4a Merge pull request #1403 from akortunov/guifixes
Get only text from input fields (alternative implementation)
7 years ago
scrawl dc8b35a3f7 Merge pull request #1407 from AnyOldName3/editorconfig
Add an EditorConfig file to force compatible editors to use the correct indentation style
7 years ago
scrawl 0ae77ed427 Merge pull request #1408 from AnyOldName3/more-gitignore
Add VS2017 aps files to gitignore
7 years ago
Kyle Cooley 742bd00ec6 Clear cached resources 7 years ago
Harry 2a85c5f011 Implement a Fisher-Yates shuffle on background music
This fixes sometimes getting repetitive background music
7 years ago
AnyOldName3 91597af051 Add VS2017 aps files to gitignore 7 years ago
AnyOldName3 f3361ed085 Add an EditorConfig file 7 years ago
Andrei Kortunov 65d05ee1cd Get only text from clipboard (bug #4025) 7 years ago
Andrei Kortunov e0bb9c089b Revert commit 67d59bead5 (a better
implementation found)
7 years ago
Kyle Cooley d31ed83b54 Preliminary asset reloading 7 years ago
scrawl 2611377081 Merge pull request #1350 from akortunov/deathanimationfix
Do not allow to loot fighting actors during death animation (bug #3528)
7 years ago
scrawl f277007b49 Merge pull request #1404 from akortunov/ownedcrosshair
Owned crosshair feature improvements [discussion]
7 years ago
scrawl f627db6ae7 Merge pull request #1402 from Capostrophic/knowneffects
Allow revealing up to 8 magic effects of a potion if the player's Alchemy skill is sufficient and the potion has more than 4 effects
7 years ago
Andrei Kortunov 7c80ddc9de Owned crosshair improvements (bug #2789) 7 years ago
Andrei Kortunov 641a6cd842 Added a delay before summoned creature corpse despawning 7 years ago
David Cernat cffd985038 Merge pull request #266 from TES3MP/0.6.0
Add hotfix commits for 0.6.0 up to 18 Aug 2017
7 years ago
David Cernat 0820b7e92b [Server] Add GetCaseInsensitiveFilename() script function
Additionally, make header order consistent in script function files.
7 years ago
Capostrophic 6c8c883dc0 Making knownEffect aware that there can be more than 4 potion effects 7 years ago
scrawl b73ed5ccac Merge pull request #1391 from akortunov/aifollow
AiFollow: add a threshold when turning to target
7 years ago
Andrei Kortunov d8d47f081b AiFollow: add a threshold when turning to target 7 years ago
scrawl c231d20413 Merge pull request #1362 from akortunov/spellpriority
Combat AI: use WhenUsed enchantments [Feedback needed]
7 years ago
scrawl 306b58349e Merge pull request #1387 from akortunov/movementfix
Check actual movement for GetPCRunning and GetPCSneaking [Feedback needed]
7 years ago
scrawl d1161819bf Merge pull request #1396 from akortunov/dispelfix
Dispel only effects from spells
7 years ago
scrawl d8ab6bcd1d Merge pull request #1398 from akortunov/guifixes
Get only text from input fields (bug #4025)
7 years ago
Andrei Kortunov bc7353f100 Check animation state for GetPCRunning and GetPCSneaking 7 years ago
Andrei Kortunov 67d59bead5 Get only text from input fields (bug #4025) 7 years ago
Andrei Kortunov 1e983604db Dispel only effects from spells (bug #3995) 7 years ago
scrawl 8acf0ba633 Merge pull request #1394 from akortunov/followerattackfix
Prevent followers from attacking player if crime was reported
7 years ago
scrawl 24eaced7d2 Merge pull request #1395 from akortunov/tradeconfiscatefix
Confiscate an item when you try to sell it to its owner
7 years ago
Andrei Kortunov ec64034160 Confiscate stolen item/gem when enchanting 7 years ago
Andrei Kortunov 7a5645b35d Prevent followers from attacking player if crime was reported 7 years ago
Andrei Kortunov f84eb68b3d Confiscate an item when you try to sell it to its owner (bug #3944) 7 years ago
Kyle Cooley 249c1ae95a Fix orbit camera jumping back to old position 7 years ago
scrawl 1bdcecc32e Merge pull request #1390 from akortunov/referencecheck
Do not make target reference unavailable on cell change
7 years ago
Andrei Kortunov 3f159960b7 Restored pickpocket and werewolf check 7 years ago
scrawl b6aaa2f2be Merge pull request #1389 from akortunov/autosave
Create autosave when waiting
7 years ago
Andrei Kortunov b3b7d6aa9f Do not make target reference unavailable on cell change (bug #3898) 7 years ago
Andrei Kortunov c542ae6875 Create autosave when waiting (bug #1452) 7 years ago
scrawl 1f2b62c541 Merge pull request #1388 from akortunov/guifixes
Make inventory avatar to fit within border
7 years ago
Andrei Kortunov e4df17ccaf Make inventory avatar to fit within border (bug #4003) 7 years ago
David Cernat d51736d68f [Client] Fix crashes caused by inventory items with disabling scripts 7 years ago
scrawl 0f983144a4 Merge pull request #1383 from akortunov/guifixes
Enable transparency for interactive messageboxes and tooltips in game mode
7 years ago
scrawl 4210c7c0a4 Merge pull request #1385 from Thunderforge/changing-to-retail-disc
Wizard: Changing "New Installation" to "Retail CD/DVD" for clarity
7 years ago
scrawl 0ad4f5d5ff Merge pull request #1386 from Thunderforge/fix-wrong-copy-paste-keys-macos
Swap the OIS Ctrl and Meta keys on macOS so Copy/Paste etc. work correctly
7 years ago
Thunderforge 54fe645703 Removing erroneous comment since Qt is not relevant here 7 years ago
Thunderforge 464c64a306 Swap the OIS Ctrl and Meta keys on macOS to match Qt 7 years ago
Thunderforge f41a4bb937 Changing "New Installation" to "Retail CD/DVD" for clarity 7 years ago
Andrei Kortunov 56f5a5dee3 Added transparency to 'owned' tooltip 7 years ago
scrawl af9db74010 Merge pull request #1377 from LennyPenny/master
Fade out music before change occurs
7 years ago
Andrei Kortunov 8c1c80ab91 Disable transparency for persuation dialogue menu 7 years ago
Andrei Kortunov 4cc8afd25d Add transparency for tooltips in game mode 7 years ago
Andrei Kortunov 6cb3c83248 Add transparency for interactive messageboxes in game mode 7 years ago
Lennart Bernhardt 546352dbe3 avoid starting sound updates more than necessary 7 years ago
Lennart Bernhardt 7b8278ae45 remove redundant mMusicFader variable 7 years ago
scrawl 551045e4cc Merge pull request #1370 from Siimacore/data_files_loc_fix
Correcting https://bugs.openmw.org/issues/3906.
8 years ago
scrawl cd4525cf25 Merge pull request #1372 from akortunov/guifixes
Journalbook layout fixes
8 years ago
scrawl 4ec5060374 Merge pull request #1381 from akortunov/spellschoolfix
Fixes regression in spell school detection (bug #4007)
8 years ago
Andrei Kortunov ab391f17db Fixes regression in spell school detection (bug #4007) 8 years ago
Andrei Kortunov dd919b9f2c Do not allow to loot fighting actors during death animation (bug #3528) 8 years ago
scrawl ba72eb77f4 Merge pull request #1374 from akortunov/guardfix
Disable AiPursue package for player's followers
8 years ago
scrawl 7f5b615295 Merge pull request #1375 from MiroslavR/missing-import
Add missing include for isatty function
8 years ago
scrawl bf8d10587e Update AUTHORS.md 8 years ago
scrawl 4d1582dfc0 Merge pull request #1376 from spycrab/start_exterior_cell
Allow starting at an (unnamed) exterior cell using --start
8 years ago
scrawl a7b1ecc4c8 Merge pull request #1379 from OpenMW/revert-1366-merge_input_events
Revert "Merge redundant input events"
8 years ago
scrawl cef415509f Revert "Merge redundant input events" 8 years ago
spycrab 632d39ca76 Allow starting at an (unnamed) exterior cell using --start (Feature #3941) 8 years ago
Lennart Bernhardt 60a7d3d6e0 Fade out music before change occurs 8 years ago
MiroslavR 393f4ab758 Add missing include for isatty function (Fixes #4002) 8 years ago
David Cernat 77ce05b7d6 [Client] Fix spell casting probability synchronization 8 years ago
Andrei Kortunov 72ce118d02 Disable AiPursue package for player's followers 8 years ago
Andrei Kortunov cf7a6232d0 Combat AI: use WhenUsed enchantments 8 years ago
scrawl fe8437ae10 Merge pull request #1371 from akortunov/journalfix
Do not allow to use journal in a main menu
8 years ago
scrawl bf70b97f89 Update AUTHORS.md 8 years ago
scrawl ec67e7baaf Merge pull request #1373 from 16bitint/jailSkillDecreaseFloor
Ensure jail does not decrease a skill past zero
8 years ago
David Cernat 721b218cc2 Merge pull request #258 from OpenMW/master while resolving conflicts
# Conflicts:
#	.travis.yml
#	README.md
8 years ago
Jake Westrip 63343b6241 Ensure jail does not decrease a skill past zero 8 years ago
David Cernat 0e2038f045 [General] Record and get player positions before their last cell change 8 years ago
David Cernat fbec0d9443 [Client] Remove inertia from players who are teleported via a packet 8 years ago
Andrei Kortunov 23bda7613b Do not allow to use journal in a main menu (bug #3991) 8 years ago
Siimacore c920d083e4 Correcting https://bugs.openmw.org/issues/3906. 8 years ago
scrawl a78f254883 Merge pull request #1368 from akortunov/tradefix
Trade window improvements
8 years ago
scrawl a687a20aef Merge pull request #1366 from julianko/merge_input_events
Merge redundant input events
8 years ago
scrawl a63b9e33fd Merge pull request #1369 from akortunov/tauntfix
Take in account a temporary disposition in isAggressive check (bug #3…
8 years ago
Andrei Kortunov 56a30d7aec Journalbook layout fixes 8 years ago
Andrei Kortunov d1489f5b42 Take in account a temporary disposition in isAggressive check (bug #3987) 8 years ago
Andrei Kortunov 35beede065 Restock items after trade deal instead of trade window opening 8 years ago
Andrei Kortunov 487e72fd23 Play Up sounds instead of Down ones in trade window (bug #3982) 8 years ago
Bret Curtis d32ea7f284 Merge pull request #1367 from Thunderforge/patch-2
Adding myself to Authors.md
8 years ago
Thunderforge 2fdffb1995 Adding myself to Authors.md
I've had a few pull requests merged, so I assume I'm ready to be added.
8 years ago
Julian 3cfd9af945 merge redundant input events 8 years ago
scrawl cb32f1d60a Update AUTHORS.md 8 years ago
scrawl 954ec38af9 Merge pull request #1365 from elsid/fix_dangling_reference
Copy PathFinder::mPath back value when pass to MWMechanics::AiPackage…
8 years ago
elsid 748f5225a9 Copy PathFinder::mPath back value when pass to MWMechanics::AiPackage::pathTo as dest
May become dangling reference because method may remove all elements from mPath.
8 years ago
scrawl 60c7876c3d Merge pull request #1364 from OpenMW/openmw-42
Merge openmw-42
8 years ago
Nikolay Kasyanov ffcdedced3 [macOS, CI] Use FTP URL from environment
This URL is also subject to change, moving to Travis settings.
8 years ago
scrawl 0d58a77f86 Merge pull request #1291 from MiroslavR/respawn_crash
Prevent respawned references from being added to the scene twice
8 years ago
scrawl 52ffd10222 Merge pull request #1361 from akortunov/spellpriority
Split weapons and spells rating code from combat actions
8 years ago
Andrei Kortunov 604f9ee323 Split weapons and spells rating code from combat actions 8 years ago
MiroslavR d24286273b Prevent respawned references from being added to the scene twice in certain cases (Fixes #3864) 8 years ago
scrawl 6301fb8497 Merge pull request #1359 from akortunov/tgmfix
Fixed DamageHealth and AbsorbHealth effects applying (regression)
8 years ago
Andrei Kortunov b7cfb1aaf4 Fixed DamageHealth and AbsorbHealth effects applying 8 years ago
scrawl eac2e52841 Merge pull request #1329 from akortunov/priorityfix
Combat AI: make default spell priority calculation formula close to vanilla
8 years ago
Koncord d7cbfc98eb [Browser] Fix crashing of browser (I hope) 8 years ago
scrawl fde6e29628 Merge pull request #1326 from akortunov/spellpriority
Combat AI improvements [feedback needed]
8 years ago
scrawl 333648c975 Merge pull request #1324 from akortunov/doorfix
Improved doors detection
8 years ago
scrawl 60753515ab Merge pull request #1277 from akortunov/countfix
Fixed count widget buttons alignment
8 years ago
Andrei Kortunov 10eb6ec75f AI: Check angle between actor and door 8 years ago
Andrei Kortunov a03cc8216e Fixed count widget buttons alignment 8 years ago
scrawl c9d9461d3e Add Spacer class derived from AutoSizedWidget
Using a normal widget as a spacer with HStretch/VStretch may not work properly because for widgets not derived from AutoSizedWidget, the HBox/VBox treat the widget's current size as the requested minimum size. This leads the layout to break when resized more than once.

The new class sets HStretch and VStretch to true by default to save some typing.
8 years ago
scrawl 308ddabe90 Add feature additions policy 8 years ago
Koncord 1f632d8bc9 [Master] Fix REST servers/info 8 years ago
Koncord bca594150c [Browser] Add debug info to QueryClient 8 years ago
Koncord 918658d383 [Master] Waiting ACK instead of immediately closing connection. 8 years ago
Koncord 1aabcdd09c [General] Add *_WITH_ACK_RECEIPT to master server packets 8 years ago
Koncord 8384a8aa8a [General] Return sent packet number 8 years ago
scrawl 9ac409e61c Merge pull request #1287 from akortunov/spellsorting
Spellbuying menu improvements
8 years ago
Nikolay Kasyanov e7e8750816 [macOS, CI] Remove encrypted FTP credentials from repo
It seems more convenient to keep them in Travis settings.
8 years ago
scrawl 7d97d1d513 Merge pull request #1247 from pvdk/progressbar
Ini-importer progress bar fills the whole width of the ui element now
8 years ago
scrawl fd4c4d1133 Merge pull request #1358 from Thunderforge/renaming-duplicate-horizontalSpacer
Renaming duplicate horizontalSpacer variable
8 years ago
Thunderforge b98e175161 Renaming duplicate horizontalSpacer variable 8 years ago
scrawl 59b92dc67b Merge pull request #1349 from Thunderforge/prevent-parchment-from-being-cut-off
UI adjustments to prevent parchment scroll from being cut off (fixes #3910)
8 years ago
scrawl 43279c49b5 Go back to index when selecting 'cancel' on topics list 8 years ago
scrawl 196eedf1b0 Fix key focus issue with the journal hotkey 8 years ago
scrawl 4b51fd23e0 Merge pull request #1356 from akortunov/guifixes
Add missing journal sounds (bug #3974)
8 years ago
Nikolay Kasyanov 8be3928e98 Merge pull request #1357 from nikolaykasyanov/macos-improve-packaging
[macOS] Fixes accidental loading of plugins from system-wide Qt install
8 years ago
David Cernat 73118ea575 Merge pull request #253 from 16bitint/customspells
Added networking and saving for custom spells
8 years ago
Unknown bfbfbeac43 Added networking and saving for custom spells 8 years ago
Nikolay Kasyanov ccae232563 [macOS, CI] Use most recent available Qt 8 years ago
Nikolay Kasyanov 49b02a1bf4 [macOS] remove use of deprecated CMake policy 8 years ago
Nikolay Kasyanov fd0be7008d [macOS] Fixes accidental loading of plugins from system-wide Qt install
I was too eager to remove the workaround in 014a2fc0e9.
Actually, config-based solution seems cleaner.
Respective Qt documentation: http://doc.qt.io/qt-5/qt-conf.html.

Also, moves Qt plugins from Contents/MacOS to Contents/PlugIns
for consistency.
8 years ago
Andrei Kortunov 99b5f21a46 Add missing journal sounds (bug #3974) 8 years ago
scrawl a9b17d73dc Merge pull request #1355 from Allofich/animation
Fix problem with animations not looping
8 years ago
scrawl 03daa08a91 Merge pull request #1354 from OpenMW/patch-1
Add policy on original engine "fixes"
8 years ago
scrawl deaeda464e Update CONTRIBUTING.md 8 years ago
Allofich dae19412f2 Fix problem with animations not looping
Fixes #3804
8 years ago
Bret Curtis cf6f368560 rtd backport fix 8 years ago
scrawl 6d4bb9e130 Add policy on original engine "fixes"
Since the topic came up again on #1350, I figured to write down this policy. It is what I gathered from many discussions in the past and some "bugs" that we had fixed then later reverted when complaints came in. Do we all agree on this?
8 years ago
scrawl 631d79f1c8 Merge pull request #1346 from akortunov/aibreathe
AiBreathe AI package (feature #1374)
8 years ago
scrawl 9749f8f486 Merge pull request #1352 from psi29a/rtd_fix
remove breath/doxygen autodoc
8 years ago
scrawl c3c68667e9 Merge pull request #1351 from Thunderforge/patch-1
Fixing link to bug tracker
8 years ago
scrawl 4c2487d55f Merge pull request #1353 from akortunov/restfix
Update effects during rest (bug #3679)
8 years ago
David Cernat f61664ff6d [General] Update version to 0.6.0 8 years ago
David Cernat 4db64e1721 [Client] Synchronize spellcasting for non-bipedal creatures 8 years ago
Bret Curtis ac7b1bf97d appstream to new location: https://lintian.debian.org/tags/appstream-metadata-in-legacy-location.html 8 years ago
Andrei Kortunov 920021c61b Update effects during rest (bug #3679) 8 years ago
Bret Curtis 69359b6b4b expand to max-depth 3 and remove indices and tables 8 years ago
Bret Curtis f2fc8351bb remove breath/doxygen autodoc 8 years ago
David Cernat c9550fc560 [Server] Use case-insensitive filename comparison for plugins
Additionally, clarify the comments related to plugin comparison.
8 years ago
Thunderforge 622e758909 Fixing link to bug tracker
Bug tracker link was pointing to 0.41 bugs, but the Readme was talking about pre-1.0 features. Pointing to the main page makes more sense.
8 years ago
David Cernat c82b59acc2 [Documentation] Bring documentation up to date 8 years ago
David Cernat 690f7dc7df Merge pull request #251 from OpenMW/master
Add OpenMW commits up to 27 Jul 2017, part 2
8 years ago
David Cernat 9d05063af4 [General] Add server script functions for banning & unbanning IPs
Additionally, use a more informative message for the client when trying to connecting to a server that it is banned from.
8 years ago
Marc Zinnschlag 6001e04e51 Merge remote-tracking branch 'rcutmore/bug-3148' 8 years ago
Andrei Kortunov 6ab36c0539 Spellbuying menu improvements 8 years ago
David Cernat 500bff9911 Merge pull request #250 from OpenMW/master
Add OpenMW commits up to 27 Jul 2017
8 years ago
Rob Cutmore 3f2cd9b669 Editor: Do color to int conversion in ColorEditor 8 years ago
Rob Cutmore c7241c692f Editor: Do int to color conversion in ColorEditor 8 years ago
scrawl ec6dad99fc Update AUTHORS.md 8 years ago
scrawl 1792886f1e Merge pull request #1344 from julianko/dialogue_performance
Fix dialogue window performance
8 years ago
David Cernat 2f551aba02 [Client] Don't start dialogue via client scripts if already in dialogue
This prevents infinite greeting spam in scripts such as hlormarScript.
8 years ago
David Cernat e6e5d406b8 Merge pull request #248 from OpenMW/master
Add OpenMW commits up to 26 Jul 2017, part 2
8 years ago
David Cernat 796118c266 [Client] Send StatsDynamic packets more often 8 years ago
Julian d7aa2a882d improve dialogue window performance 8 years ago
scrawl d3be4769ea Merge pull request #1347 from akortunov/encumberancefix
Fixed encumberance check (bug #3963)
8 years ago
David Cernat bfbf1bbac4 Merge pull request #247 from OpenMW/master
Add OpenMW commits up to 26 Jul 2017
8 years ago
Thunderforge 072fbcaee3 UI adjustments to prevent parchment scroll from being cut off (fixes #3910) 8 years ago
David Cernat d543edbd9a [Server] Make sure players are initialized as non-werewolves 8 years ago
David Cernat 84662ed3fe [Client] Add temporary warnings when creating custom spells and items 8 years ago
Rob Cutmore 3fb7c42845 Editor: Use colour field for cell map colour 8 years ago
Rob Cutmore 0082f5a2dc Editor: fix handling of colour columns
Colours are stored as ints in the backend but the conversion from
QColor to int was broken.
8 years ago
scrawl 9920418947 Merge pull request #1345 from Thunderforge/bugfix/prevent-extra-column
Launcher: Move Morrowind Content Language label to section header
8 years ago
scrawl c23b75ab9a Merge pull request #1339 from PlutonicOverkill/vs2017-support
Add Visual Studio 2017 support (Feature #3952)
8 years ago
David Cernat cd8d064761 [Server] Add PlayerShapeshift to PlayerCellChange's information exchange 8 years ago
David Cernat 8b79cdd4f4 [Server] Document script functions, part 3
Also reorder functions in Cells and CharClass so they are consistent with the rest.
8 years ago
Andrei Kortunov 548814bfbc Added AiBreathe package (feature #1374) 8 years ago
Andrei Kortunov 325ea10594 Fixed encumberance check (bug #3963) 8 years ago
Thunderforge 8ded95201d Move Morrowind Content Language label to section header 8 years ago
David Cernat 3d1458b5a2 Merge pull request #246 from OpenMW/master
Add OpenMW commits up to 24 Jul 2017
8 years ago
Andrei Kortunov 3ba0a336b7 Move spell magicka cost calculation to standalone function 8 years ago
Marc Zinnschlag cfc5cdd309 Merge remote-tracking branch 'plutonicoverkill/highlight-occurence-fix' 8 years ago
PlutonicOverkill 9924e4a35b Stop VS2017 spamming warnings
Disable warning caused by the string and stream-related standard headers.
8 years ago
scrawl 57a772c8d4 Merge pull request #1342 from akortunov/screenfade
Fade screen in on a new game start
8 years ago
David Cernat 2c1ece79fc Merge pull request #245 from OpenMW/master
Add OpenMW commits up to 22 Jul 2017
8 years ago
David Cernat 5e5440b697 [Server] Document script functions, part 2 8 years ago
PlutonicOverkill 16be1e1a84 Fix occurrence highlighting preferences panel 8 years ago
Andrei Kortunov 337f0f876d Fade screen in on a new game start 8 years ago
Nikolay Kasyanov 04184f5794 Merge pull request #1341 from nikolaykasyanov/macos-update-ci-dependencies
[macOS, CI] Use most recent dependencies
8 years ago
Nikolay Kasyanov 411b78562e [macOS, CI] Use most recent dependencies
Includes a fix for https://bugs.openmw.org/issues/3904.
8 years ago
scrawl 8feb495d17 Merge pull request #1340 from PlutonicOverkill/pause-when-minimised
Pause game when minimised on Windows (Bug #3943)
8 years ago
PlutonicOverkill 0eb54fa96a Remove TOOLSET and XP_TOOLSET 8 years ago
scrawl 9bc24ab629 Fix character preview zNear/zFar not being autocomputed as intended (Bug #3955) 8 years ago
scrawl 5c11266a46 Fix character preview item selection 8 years ago
scrawl c9f8a220dc Update the tooltip when the focusObject is set 8 years ago
scrawl 0e2e23e9f8 Remove tooltip object as part of WindowManager::clear 8 years ago
David Cernat cc91b32b2f [Server] Make spell script functions consistent with others 8 years ago
David Cernat 7173a48f4b [Client] Prevent ObjectState packet spam 8 years ago
PlutonicOverkill 5049fe4320 Pause game when minimised on Windows 8 years ago
David Cernat b8b3856c73 Merge pull request #244 from OpenMW/master
Add OpenMW commits up to 19 Jul 2017
8 years ago
David Cernat 8bd33e5fbb [Server] Document script functions, part 1 8 years ago
scrawl 7f634514a8 Fix the viewport of the character preview being set a frame ahead due to a threading issue 8 years ago
scrawl 20606a2aff Add 'prediction time' setting for cell/terrain pre-loading 8 years ago
scrawl 3e03a0d7bd Terrain: remove ref argument that is now always true 8 years ago
scrawl ac78d01b2b Terrain: use the main camera's viewpoint for intersection tests
Fixes lag spikes caused by intersection tests loading/unloading terrain pages.
8 years ago
scrawl a629d48df6 Update the facedObject after the camera is updated 8 years ago
David Cernat c8d965488f Merge pull request #243 from OpenMW/master
Add OpenMW commits up to 18 Jul 2017
8 years ago
scrawl ffb6dff6aa Merge pull request #1338 from akortunov/valuefix
Change mValue type for clothes to unsigned short (bug #3960)
8 years ago
Andrei Kortunov 2bd105f5e2 Change mValue type for clothes to unsigned short (fixes #3960) 8 years ago
David Cernat fd046e42ef Merge pull request #242 from OpenMW/master
Add OpenMW commits up to 16 Jul 2017
8 years ago
scrawl 2c7ce26fb7 Merge pull request #1336 from akortunov/evadefix
Combat AI: avoid enemy hits when casting Self-ranged spells
8 years ago
scrawl 3f7c2128e8 Merge pull request #1337 from akortunov/guifixes
Disable transparency for all popup lists
8 years ago
Andrei Kortunov 6795163265 Disable transparency for all popup lists 8 years ago
Andrei Kortunov 98f161c7fd Combat AI: avoid enemy hits when casting Self-ranged spells (fixes #3922) 8 years ago
scrawl 2c95f40640 Merge pull request #1333 from akortunov/guidistortionfix
Disable sound distortion for GUI actions and PlaySound command [discussion]
8 years ago
scrawl 4f6838c7db Merge pull request #1335 from akortunov/guifixes
GUI fixes
8 years ago
Andrei Kortunov 5bb9f1b187 Make popup in character select menu non-transparent 8 years ago
Andrei Kortunov 2b22d10ebc Spellview fixes 8 years ago
Andrei Kortunov 9179a019df Quick keys menu fixes 8 years ago
scrawl 12871dd8da Merge pull request #1334 from akortunov/guifixes
EditEffectDialog fixes
8 years ago
Andrei Kortunov 5be1c81913 Fixed Close button handler in EditEffectDialog (fixes #3956) 8 years ago
David Cernat aeb1ec3394 [Client] Delimit and clarify changes made by tes3mp to engine and main 8 years ago
David Cernat f65f996418 [Server] Add script functions for werewolf states 8 years ago
Andrei Kortunov dca8317083 Disable sound distortion for player actions in GUI mode 8 years ago
Andrei Kortunov 3b163ce6ce Disable sound distortion for PlaySound script command 8 years ago
David Cernat e3929df38a Merge pull request #239 from OpenMW/master
Add OpenMW commits up to 14 Jul 2017
8 years ago
David Cernat 43a3daf0aa [General] Add & implement PlayerShapeshift packet for werewolf states 8 years ago
scrawl ada85aa1ee Merge pull request #1331 from akortunov/guidistortionfix
Prevent GUI sounds distortion
8 years ago
David Cernat f17aa2a323 [Documentation] Update changelog and credits 8 years ago
PlutonicOverkill 2d7689b978 Add Visual Studio 2017 support
The new VS2017 configuration uses all the same settings as the
VS2015 one, but uses a different generator.

CMake by default looks for Boost libraries based on the compiler
being used, but Boost only has binaries for VS2015, so a hack is
used to make sure it looks for the correct ones.

I don't know what TOOLSET and XP_TOOLSET are for but I left them
just in case.
8 years ago
David Cernat ad9fa0631a [General] Rename jailText to jailEndText and add jailProgressText in PlayerJail 8 years ago
David Cernat 708d3723eb [Client] Fix client script messagebox buttons that had always broken in tes3mp 8 years ago
David Cernat e36c0afc59 [General] Send faction reputation via PlayerFaction packets 8 years ago
David Cernat be93ec8ef6 [General] Implement ObjectState packet 8 years ago
David Cernat 083b46394d [General] Add ignoreJailSkillIncreases to PlayerJail packets 8 years ago
David Cernat 5962570c48 [General] Add jailText to PlayerJail packets 8 years ago
David Cernat 5774023f8b [Client] Add missing processor initialization for ProcessorPlayerJail 8 years ago
David Cernat 3280f0c5ee [General] Implement PlayerJail packet
Rework server's DeathFunctions into MechanicsFunctions

Remove connection between PlayerResurrect and jailing
8 years ago
David Cernat b1b27728e2 [Server] Move functions dealing with PlayerKillCount to QuestFunctions 8 years ago
David Cernat 6f6a3ae74d Merge pull request #238 from OpenMW/master
Add OpenMW commits up to 11 Jul 2017
8 years ago
scrawl 40dc1dd6f5 Fix checking a variable before it's assigned (Bug #3950) 8 years ago
scrawl be940656db Add '0' as an alias for 'OFF' for OPENMW_OPTIMIZE 8 years ago
Koncord 9cc07f100c [Server] Add OnObjectState callback 8 years ago
Andrei Kortunov 54b4d93f79 Added a special function for GUI sounds playing 8 years ago
David Cernat c9c00d921e [Build] Add tes3mp_text_input to MyGUI's CMakeLists 8 years ago
David Cernat 3529f9b090 [General] Add placeholders for PlayerJail, ObjectState & ConsoleCommand 8 years ago
David Cernat 4e74910fdb [General] Disable automatic sync for PlayerJournal and PlayerFaction
Simplify PlayerFaction packets by removing BOTH action
8 years ago
David Cernat 6dde0ca9c9 [Server] Rework script functons by removing unnecessary vector buffers
Add new initialization script functions to allow clearing all player changes vectors in a manner consistent with Actor and World functions

Add toOthers boolean to all methods that send packets with player changes vectors
8 years ago
David Cernat 2c05b7f747 [Server] Rename InitiateEvent() into InitializeEvent() for consistency 8 years ago
David Cernat 1d504a665f [General] Add RANK, EXPULSION and BOTH actions to PlayerFaction packets 8 years ago
Koncord 940ae5c2fb [Server] Implement GetIP API function 8 years ago
Koncord 1f3cbb46e2 [Server] Use __ARM_ARCH definition for detecting ARM 8 years ago
Andrei Kortunov 37952c9a79 Added door detection based by ray casting 8 years ago
Koncord b847914d6f [General] Fix finding CallFF includes 8 years ago
Koncord 768790e9b4 [Server] Move Base processors and Initializer to processors subdirectory 8 years ago
Koncord 60ac884d13 [Server] Delete commented line 8 years ago
Koncord 9bb586de77 [Client] Simplify setMapExplored() 8 years ago
Koncord 52349278e9 [Client] Fix warnings 8 years ago
Koncord b2339f2f9a [Client] Fix building 8 years ago
David Cernat 60574ae667 [General] Implement jail time as a death penalty 8 years ago
David Cernat 71313c5aa6 [General] Implement PlayerMap packet, part 1 8 years ago
David Cernat ad4b1d05bb [Client] Add comments for GUI additions made by tes3mp 8 years ago
David Cernat b1fb9ba23e [Browser] Remove Favorites tab while it remains broken 8 years ago
David Cernat c899525e30 [General] Use address keys with clearer meaning in tes3mp config files 8 years ago
David Cernat 99640da111 Merge pull request #234 from OpenMW/master
Add OpenMW commits up to 30 Jun 2017
8 years ago
David Cernat 1f682749d6 [General] Add optional notes to PasswordDialogs 8 years ago
Koncord 9630f95335 [Server] Remove debug output 8 years ago
Koncord 73cf134107 [General] Fix incoming password string 8 years ago
Koncord 0cf09adb44 [General] Move AddProcessor to BasePacketProcessor 8 years ago
Koncord d9e98ec771 [Server] Add expected ‘;’ 8 years ago
Koncord d14ad55a49 [Server] Fix compilation on arm 8 years ago
Koncord f92117e73d [Server] change "__arm__" to "__ARM_ARCH" in ARM detection 8 years ago
Koncord 15a197cb9a [Server] Temporarily disable CallFF for ARM 8 years ago
Koncord f015c3b2f6 [Server] Remove commented code 8 years ago
Koncord 653db9e266 [Server] Simplify native CallPublic & CreateTimerEx 8 years ago
Koncord 5292914325 [Server] Simplify native CallPublic & CreateTimerEx 8 years ago
Koncord 1c09e0c255 [Server] Add CallFF dependency 8 years ago
scrawl 9c94244b28 Fix crash introduced by commit 1d8a9ff622 (Fixes #3940) 8 years ago
scrawl 951c4e12e0 Fix crash introduced by commit 1d8a9ff622 (Fixes #3940) 8 years ago
Koncord 9506f9ca35 [General] Allow luajit-2.1 8 years ago
David Cernat 0b68e59060 [Client] Send ObjectLock packets when using lock spells 8 years ago
Koncord 9519c467eb [Client] Simplify updateEquipment for LocalPlayer & LocalActor 8 years ago
Koncord 596f42e408 [Client] Fix "invalid iterator" error 8 years ago
Andrei Kortunov 143fdae6fe Make spell priority calculation close to vanilla (bug #3937). 8 years ago
David Cernat 685bf15d52 Merge pull request #231 from OpenMW/master
Add OpenMW commits up to 27 Jun 2017
8 years ago
scrawl ea5fe4b686 Merge pull request #1328 from akortunov/journalfix
Do not show empty journal entries (fixes #3891)
8 years ago
Koncord ed3e089126 [General] Use C++11 way to delete Ctor 8 years ago
Koncord 5b2cab4c6b [General] Change NULL to nullptr 8 years ago
Koncord 2b1b4ce2f1 [General] Update PacketControllers to C++11 8 years ago
Koncord 0ed0d2417b [Client] Make foreach style consistent with other 8 years ago
Koncord 2427a4f877 [Client] Update DedicatedActor to C++11 8 years ago
Koncord 8f7da49152 [Client] Update DedicatedPlayer to C++11 8 years ago
Koncord 08666cabdb [Client] Update PlayerList to C++11 8 years ago
Koncord a110ec1767 [Client] Update GUIController to C++11 8 years ago
Koncord aa1f5c3cd3 [Client] Change pointer type to reference 8 years ago
Koncord 7499777b3a [Client] Update CellController to C++11 8 years ago
Koncord 7d4dd2ad1c [Client] Update Cell to C++11 8 years ago
Koncord 7918e887dd [Client] Update ActorList to C++11 8 years ago
Koncord aa12b35d03 [Client] Update LocalActor to C++11 8 years ago
Koncord 689050e1d0 [Client] Long expression to lambda 8 years ago
Koncord 58a6a8c3bc [Client] Update LocalPlayer to C++11 8 years ago
Andrei Kortunov 7fcb22b867 Do not show empty journal entries (fixes #3891) 8 years ago
Koncord 6222c20e82 [Client] Convert MechanicsHelper to namespace 8 years ago
Koncord 7d3e08f031 [Client] Simplify loops 8 years ago
Koncord f7341c021f [Client] Modernize loops in WorldEvent to C++11 8 years ago
Koncord 61cc3ced5d [Client] Remove boost from processors 8 years ago
Koncord e68eee651a [Server] Fix Resurrect 8 years ago
Koncord fcccd7b665 [General] Remove creatureStats.mDead from packets 8 years ago
Koncord c58c26f6c0 [Server] Implement native CreateTimer & CreateTimerEx 8 years ago
Koncord 9ab58b6708 [Server] Remove redundant SetResurrectType
Rename SendResurrect to Resurrect
8 years ago
David Cernat 813a3c89c4 [General] Implement PlayerBook packet to track skill books read 8 years ago
David Cernat b3b73c5cd2 [General] Implement resurrection at nearest shrine or temple 8 years ago
scrawl ec458ef385 Don't reset idle time when there is no camera movement (Fixes #3902) 8 years ago
David Cernat a358dc6af8 [Client] Revert 0020132 now that 534c819 provides a better fix 8 years ago
David Cernat 7d81b84dd8 [Client] Write list of loaded plugins to log 8 years ago
David Cernat 77758596a1 Merge pull request #230 from OpenMW/master
Add OpenMW commits up to 25 Jun 2017
8 years ago
scrawl 8d17565efd Fix joystick binding for an action being discarded when default for another action is loaded (Bug #3900) 8 years ago
scrawl ca5b351eef Fix saved joystick bindings being discarded when running without joystick connected 8 years ago
scrawl 903e59f495 Don't reset idle time when there is no camera movement (Fixes #3902) 8 years ago
scrawl 44e2089098 Don't play 'menu click' sound for right clicks (Fixes #3919) 8 years ago
scrawl 534c81976c Add missing cell update for physics system (Fixes #3917) 8 years ago
David Cernat 9a519b5cc2 [Client] Avoid incrementing actor death count if we aren't its authority 8 years ago
David Cernat 66a3f3d475 [Server] Use cleaner solution for safely reading cell descriptions 8 years ago
David Cernat 78f29302ef [General] Fix PlayerJournal logic by sending only refIds for its actors
Additionally, make the refIds for actors usable in script functions.
8 years ago
David Cernat 48c63dbce9 [General] Fix ObjectLock packets by making hasCellData true for them 8 years ago
David Cernat 4ad87faac1 [Server] Create new Settings category for script functions 8 years ago
David Cernat ebf7740969 [General] Repurpose GameConsole packet as GameSettings & add difficulty to it 8 years ago
David Cernat df67ae4689 Merge pull request #229 from OpenMW/master
Add OpenMW commits up to 20 Jun 2017
8 years ago
scrawl 62f0ba6045 Merge pull request #1279 from Allofich/position
Fix actors not returning to their wander locations
8 years ago
scrawl 73fbaae97f Merge pull request #1325 from jordan-ayers/bugfix/3684-restock-soul-gems
Adjust restock calculations to ignore filled soul gems. (Bug #3684)
8 years ago
scrawl 07ebf00f9c Merge pull request #1327 from tlmullis/bugfix/pass-configuration-to-msbuild
build.msvc.sh msbuild configuration fix
8 years ago
scrawl 54bb1b13cb Change NCO/NCC flags to NC* (Fixes #3915) 8 years ago
scrawl 41fb17f39b Revert "Correcting https://bugs.openmw.org/issues/3906"
This reverts commit b0abed00e5.
8 years ago
tlmullis fad760cc1d msbuild was always defaulting to building the Debug configuration so it was impossible to build any other configurations with build.msvc.sh 8 years ago
David Cernat c6aee3b780 [Client] Fix build by changing boost::shared_ptr into std::shared_ptr 8 years ago
David Cernat fa3baac0f3 Merge pull request #228 from OpenMW/master while resolving conflicts
# Conflicts:
#	.travis.yml
#	CMakeLists.txt
#	apps/openmw/main.cpp
8 years ago
Andrei Kortunov 1a8f2bfc11 Combat AI: select target by priority 8 years ago
Andrei Kortunov a2be73295b Combat AI: take in account enemy weapon resistance 8 years ago
Andrei Kortunov 62b24eb078 Combat AI: do not use range weapons under water 8 years ago
Jordan Ayers b277bd782e Adjust restock calculations to ignore filled soul gems.
Bug #3684
8 years ago
Allofich 4f08084e79 Make stationary actors return to position on load
Also makes wandering actors resume their previous destination when an interrupting combat or pursuit ends.

(Fixes #3656)
8 years ago
Koncord 2d91c60a11 [General] Change "Lib" to "lib" in FindRakNet cmake module 8 years ago
Koncord 6192543381 [General] Move bracket to the right position 8 years ago
scrawl 3356fb81ce Merge pull request #1280 from Allofich/guard
Make guards that are attacked try to arrest player
8 years ago
Allofich 028762a7dc Make guards that are attacked try to arrest player
(Fixes #3706)
8 years ago
Nikolay Kasyanov 160a67afe1 Merge pull request #1319 from OpenMW/ci-reenable-macos-packaging
[macOS, CI] reenable packaging & fix nightlies
8 years ago
scrawl cd1821c464 Merge pull request #1322 from Siimacore/wizardthreadfix
Stopping the thread in the wizard that prevented it to stop correctly
8 years ago
scrawl 53264f34b3 Merge pull request #1321 from akortunov/spellpriority
Use mRange to check spell range instead of mArea.
8 years ago
Bret Curtis dfed710e5e Merge pull request #1323 from Allofich/compile
Fixes for building in MSVC
8 years ago
Allofich 42402976e3 Fixes for building in MSVC 8 years ago
Siimacore 6af470ff03 Stopping the thread in the wizard that prevented it to stop correctly 8 years ago
Nikolay Kasyanov 97c3c45ba8 [macOS, CI] Use Qt 5.7 8 years ago
Andrei Kortunov 87939bf3b1 Use mRange to check spell range instead of mArea. 8 years ago
Nikolay Kasyanov 016da1f10c [macOS, CI] Use most recent dependencies 8 years ago
scrawl 63f101e0cd Update AUTHORS.md 8 years ago
scrawl f7969fb178 Merge pull request #1317 from Siimacore/master
Correcting https://bugs.openmw.org/issues/3906
8 years ago
scrawl dd3f612e88 Merge pull request #1316 from akortunov/doorfix
Doors usage improvements
8 years ago
scrawl 80eb2ea35d Merge pull request #1313 from akortunov/spellpriority
Make combat AI to do not cast target spells under water
8 years ago
scrawl 6d90f5a9a5 Merge pull request #1312 from akortunov/guifixes
Split greeting from topic response
8 years ago
Bret Curtis 830ecbe101 Merge pull request #1318 from psi29a/fix_deboosting
Fix deboosting
8 years ago
Koncord 3803535bd5 [General] Implement CleanChat() 8 years ago
Bret Curtis c6805314c2 be explicit about what we are trying to catch instead of catching everything and fixed up formatting
use Allman style brackets not K&R style, additional formatting for fallback.cpp which needed some love

revert allman formatting changes
8 years ago
Bret Curtis 7c758a6293 std::stof can not handle comma in us localization and can not handle period in french localization, using std::replace is not a solution, going back to boost::lexical_cast 8 years ago
Bret Curtis f0b21cca22 use own inline hash_combine function 8 years ago
scrawl fb7479c194 Update CONTRIBUTING.md 8 years ago
Koncord 7b98f9f7ff [Server] Log all exceptions 8 years ago
Andrei Kortunov e9d0bf7c12 Added missed return statement 8 years ago
Nikolay Kasyanov 913601facc [macOS, CI] reenable packaging to make nightlies work 8 years ago
Andrei Kortunov 9fdfb2a83f Spell priority: make AI do not cast target spells when enemy is under water 8 years ago
Siimacore b0abed00e5 Correcting https://bugs.openmw.org/issues/3906 8 years ago
Andrei Kortunov cab51d26cc Doors: small key search optimizations 8 years ago
Andrei Kortunov 188424d5d3 Allow AI to use keys to open doors 8 years ago
David Cernat 51b95f35cd [Server] Fix problem with fetching interior cell descriptions 8 years ago
David Cernat db7709ee18 [Server] Modernize getting and setting of player cells 8 years ago
Bret Curtis 266ffc84ff Merge pull request #1315 from devnexen/getuid_build_fix
needs this head for getuid
8 years ago
David Cernat 0d3976950b [Server] Use consistent names for rotation script functions 8 years ago
David Carlier 8a5c62de97 needs this head for getuid 8 years ago
David Cernat bea3afaec8 [Client] Ensure uninitialization of DedicatedActors for late packets 8 years ago
David Cernat 1ae5bd19e1 [Client] Don't set difficulty based on client settings 8 years ago
David Cernat 70d9374a6a [General] Implement PlayerKillCount packets 8 years ago
David Cernat 5b23da8e1c [General] Rename unused PlayerRegionChange packet into PlayerKillCount 8 years ago
David Cernat ee5c9b65c5 [General] When changing region, send new region name in PlayerCellChange 8 years ago
David Cernat e5f5b047bc [Client] Don't send empty ObjectSpawn packets for cells with no leveled creatures 8 years ago
Bret Curtis 11c4aed4e5 algo needed for std::min/max in msvc2013 8 years ago
David Cernat f02ed0d621 [Server] Add script functions for getting and setting actor dynamic stat modifiers 8 years ago
David Cernat 79351c737e [Client] Disable back button in chargen race window 8 years ago
David Cernat 002013294a [Client] Add temporary fix for OpenMW crash caused by using default head 8 years ago
David Cernat 312fc84a6f [Client] Use update timer in mwmp::Cell instead of LocalActor 8 years ago
Bret Curtis dbf149f9b2 gcd is not available in msvc until 2017.3 P2, back to boost::math::gcd for now 8 years ago
Andrei Kortunov 4600f24e27 Playing sound when AI is opening a door 8 years ago
Bret Curtis c781d1f8ed purge unnecessary imports
add fstream back

add fstream back

add fstream back

add fstream back

add fstream back

add fstream back

add fstream back
8 years ago
Bret Curtis d799954ca0 replace and purge boost::math::gcd and other non-used headers 8 years ago
Bret Curtis 154d7cffa2 replace and purge boost::function 8 years ago
Bret Curtis d48b829b45 replace and purge boost::lexical_cast 8 years ago
Bret Curtis 98752a9702 replace boost::bind 8 years ago
Bret Curtis b7c27e5e96 remove boost/tuple 8 years ago
Bret Curtis d97aa9152b remove more unused imports, including boost headers 8 years ago
Bret Curtis 39185e6f8c purge the rest of boost::shared and any other boost related things that no longer are required
put boost system back in, clean others up

revert Qt

add back boost fstream
8 years ago
Bret Curtis d785344fad purge all instances of <boost/shared_ptr.hpp>, clean up unused headers 8 years ago
Bret Curtis 07f75e1104 replace boost::shared_ptr in extern and components 8 years ago
Nikolay Kasyanov dd882b69c6 [macOS, CI] Use Release configuration 8 years ago
Nikolay Kasyanov 071419db4a [macOS, CI] Enable OpenCS build and see what happens 8 years ago
Nikolay Kasyanov bf630b99fa Use most recent Xcode 8 years ago
Bret Curtis c8b67221d7 use nullptr instead of NULL 8 years ago
Ewan Higgs 38a2de3c51 convert std::autor_ptr to std::unique_ptr, originally by Ewan Higgs and updated by Bret Curtis 8 years ago
Nikolay Kasyanov 27a5c06f04 [OS X, CI] Disable packaging 8 years ago
Nikolay Kasyanov c16506d07c [OS X, CI] Use Xcode 8/macOS 10.12 SDK 8 years ago
Nikolay Kasyanov 6260e15852 [OS X] Temporarily disable OpenCS build on CI 8 years ago
Nikolay Kasyanov 4138723bbf [OS X] Add libc++ to linker flags 8 years ago
Nikolay Kasyanov 231908d9cf [OS X, CI] Use dependencies build against libc++ 8 years ago
Bret Curtis 5fa2f46499 only set libc++ for APPLE 8 years ago
Bret Curtis 26c023efe2 stdlib to libc++ 8 years ago
Bret Curtis cb26f52032 matching ifs 8 years ago
Bret Curtis 5a65d6e18d fix std::move 8 years ago
Bret Curtis 433129e728 only bundle with Qt5, for now 8 years ago
Bret Curtis b6ee76b77b Switch to latest Qt5 version which is C++11-compatible 8 years ago
Bret Curtis dbc29854b2 try to fix enums 8 years ago
Bret Curtis b657517bea use c++11 and see what happens 8 years ago
David Cernat 18bf79e08b [Client] Correctly set mpNum for placed gold 8 years ago
Andrei Kortunov 3190f28710 Spell priority: make AI do not cast target spells under water 8 years ago
David Cernat 6ac7ee8fcd [Client] Fix problems with NPC equipment sync 8 years ago
David Cernat 34378fbb4f [General] Make coding style consistent 8 years ago
David Cernat a84cf7c191 [General] Fix packet validation for ActorPackets sent by server scripts
This allows Lua scripts to send actor data again, which hadn't been possible anymore after 2ed1bfe
8 years ago
Andrei Kortunov 4bb9622c21 Handle greetings differently from responses 8 years ago
David Cernat abaa26e32a Merge pull request #226 from OpenMW/master
Add OpenMW commits up to 8 Jun 2017
8 years ago
scrawl 59eb0aba7d Merge pull request #1310 from akortunov/guifixes
Removed empty space before dialogue entry (bug #3892)
8 years ago
Koncord 587b53bfed [Client] Reorder files 8 years ago
Koncord 568b0702fa [Server] Implement PasswordDialog 8 years ago
Koncord b84f97ec2b [Client] Implement PasswordDialog 8 years ago
Koncord cef58fa164 [Server] Change fprintf to LOG_MESSAGE_SIMPLE in GET_PLAYER 8 years ago
Koncord 186e5fe33e [Server] Remove GetAngleY & remove Y parameter from SetAngle 8 years ago
David Cernat 89f6c6df96 Merge pull request #225 from OpenMW/master
Add OpenMW commits up to 4 Jun 2017
8 years ago
Andrei Kortunov c2962ced90 Removed empty space before dialogue entry (bug #3892) 8 years ago
Julian Ospald 7704dcfcce Fix build with osg >= 3.5.6 8 years ago
scrawl 6f878327bf Fix unused ICS_MAX warning 8 years ago
scrawl 172cc65be9 Merge pull request #1308 from akortunov/spellpriority
Spell priority: dispel usage improvements
8 years ago
Andrei Kortunov 00402b7154 Removed unused variable 8 years ago
scrawl d6b97604ba Update AUTHORS.md 8 years ago
scrawl 70e02f4c28 Merge pull request #1306 from Nialsy/master
Fixed quickload with menus open
8 years ago
scrawl 305f5af4a6 Merge pull request #1309 from akortunov/enchantchance
Move a setting to show enchanting success chance to Game section
8 years ago
Andrei Kortunov f4a187a9c2 Move a setting to show enchanting success chance from GUI to Game section 8 years ago
David Cernat 315ec46ff6 Merge pull request #224 from OpenMW/master
Add OpenMW commits up to 3 Jun 2017
8 years ago
scrawl 516e99c6e7 Merge pull request #1305 from akortunov/enchantchance
Show success chance when self-enchanting
8 years ago
Andrei Kortunov 9a1ba1e559 Show success chance when self-enchanting (Feature #3492) 8 years ago
scrawl 9032443272 Merge pull request #1307 from nikolaykasyanov/fix-macos-ci
Fix macOS CI
8 years ago
Andrei Kortunov 42f3c73c75 Spell priority: dispel usage improvements 8 years ago
Nikolay Kasyanov 224fcc9a4a [macOS, CI] Fix dependency installation 8 years ago
Koncord 2ed1bfe427 [General] Simplify ActorPackets 8 years ago
Koncord fd8e833d6a [General] Simplify WorldPackets 8 years ago
Nicholas f6f07f5497 clear mGoToJail flag on load 8 years ago
Koncord 556bf18535 [General] Minor improvements for player packets
Add compression, remove useless loop iterations
8 years ago
Koncord ad873e16b8 [Client] Limiting updates to ~64 per second 8 years ago
Koncord c2600bac8e [General] Allow single bit booleans in packets 8 years ago
Koncord 9742b0a801 [Client] Reset statTimer every timeout 8 years ago
Koncord 80631ae8bd [Client] Reset positionTimer on time expired 8 years ago
Koncord 7e5e877fda [General] Pack player->direction.pos to 1 byte 8 years ago
Koncord dded330cc4 [General] Get rid Z axis in direction.pos 8 years ago
Koncord a847d46984 [Client] Get rid Z axis in direction.pos 8 years ago
Koncord d67db1a9bd [Client] Play rotation animation on dedicated players 8 years ago
Koncord ae9e5750ac [General] Aggressive compression of rotations 8 years ago
Koncord 2ef1e26233 [Client] Fix ID_PLAYER_POSITION spam 8 years ago
Koncord 3905e0dae9 [General] Get rid direction.rot again 8 years ago
Koncord 5f30dfd5db [Client] Get rid direction.rot 8 years ago
David Cernat 8c785fb22c [Client] Send ObjectDelete packets when summoned creatures despawn 8 years ago
David Cernat 0bed33e39e [Client] Reset player fatigue when being resurrected
This way, players killed by strong hand-to-hand attacks will no longer be forced to lie on the ground when resurrected.
8 years ago
David Cernat 75a60a4700 [Client] Update debug in CellStore 8 years ago
David Cernat d0a0b6ffa4 [General] Add basic integrity checks to all Actor and World packets 8 years ago
David Cernat e042673779 [Client] Fix error when trying to delete player markers that don't exist 8 years ago
David Cernat cf41956cad [Client] Prevent framerate drops caused by invalid rotation values 8 years ago
David Cernat 41de1876a3 Merge pull request #223 from OpenMW/master
Add OpenMW commits up to 31 May 2017
8 years ago
scrawl 9fd0d54a35 Merge pull request #1289 from akortunov/newrepair
Improved repair and recharge widgets
8 years ago
scrawl 4a9a741905 Merge pull request #1304 from akortunov/spellpriority
Combat AI: spell priority fixes
8 years ago
Andrei Kortunov f6c3d4935e Spell priority: feather and burden 8 years ago
Andrei Kortunov 10d4cb15ad Improved repair widget 8 years ago
Andrei Kortunov 1164c3f16e Improved recharge widget 8 years ago
Andrei Kortunov 6c21e4ed31 Spell priority: ignore some effects useless in battle 8 years ago
scrawl 2638327593 Merge pull request #1303 from akortunov/guifixes
Character generation layout fixes
8 years ago
David Cernat d8cd57a8be [Client] Make topic sync work with localized versions of the game 8 years ago
David Cernat 34a452d775 [Client] Fix logic for initialization and updating of player markers
Additionally, disable the Ptrs of players who move to cells that don't exist for us instead of placing them in ToddTest.
8 years ago
David Cernat a353a21280 [General] Fix code style inconsistencies 8 years ago
David Cernat 97bf0252a4 [Client] Disable collision for actors loaded as dead from server 8 years ago
David Cernat 906b263a2d [Client] Update topics in current dialogue screen when receiving PlayerTopic packets 8 years ago
David Cernat 461ab790e2 [Client] Correctly disable auto-equipping for DedicatedPlayers & DedicatedActors 8 years ago
Andrei Kortunov 2b28d1a6d2 Select specialization menu layout fix 8 years ago
David Cernat 068a45be87 [General] Synchronize player & NPC rotation animations 8 years ago
David Cernat f4cdedd8cb [General] Synchronize summoned creatures 8 years ago
David Cernat 1c6e359fe9 [Client] Set and clear hitAttemptActorId for DedicatedPlayers
This allows a DedicatedPlayer's follower NPCs to target enemies attacking the DedicatedPlayer.
8 years ago
David Cernat 4e5c8873e0 [General] Use ObjectSpawn instead of ObjectPlace for actors 8 years ago
David Cernat c211d53190 [General] Use only direction.pos in ActorPosition, as advised by Koncord 8 years ago
David Cernat 0cce9908be Merge pull request #222 from OpenMW/master
Add OpenMW commits up to 29 May 2017
8 years ago
David Cernat 27148ce9eb [General] Add placeholders for 12 new packets, to be implemented soon
Additionally, make it slightly clearer who created which previously existing packets.
8 years ago
scrawl a1661af864 Merge pull request #1301 from akortunov/tooltips
Tooltips layout fixes
8 years ago
scrawl 7f5b88bbc6 Merge pull request #1300 from akortunov/enchantformula
Fixed enchant points calculations formula
8 years ago
scrawl d39da2b755 Merge pull request #1302 from hasufell/master
Fix build with osg >= 3.5.6
8 years ago
Julian Ospald 5d85fa9220
Fix build with osg >= 3.5.6 8 years ago
Koncord b3b7003313 [Server] Add "--no-logs" option 8 years ago
Koncord dbb636ac90 [Server] Parse program options 8 years ago
Koncord c4686ec578 [Server] Remove debug line 8 years ago
Koncord cc7efc6e37 [Server] Use first 10 characters of CommitHash for humans 8 years ago
Koncord 80925736c0 [Server] Add commit hash to the rules 8 years ago
Koncord 565889ccbc [Client] Add commit hash to password 8 years ago
Koncord bc3612dfe9 [Server] Add commit hash to password 8 years ago
Koncord f7473e3379 [General] Fix copy-posty bug 8 years ago
David Cernat 9fe5b4a305 [General] Remove debug line from ActorAnimFlags 8 years ago
Koncord 8478fed98a [General] Simplify Actor packets. 8 years ago
Koncord f6fba70a4e [General] Use compression for Position packets 8 years ago
Koncord 4934be18f0 [General] Add compression flag to RW methods
Advantages: and 2 bytes per float value, using huffman algorithm for structures and strings.
Disadvantages: bad for performance and precision for float/double variables.
8 years ago
Koncord 6a472de1c0 [Browser] Remove servers before updating server list 8 years ago
David Cernat b0c1aafc5a [Client] Use a 10 times higher maximum distance for linear interpolation 8 years ago
David Cernat ea2a060c67 [Client] Sync actor movements from interiors to exteriors & vice versa 8 years ago
David Cernat 7f6c5e2f48 [Client] Only send PlayerJournal packets for new journal entries 8 years ago
David Cernat 6918ae7bc7 [Client] Don't crash when receiving certain packets from NULL players 8 years ago
David Cernat 2e45203bbb [Client] Clean up mapIndexes in CellController 8 years ago
David Cernat 619982b085 [Client] Only try to send actor data to other players when authorized 8 years ago
David Cernat 73b9683182 [General] Make most ActorPackets smaller by not including refIds in them 8 years ago
David Cernat 7177d56cfb [Client] Only require refNumIndex & mpNum for CellStore::searchExact() 8 years ago
Koncord 8f2ef83be1 [Browser] Fix QT warnings 8 years ago
Koncord 9f0ec849a0 [Browser] Disable refresh button when action in progress 8 years ago
Koncord ec5d1b7a86 [Browser] Do not try to open window if server is no more reachable 8 years ago
Koncord c8eb0f0eae [Browser] Move downloading query info to another thread 8 years ago
Koncord e1766da83c [Master] Fix REST API for old servers 8 years ago
David Cernat 7c87ac80ee [Client] Ensure correct drawState when receiving an ActorAttack packet 8 years ago
David Cernat bf2b3bbf51 [Browser] Once again refresh server list when starting 8 years ago
David Cernat 9d9581a1c2 [Client] Prevent DedicatedActors from automatically equipping torches 8 years ago
David Cernat 940a2b6eb5 [Server] Add script functions for setting and sending ActorEquipment 8 years ago
David Cernat f47a10dd4a [Server] Add script callback and getter functions for ActorEquipment 8 years ago
David Cernat 311ce4119d [General] Fix logic issues related to ActorEquipment 8 years ago
Andrei Kortunov 46c8842808 Fixed enchant points calculations formula 8 years ago
David Cernat cdfc2db2d1 Merge pull request #220 from OpenMW/master
Add OpenMW commits up to 26 May 2017
8 years ago
David Cernat 4f273932af [General] Implement sending and reading of ActorEquipment packets 8 years ago
David Cernat ec921eefc8 [Client] Prevent players from getting stuck in drag and drop when their opened containers are deleted 8 years ago
David Cernat 20a72ec807 [Client] Send ObjectTrap packets when disarming traps with keys & probes 8 years ago
David Cernat 32879adc5b [General] Allow ObjectTrap to trigger traps, not just disarm them 8 years ago
David Cernat 93aa674eff [Server] Add SendObjectTrap() script function 8 years ago
David Cernat 7ac115b359 [Client] Implement sending and reading of ObjectTrap packets 8 years ago
Koncord 4082cddde5 [Browser] Do not allow to connect to unreachable servers 8 years ago
Koncord f8c6ed8028 [Browser] Fix freeze when server is unreachable 8 years ago
Koncord 24d4e1c222 [General] Remove useless PacketSendMyID 8 years ago
Koncord 7a6c12bc2a [Browser] Simplify PingRakNetServer() 8 years ago
Koncord a9fc096c9a [General] Move password of master server to header 8 years ago
Koncord 056ec2d434 [General] Fix CMake errors 8 years ago
Koncord cb5e88ce5c [Master] Use add_definitions
Because CMAKE_CXX_STANDARD introduced in CMake 3.1
8 years ago
Koncord 3e284a1139 [General] Use unsigned int instead unsigned long
sizeof(unsigned long) != 8 on Windows
8 years ago
Andrei Kortunov f17badb3cd Makes cells cache size configurable 8 years ago
David Cernat 97768be14b [Client] Send ObjectPlace packet for random creatures interrupting rest 8 years ago
David Cernat dbdb11b5f0 [Server] Add script functions for dialogue 8 years ago
David Cernat 7ec431ce3d [General] Make packet style more consistent 8 years ago
David Cernat 11369f6513 [General] Implement sending and reading of PlayerTopic packets 8 years ago
David Cernat 08de349133 [General] Add placeholders for PlayerTopic & ObjectTrap packets 8 years ago
David Cernat b1264cca92 [Client] Send ObjectLock whenever using spells or keys to unlock objects 8 years ago
David Cernat 870fd9a78b [General] Remove ObjectUnlock packet, use ObjectLock with 0 lock instead 8 years ago
David Cernat 48ee8fd536 [Client] Send PlayerFaction packets when getting expelled from factions 8 years ago
David Cernat d0ec5c61e2 Merge pull request #219 from OpenMW/master
Add OpenMW commits up to 21 May 2017, part 2
8 years ago
scrawl f9cdc2da94 Merge pull request #1293 from akortunov/spellpriority
aicombataction.cpp: implement some spell priority TODO's
8 years ago
MiroslavR 98daf4f043 Merge pull request #1296 from akortunov/jumpfatiguefix
Fixed jump fatigue loss formula (bug #3843)
8 years ago
David Cernat d307876199 Merge pull request #218 from OpenMW/master
Add OpenMW commits up to 21 May 2017
8 years ago
Koncord 56012db86e [Master] Fix build for windows 8 years ago
scrawl 8cd8eab9dd Merge pull request #1294 from akortunov/constenchantfix
Swap enchant type when purge selected soulgem (bug #3878)
8 years ago
Andrei Kortunov 4f41c44cd6 Swap enchant type when clean selected soulgem widget (fixes #3878) 8 years ago
David Cernat 68fa82f03a [Master] Fix build in Visual Studio 8 years ago
Koncord 80bd268de6 [General] Use simple types for master server packets 8 years ago
David Cernat b0cd636924 [General] Add basic integrity check to ProxyMasterPacket 8 years ago
Koncord 17af679c07 [Master] Enable RestAPI 8 years ago
Koncord ec6614ba32 [Master] Add RestAPI 8 years ago
Koncord 892960f913 [General] Add ctor to MasteData::Plugin 8 years ago
David Cernat 10f84c125e [Browser] Start browser without needing to refresh first 8 years ago
Koncord 50c839d425 [Broser] Break while loop if connection was closed 8 years ago
Koncord d3bf4ec577 [Browser] Do not try to receive packet if sending is failed. 8 years ago
Koncord 956b573323 [General] Use different ordering channels for packets 8 years ago
David Cernat 0595192129 [Server] Make GetFactionExpelledState() return a bool instead of an int 8 years ago
David Cernat a2e2ca7cab [Server] Add script functions for factions 8 years ago
David Cernat e6983993c2 [General] Implement sending and reading of PlayerFaction packets 8 years ago
David Cernat 04c9c5ed48 [General] Forward PlayerJournal packets to other players 8 years ago
David Cernat 0189dbf916 [General] Make JournalItem consistent with other packet structs 8 years ago
David Cernat 90c594b726 [Server] Make names for Player script callbacks shorter 8 years ago
David Cernat a634a5d9bb [Server] Add missing includes for ProcessorInitializer 8 years ago
David Cernat 1d0167c3c9 [Client] Add missing include for PlayerFaction processor 8 years ago
David Cernat ad388c7e12 [General] Add placeholders for ActorEquipment & PlayerFaction packets
Also reorder packets and packet processors.
8 years ago
David Cernat f527fe9ebe [General] Add basic integrity check to reading of ActorList packets
Additionally, add newlines to files missing them.
8 years ago
David Cernat 252a28fe24 Merge pull request #217 from OpenMW/master
Add OpenMW commits up to 15 May 2017
8 years ago
Bret Curtis 4c27e2f2d9 Merge pull request #1292 from rhtucker/master
Converted all settings files to semantic linefeeds.
8 years ago
Ryan Tucker d555c21c28 Converted all settings files to semantic linefeeds.
Corrected default segments in Windows settings.
Removed all default declarations in the prose of the setting descriptions except where clarification or additional information was also provided.
Some minor, but not thorough grammar corrections.
8 years ago
David Cernat 05564bd123 [General] Add basic integrity check to reading of Container packets 8 years ago
David Cernat 46501909ff [Client] Comment out spammy debug about Container packets 8 years ago
David Cernat 8f5e6531db [Client] Avoid updating positions and anim flags when framerate is low
Also rename DedicatedPlayer methods so they are consistent with those from DedicatedActor
8 years ago
David Cernat 271594f0ee [Client] Don't play death animations for NPCs saved as dead on server 8 years ago
David Cernat da22639620 Merge pull request #216 from OpenMW/master
Add OpenMW commits up to 12 May 2017
8 years ago
Marc Zinnschlag 6906e35ac0 Merge remote-tracking branch 'origin/master' 8 years ago
PlutonicOverkill 5ec97811d8 Don't switch pages when right-clicking on list 8 years ago
PlutonicOverkill 7281e8b888 Remove C++11 features 8 years ago
PlutonicOverkill cd75c5618c Move context menu code to PageBase 8 years ago
PlutonicOverkill 16f8341de3 Prevent context menu appearing for modifier settings 8 years ago
PlutonicOverkill c2f427f48d Prevent context menu appearing when right-clicking shortcut setting 8 years ago
PlutonicOverkill 646ff72cdc Add a more elegant way of showing the context menu 8 years ago
PlutonicOverkill bd9f657603 Show context menu when user clicks on empty space 8 years ago
David Cernat 2eb5221472 Merge pull request #215 from OpenMW/master
Add OpenMW commits up to 9 May 2017
8 years ago
David Cernat 3c30801eac [Server] Try to fix server crash from iterations through invalid players 8 years ago
David Cernat 5a786e6c56 [Client] Make all LocalActors get initialized correctly again 8 years ago
David Cernat d7d4dec200 [Client] Don't spam AnimFlags packets when a Player or Actor is flying 8 years ago
PlutonicOverkill 30af92f575 Fix pointer initialisation bug 8 years ago
PlutonicOverkill 4879405097 Add reset context menu for key binding pages 8 years ago
PlutonicOverkill 3545cfa00a Rewrite feature to reset options to default 8 years ago
scrawl 5e03e75549 Merge pull request #1283 from Allofich/water
Don't make NPCs or player speak while underwater
8 years ago
David Cernat 1f747d4375 [Client] Only apply interpolation when positions don't change too much 8 years ago
David Cernat 22e2135ce1 Merge pull request #214 from OpenMW/master
Add OpenMW commits up to 8 May 2017, part 2
8 years ago
David Cernat cc559cf8e2 [General] Don't send packets for dead LocalActors, to fix Position spam 8 years ago
Allofich 315ad54b29 Don't make NPCs or player speak while underwater
(Fixes #3851)
8 years ago
Bret Curtis 2f866fadcf Merge pull request #1288 from akortunov/travisfix
Fixed Travis CI build (removed tab from test_stringops.cpp)
8 years ago
Andrei Kortunov de14e9811d Fixed Travis CI build 8 years ago
David Cernat 5bd95628ce [Client] Send an ObjectDelete packet when disposing of corpses 8 years ago
PlutonicOverkill f30d1a3075 Revert everything 8 years ago
David Cernat 26087a182d Merge pull request #213 from OpenMW/master
Add OpenMW commits up to 8 May 2017
8 years ago
Koncord 31adb5d715 [Server] Allow timers callbacks to restart timers 8 years ago
scrawl 48c764a580 Update test 8 years ago
scrawl 813af876f6 Use a partial binary search in isReservedName (Fixes #3835) 8 years ago
scrawl 109bc3cb59 Merge pull request #1281 from akortunov/purgefix
Make InventoryStore::purgeEffect() purge all effects with argument ID instead only first
8 years ago
scrawl 796d2c59ca Merge pull request #1282 from MiroslavR/noenv_player_vo
Do not apply underwater effects to player's voice
8 years ago
Koncord d82ed7d0ad [Client] Register ProcessorGameTime 8 years ago
Koncord 6c45b6dc5b [Client] Fix ProcessorGameTime ID 8 years ago
David Cernat 3fb0bbb58c [Client] Make it possible to turn off console again 8 years ago
PlutonicOverkill a9760ec805 Fix indenting 8 years ago
PlutonicOverkill d8a711f89f Fix tabs 8 years ago
PlutonicOverkill 477af73ad6 Missed another one 8 years ago
PlutonicOverkill 418aeb65f1 Remove unneeded dependencies 8 years ago
PlutonicOverkill 5fca37d0c8 Forgot to remove debugging code 8 years ago
PlutonicOverkill dff3828710 Keep the settings page in sync with the real settings 8 years ago
David Cernat 34f0a5e076 [Client] Disable leveled creatures from their class instead of scene.cpp 8 years ago
David Cernat aaaed8ab8b [Client] Fix potential object duplication in WorldEvent::placeObjects()
Also clean up the debug messages in WorldEvent so they don't take up multiple lines.
8 years ago
David Cernat de49f5f175 [General] Add and use isActor bool for WorldObject 8 years ago
David Cernat 9d2c5c3502 [General] Simplify structure of BaseEvent 8 years ago
Koncord 250c199188 [Server] Fill query information about plugins 8 years ago
Koncord 87c172186e [Server] Add and implement PushPlugin method to MasterClient 8 years ago
Koncord 873da495b1 [Server] Trigger 'update' when added new rules in MasterClient 8 years ago
Koncord f2b8a939ef [Server] Add postInit method and move getPluginListSample in to it 8 years ago
Koncord 8422ae0ce8 [General] Fix iterators in ProxyMasterPacket 8 years ago
Koncord 3f34d328b8 [Browser] use range-based 'for' instead regular 'for' 8 years ago
Koncord 96212e96f4 [Browser] Fix rules list 8 years ago
Koncord 26445355e6 [Server] Fix initialization of mclient 8 years ago
Koncord a4a77ddeff [Server] Add SetRuleString and SetRuleValue to script API 8 years ago
Koncord a0b71eda23 [Server] FIx deadlock 8 years ago
Koncord c2ce2f2ce7 [Server] Use MasterServer update rate from config 8 years ago
David Cernat dcc61a095a [Client] Allow multiple WorldObjects to be added to a WorldEvent 8 years ago
Koncord 32284787de [Server] Add OnServerPostInit callback 8 years ago
Koncord 9992058942 [Browser] Use constant instead magic value in PingRakNetServer 8 years ago
Koncord b7e45f269b [Browser] Detach ping from GUI thread 8 years ago
Koncord db16e45e76 [Browser] Add PingUpdater & PingHelper classes for detached ping 8 years ago
Koncord 42eaa7a8fd [Browser] Optimize PingRakNetServer() function 8 years ago
David Cernat 93bd3207db Merge pull request #212 from OpenMW/master
Add OpenMW commits up to 6 May 2017
8 years ago
Bret Curtis c262ae9279 Merge pull request #1285 from ace13/patch-5
Update Windows CI scripts to use ffmpeg 3.2.4
8 years ago
PlutonicOverkill 64879c03e4 Add option to reset settings to default 8 years ago
Alexander "Ace" Olofsson fd03c76e68 And apparently they're only doing zips now 8 years ago
Alexander "Ace" Olofsson ae05c37a46 Update Windows CI scripts to use ffmpeg 3.2.4 8 years ago
David Cernat bdc8b7f863 [Client] Send level creatures in ObjectPlace reply to ActorList request 8 years ago
David Cernat 9eef867928 [Client] Disable regular spawning of leveled creatures 8 years ago
David Cernat 3def111ca1 [Client] Fix graphical glitches related to DedicatedActor initialization 8 years ago
David Cernat 62aa6ed7ea [Client] Send PlayerPosition packets based on a timeout 8 years ago
David Cernat ef12a37d59 [Client] Send ActorPosition packets based on a timeout 8 years ago
David Cernat db3859565b [Client] Send ActorStatsDynamic packets only when stats change enough 8 years ago
David Cernat 4d81455020 [General] Rework and simplify death reasons so they work with NPCs 8 years ago
David Cernat b745a33f18 [Client] Resurrect DedicatedActors that aren't supposed to be dead 8 years ago
David Cernat 8b4e167efe [Client] Prevent NPC subtitles from being added to open Dialogue window 8 years ago
David Cernat bcdbecf608 [Client] Initialize Cell before moving DedicatedActor to it 8 years ago
David Cernat a7b06b342f Merge pull request #211 from OpenMW/master
Add OpenMW commits up to 5 May 2017
8 years ago
David Cernat 60cf623455 [Client] Make DedicatedActors transition into LocalActors when eligible 8 years ago
scrawl 8d84869432 Fix commit 8f71b65d38 (don't overwrite the previous user data)
This resulted in a crash/corruption because the KeyframeController, for performance reasons, does not check that the expected user data is there and of correct type.

(Fixes #3829)
8 years ago
David Cernat 06f3c07116 [Server] Only read Actor packets from players who are still authorities 8 years ago
David Cernat 206c9cc357 [Client] Use CellController pointers to make code easier to read 8 years ago
David Cernat e05adbfe65 [Client] Add better debug for Actor cell changes 8 years ago
David Cernat 950a8eae3d [Client] Move Actors to Cells rather than reinitialize them from scratch 8 years ago
David Cernat 8b8d55e8d3 [Client] Set a very high processing range for AI for the time being 8 years ago
David Cernat 8d41a0c53b [Client] Make LocalActor initialization include newly spawned Actors 8 years ago
David Cernat 79691254a4 Merge pull request #210 from OpenMW/master
Add OpenMW commits up to 3 May 2017
8 years ago
Marc Zinnschlag a2e863e7dd Merge remote-tracking branch 'origin/master' 8 years ago
Andrei Kortunov 4d927439ca Spell priority: item wearing check when disintegrate weapon/armor 8 years ago
Koncord 93edd67681 [Client] Use boolean var instead requestQuit or throwing runtime_error 8 years ago
Koncord e0139c33b3 [Client] Remove destructor in Cell 8 years ago
Koncord 4eb02af8fb [Client] Use __WINDOWS define 8 years ago
Koncord 8fa8b8d310 [General] Add __WINDOWS define 8 years ago
Koncord 47e6820f97 [General] Move printWithWidth and intToHexStr to components 8 years ago
Andrei Kortunov d598809ac6 Spell priority: check spell resistance, check if actor is already has a non-magnitude effect 8 years ago
David Cernat 34e77c5dae [Client] Initialize Actors based on the guid of an ActorAuthority packet 8 years ago
David Cernat e01cadad23 [Server] Send ActorAuthority packets to all players who loaded the cell 8 years ago
David Cernat 63dd2d9246 [General] Remove code related to ActorAuthority packets that is not used 8 years ago
David Cernat 0b40cb8919 [Client] When there are more client than server plugins, print them all 8 years ago
David Cernat 92e277d75d [Client] Prevent application hang on Windows when plugins don't match 8 years ago
David Cernat 0284f18876 [Client] Replace plugin load order message with a clearer one at the top 8 years ago
David Cernat 1dbe9f0eaa [Client] Print plugin comparison in a better-looking way on Windows 8 years ago
David Cernat f80a16b897 [Client] Don't use try/catch when printing missing plugins
Also move load order note to bottom where it fits better.
8 years ago
David Cernat 4294508082 [Client] Don't print null for missing plugins when comparing with server 8 years ago
David Cernat c3c04bbfc3 [General] Make coding style consistent 8 years ago
Koncord afcf5a7fc8 [Client] Fix segmentation fault 8 years ago
Koncord ccae9590cc [Client] Fix comparison between signed and unsigned integer expressions 8 years ago
Koncord 01bdbfecfb [Client] Fix wrong checksum collection 8 years ago
Koncord 7bee82cedb [Client] Add notification about strict order 8 years ago
Koncord f6bea7a114 [Client] Read answer about ID_GAME_PREINIT from server 8 years ago
Koncord bda9a76d29 [Server] Send server plugin list to client 8 years ago
Koncord 931a5896ec [General] Improve PacketPreInit 8 years ago
Koncord f00c4dc107 [Server] Improve preload logic for parsing plugin lists 8 years ago
Koncord 5ddad6a4c6 [Server] Implement getPluginListSample() 8 years ago
Koncord b223d0fa1e [Server] Register new callback 8 years ago
PlutonicOverkill 829560719e Make name highlighting more consistent and only for variable names 8 years ago
David Cernat 377aa9b6c9 [Server] Refresh cellActorList's count after removing Actors from it 8 years ago
David Cernat cad3eb8968 [Client] Iterate through CellStore's mergedRefs when initializing Actors 8 years ago
David Cernat ebf9df3fe2 [Client] Add getMergedRefs() method to CellStore 8 years ago
David Cernat f59609fcd7 [Client] Fix actor memory leaks, part 2 8 years ago
David Cernat 9b58973929 [Client] Remove variable added by tes3mp to CellStore that is not used 8 years ago
David Cernat 83ba4b62b1 [Server] Remove Actors from a Cell's ActorList when they change cells 8 years ago
David Cernat a77bd6652f [Client] Read ActorPosition packets sent from Lua script cell loads 8 years ago
David Cernat 4c35c328a9 [Server] Add SendActorPosition() script function 8 years ago
David Cernat e5e888ac21 [Server] Add script functions for checking what data an Actor has 8 years ago
David Cernat fafed96bf4 [Server] Store data from ActorPosition in the ActorLists of Cells 8 years ago
Andrei Kortunov da828a1089 Class choice layout fix 8 years ago
Andrei Kortunov ba78e187c7 Listbox spacing fix 8 years ago
David Cernat 1a699329e5 [General] Set new BaseActor booleans in corresponding packets 8 years ago
Andrei Kortunov 0e35e6a700 Class generation menu layout fixes 8 years ago
Andrei Kortunov 1520a4d7db Levelup menu layout fixes 8 years ago
David Cernat 730df061b3 [General] Add hasPositionData and hasStatsDynamicData bools to BaseActor 8 years ago
Koncord 5517d871c6 [Server] Handle ID_CONNECTION_ATTEMPT_FAILED in MasterClient
And fix log message
8 years ago
Koncord 1ce8c0f9ec [Server] Fix id in log message for ID_PLAYER_CELL_STATE processor 8 years ago
David Cernat 48b773bfcb [Client] Use float scale for WorldEvent::sendObjectScale() 8 years ago
Koncord 60f4a1d9e5 [Client] Fix issues when changing npc model to creature 8 years ago
Koncord 6ddab0d323 [Server] Add and implement "look like creature" functions 8 years ago
Koncord 9c7c0f9989 [General] Send creatureModel & useCreatureName via PacketPlayerBaseInfo 8 years ago
Koncord 6739233aa3 [General] Change master server port to 25560 8 years ago
Koncord e77b109ef5 [Browser] Show only fully connected players in main window 8 years ago
Andrei Kortunov 26ec467df0 Tooltips: faction, magic effects layout fixes 8 years ago
David Cernat 62d93a09c1 [Server] Add new script callbacks for cells, remove a couple of others
OnPlayerCellState and OnActorStatsDynamic are now removed as callbacks.

The old OnCellUnload is now renamed into OnCellDeletion.

OnCellLoad and a new OnCellUnload relating to a specific player's load/unload are added.
8 years ago
David Cernat e1ee4a4f49 [Server] Store data from ActorStatsDynamic in the ActorLists of Cells 8 years ago
David Cernat 217894100a [Server] Add ReadCellActorList() script function 8 years ago
David Cernat a73cbac226 [Server] Store a BaseActorList in every Cell to keep track of Actor data 8 years ago
Andrei Kortunov 987677db75 Tooltips: dynamic stats, birthsign and hand-to-hand layout fixes 8 years ago
Andrei Kortunov 27181367e2 Tooltips: skills and attributes layout fixes 8 years ago
MiroslavR d24bcbac15 Do not apply underwater effects to player's voice (Fixes #3850) 8 years ago
Andrei Kortunov 6331cc6ab9 Tooltips: level, race, class, specialization layout fixes 8 years ago
David Cernat e8e0090b9b [General] Use new SimpleCreatureStats struct in BaseActor 8 years ago
David Cernat 0e8d115794 [Server] Clean up ActorFunctions by using readActorList pointer
Also rename scriptActorList into writeActorList, and also rename matching methods, for clarity.
8 years ago
David Cernat b54560a362 [Server] Clean up WorldFunctions by using readEvent pointer
Also rename scriptEvent into writeEvent, along with matching methods, for clarity.
8 years ago
David Cernat 809b4d78ba [Client] Split off DedicatedPlayer and PlayerList into different files 8 years ago
David Cernat f2ec6ce02c Merge pull request #209 from OpenMW/master
Add OpenMW commits up to 30 Apr 2017
8 years ago
scrawl 9f1527b7da Merge pull request #1272 from akortunov/guifixes
Service menus layout fixes
8 years ago
Koncord eda74ddf44 [Client] Fix memory leaks 8 years ago
Koncord 3372f27f3a [Client] Notify player about current chat mode 8 years ago
David Cernat f6a218025a [Client] Fix actor memory leaks, part 1 8 years ago
David Cernat 0ba8a407bc [Server] Reuse Cell deletion code in CellController 8 years ago
David Cernat b62969d3cf [Server] Add OnCellUnload script callback 8 years ago
David Cernat 234510a87f [Server] Split off Cell and CellController into two different files 8 years ago
Koncord 8492929738 [Client] Use RussoOne for chat 8 years ago
Koncord 805c346bd7 [Client] Fix copy-paste mistake 8 years ago
Koncord 465a05bad0 [Client] Add ability to look like a creature for the DedicatedPlayers 8 years ago
Koncord 7af73782f3 [OpenMW] Implement MWWorld::createRecord for Creatures 8 years ago
David Cernat a2f6d99dfd [Server] Use new CreatureStats in ActorFunctions to fix invalid pointer 8 years ago
David Cernat d333c0b484 [Client] Read ActorStatsDynamic packets sent from Lua script cell loads 8 years ago
Koncord fbd8e8b3a1 [Client] Use CreatureStats instead NpcStats 8 years ago
Koncord 26c00c3141 [Client] Change chat font to RussoOne for better visibility 8 years ago
Koncord db0e25cb6c [Client] Allow colors in the chat window 8 years ago
David Cernat 6ff9091afd [Server] Add script functions for setting actor dynamic stats 8 years ago
David Cernat 9d7142f684 [Server] Clean up order for StatsFunctions 8 years ago
David Cernat 03c56e01f9 [Server] Add script functions for getting actor dynamic stats 8 years ago
David Cernat 3d6b21942c [Server] Add OnActorStatsDynamic script callback 8 years ago
David Cernat e419e25e72 [Client] Don't initialize actors without unique indexes 8 years ago
David Cernat 328b4fb763 [Server] Fix invalid pointers when using ActorFunctions::GetActorCell() 8 years ago
David Cernat a71dbc7d09 [Server] Add script functions for setting actor cells and positions 8 years ago
David Cernat 9c5eb47e90 [Server] Add and use Utils::getCellFromDescription() 8 years ago
David Cernat cc3dfd7da0 Merge pull request #208 from OpenMW/master
Add OpenMW commits up to 28 Apr 2017
8 years ago
PlutonicOverkill 95f60d2bb3 Merge branch 'master' into mark-variable 8 years ago
PlutonicOverkill cbb2b8b119 Add setting so feature can be turned off 8 years ago
PlutonicOverkill a8e7628e83 Enable highlighting when cursor is placed over a name (script editor) 8 years ago
Marc Zinnschlag 8299f8677b updated credits file 8 years ago
Marc Zinnschlag 7919c4d672 Merge remote-tracking branch 'plutonicoverkill/master' 8 years ago
David Cernat aeab851ed8 [Server] Add script functions for getting actor position coordinates 8 years ago
David Cernat 1ce60fbf30 [Server] Add GetActorCell() script function 8 years ago
PlutonicOverkill e685de0f84 Fix script editor undo/redo context menu actions 8 years ago
PlutonicOverkill 6063d8e31b Fix existing context menu in script editor 8 years ago
Koncord e53916da10 [Browser] Add Rules tab to ServerInfo 8 years ago
Koncord db2b53c1b8 [Browser] Update to new protocol 8 years ago
Koncord e7a1474e04 [Browser] Implement QueryClient 8 years ago
Koncord d40a55a748 [Master] Update server via operator= instead map::insert 8 years ago
Koncord b677a0455d [Server] Fix MasterClient crashes 8 years ago
Koncord a4e45de6ca [General] Fix playersCount 8 years ago
David Cernat 752848834a Merge pull request #207 from OpenMW/master
Add OpenMW commits up to 26 Apr 2017
8 years ago
Andrei Kortunov f484ef8ffb Fixed jump fatigue loss formula (fixes #3843) 8 years ago
Andrei Kortunov bba822c014 Purge all effects with same ID instead only first (fixes #3839) 8 years ago
Marc Zinnschlag 61e6b0d03c improved ScriptErrorTable handling of script errors that don't have line/column associated with them (also avoiding a segfault) 8 years ago
PlutonicOverkill 3d1e640388 Add setting to change keyboard shortcut and fix another crash 8 years ago
PlutonicOverkill 1f699552f7 Fix infinite recursion bug in uncommentSelection() 8 years ago
David Cernat 9a89284bca [Server] Add OnActorCellChange script callback 8 years ago
David Cernat 6a21ec1fdc [General] Rename PlayerPos into PlayerPosition 8 years ago
David Cernat 7b07d6651f [General] Add and use PlayerBounty packet and matching script functions 8 years ago
David Cernat 6658531713 [General] Fix names for two PlayerProcessors 8 years ago
David Cernat 7dbcfbd3b1 [Client] Use better check for empty CreatureStats in DedicatedActor 8 years ago
David Cernat 11605bd19a [Client] Make aggressive actors initiate combat with DedicatedPlayers
Previously, they were only attacking DedicatedPlayers who had attacked them first.
8 years ago
PlutonicOverkill 61e374fdfc Implement commentSelection() and uncommentSelection() 8 years ago
PlutonicOverkill 83ff7d162c Add comment/uncomment actions to the context menu 8 years ago
David Cernat a4165325fa [Client] Improve synchronization of Actor swings 8 years ago
David Cernat ce9605957a [Client] Use different way of preventing attacks on players in dialogue 8 years ago
David Cernat ea7c3f2dc7 [Client] Make tes3mp combat code work with Creatures, not just NPCs 8 years ago
David Cernat a82646a130 [Client] Delineate tes3mp-only code more clearly, part 2 8 years ago
David Cernat 44476248b7 [Client] Add and use DedicatedPlayer::update() 8 years ago
David Cernat e11a24f446 [Client] Add back statement that should not have been removed in e4a261e 8 years ago
David Cernat e4a261ea2e [Client] Remove unused include and variables, fixing warnings 8 years ago
Koncord 51422da641 [Server] Remove outdated code 8 years ago
Koncord 0f30f57d4d [Server] Handle IS_PENDING and IS_CONNECTING in switch 8 years ago
Koncord d0c3d190e1 [Server] Send players list to master server 8 years ago
Koncord 6e8750b9e4 [General] Change list players to vector players 8 years ago
Koncord 3e00d42067 [Server] Reworking MasterClient to new master server 8 years ago
Koncord 9643eb6026 [Master] Notify server about announce state
Rename structure Server to QueryData
8 years ago
David Cernat 841e6a63f8 [Client] Initialize Creatures as LocalActors 8 years ago
David Cernat 661da98941 [Documentation] Update readme and credits slightly 8 years ago
David Cernat 850b19badf [Client] Add clearer debug messages for Actor initialization 8 years ago
David Cernat 2082f8ff4f [Client] Send LocalActor cell changes at end of mwmp::Cell's update 8 years ago
David Cernat 1f6ba9d9ee [Client] Remove jump check from LocalActor that is irrelevant for NPCs 8 years ago
David Cernat e70faf1016 [Client] Fix crashes in PlayerProcessors from NULL players
Also rename ProcessorPlayerDrawState into ProcessorPlayerAnimFlags
8 years ago
David Cernat dba0d47973 [Client] Revert position changes on invalid cell changes to fix glitches 8 years ago
David Cernat 5c5c62f33a Merge pull request #206 from OpenMW/master
Add OpenMW commits up to 23 Apr 2017, part 2
8 years ago
David Cernat 284f863292 [Client] Add linear interpolation for DedicatedActors 8 years ago
MiroslavR 1c5c82dd9f Fix wrong incrementation in InventoryStore::visitEffectSources (Fixes #3838) 8 years ago
scrawl 80d1bb571c Merge pull request #1274 from MiroslavR/incr_bug
Fix wrong incrementation
8 years ago
MiroslavR eada8c6822 Fix wrong incrementation in InventoryStore::visitEffectSources (Fixes #3838) 8 years ago
David Cernat 2eaa25e7d4 [General] Update version to 0.6-alpha 8 years ago
David Cernat a12694c6ef [Client] Fix crash caused by late-arriving ActorAuthority packets 8 years ago
David Cernat 14e1ff27cb [Client] Rename CellController's cellsActive to cellsInitialized for clarity 8 years ago
David Cernat ef634a1c52 Merge pull request #205 from OpenMW/master
Add OpenMW commits up to 23 Apr 2017
8 years ago
David Cernat 27186f555d [Client] Enable reading of ActorPackets, and thus NPC sync, by default 8 years ago
David Cernat 871d8c8308 [Client] Send and read ActorCellChange packets 8 years ago
David Cernat f4c3a28141 [General] Finalize ActorCellChange packet structure 8 years ago
David Cernat 9ea69f4c1f [Client] Add LocalActor & DedicatedActor cell transition logic to World::moveObject() 8 years ago
David Cernat 4e86d8781f [Client] Clean up & simplify logic for DedicatedPlayer cell transitions 8 years ago
David Cernat 87ada3e763 [Client] Add CellController::isSameCell() and use it in LocalPlayer 8 years ago
Koncord d1df9dde14 [Server] Add processors to source groups 8 years ago
Koncord c35d5a2c6c [Master] Implement Master server 8 years ago
Koncord 4c939f6d0a [General] Split tes3mp components in CMakeLists by group 8 years ago
Koncord 546bb42abb [General] Add Master Packets 8 years ago
Koncord 5854f680f0 [General] Add Master data types 8 years ago
Koncord 41005b1add [General] Add orderChannel to packets 8 years ago
Andrei Kortunov c2706ac3e7 Merchant repair and travel window scroll fix 8 years ago
Andrei Kortunov bc9080d9d7 Removed 31 symbols cap from service menus 8 years ago
scrawl 0e37e71ea2 Merge pull request #1266 from akortunov/handsfallbackfix
Improved hands bodyparts selection fallback
8 years ago
Andrei Kortunov 4544caf7f3 Improved bodypart select fallback (fixes #2594) 8 years ago
scrawl 45d9e38616 Fix check for default material 8 years ago
David Cernat 4ebc9f1314 Merge pull request #204 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/mwdialogue/dialoguemanagerimp.cpp
8 years ago
Koncord a27815fa7d [General] Allow backslashes in add_component_dir to specify subgroups 8 years ago
MiroslavR 0737d6cb72 Merge pull request #1270 from Allofich/scriptfix
Check for NULL before running voice dialogue scripts
8 years ago
Allofich f34e35eb19 Check for NULL before running voice scripts
(Fixes #3834)
8 years ago
David Cernat a5484d237b Merge pull request #203 from OpenMW/master
Add OpenMW commits up to 21 Apr 2017, part 2
8 years ago
scrawl 8fbf9dc597 Merge pull request #1253 from akortunov/pinned
Remember "pinned" windows across game restarts
8 years ago
Andrei Kortunov 2b3b6d558f Move updatePinnedWindows() function to private section 8 years ago
scrawl 931310d2e2 Merge pull request #1268 from Allofich/anim
Add enabled check to animation script commands
8 years ago
Andrei Kortunov f986e3fafa Remove unused code 8 years ago
Allofich 143ee387cc Add enabled check to animation script commands
(Fixes #3793)
8 years ago
scrawl 7998583a7b Merge pull request #1267 from Allofich/scriptsign
Treat =< and => as == in scripts
8 years ago
scrawl fc56fc0b81 Merge pull request #1265 from akortunov/develop
Use "sLevel" GMST instead of hardcoded text in load game menu
8 years ago
Allofich e095817ac2 Treat =< and => as == in scripts
(Fixes #3744)
8 years ago
scrawl 2c879ddbbf Merge pull request #1264 from Allofich/script
Run scripts for voiced dialogue
8 years ago
Andrei Kortunov e717d046f2 Escaped class name string 8 years ago
scrawl 1956602aa2 Merge pull request #1262 from Allofich/warnings
Fix more warnings
8 years ago
Andrei Kortunov f67ec9c9ce Use sLevel GMST instead of hardcoded text in load game menu 8 years ago
David Cernat fec82dc033 Merge pull request #202 from OpenMW/master
Add OpenMW commits up to 21 Apr 2017
8 years ago
Andrei Kortunov 6c1e3a0618 Merged from upstream master 8 years ago
Allofich ff3cb18d4f Fix shadowing warnings 8 years ago
Allofich 60c67bc327 Run scripts for voiced dialogue
(Fixes #3787)
8 years ago
scrawl c2240e3af1 Call the WindowManager::updatePlayer after the startup script is run 8 years ago
scrawl 1ffb9e1bf3 Remove renderWorldMap() 8 years ago
scrawl bfdde0262f Merge pull request #1260 from akortunov/levitationfix
Purge existing levitation effects when levitation is disabled (fixes #3766)
8 years ago
scrawl 83dbe3ac99 Merge pull request #1261 from rhtucker/master
Added all settings that are in settings.cfg but were not yet documented.
8 years ago
scrawl 5eb12ea8b5 Merge pull request #1263 from akortunov/chargenfixes
Chargen menus fixes
8 years ago
Andrei Kortunov c65c643abe Fixed race menu skills layout 8 years ago
Allofich ff3e307059 Pass parameters by const reference 8 years ago
David Cernat 10d554af5b [Client] Make NPCs react to DedicatedPlayer & DedicatedActor attacks 8 years ago
Andrei Kortunov 0a90b48e60 Fixed progressbars layout in review menu 8 years ago
Andrei Kortunov 90d90b6d81 Fixed dynamic stats tooltips in review menu 8 years ago
Andrei Kortunov 39682d616c Merge branch 'master' of https://github.com/OpenMW/openmw into guifixes 8 years ago
Allofich 2e5fd74db0 Fix invalid iterator warning 8 years ago
Ryan Tucker 29cf296be5 Added all settings that are in settings.cfg but were not yet documented. 8 years ago
David Cernat edb155869b Merge pull request #201 from OpenMW/master
Add OpenMW commits up to 19 Apr 2017
8 years ago
David Cernat 6aa0fa85ab [Client] Send and read ActorAttack packets 8 years ago
David Cernat 2e8714afaa [Client] Rethink and restructure tes3mp combat code so it works for NPCs 8 years ago
scrawl df3b4fe6a5 Merge pull request #1259 from Allofich/warnings
Fix a few Cppcheck warnings
8 years ago
David Cernat 6c2bbd6608 [Client] Fix assignAttackTarget() not assigning LocalPlayer as target 8 years ago
Andrei Kortunov f0f1df3a96 Properly clear inventory 8 years ago
Allofich e87d2aa1af Remove unused function 8 years ago
Allofich 60a2625b89 Add parentheses to clarify calculations 8 years ago
scrawl 30081393a6 Add InventoryWindow::clear() as part of world cleanup 8 years ago
Allofich f299f26720 Remove unused variable 8 years ago
Allofich 5a00b239ac Reduce scope of variables 8 years ago
Allofich c655875584 Change mWaterEnabled from float to bool 8 years ago
David Cernat 61cedfa192 [Client] Add CellController methods to fetch Actors without needing Ptrs 8 years ago
Andrei Kortunov 04eb4ea6b6 Check for disabled levitation (fixes #3766) 8 years ago
David Cernat 0ef9e014eb [Client] Add resetAttack() and getSpellSuccess() to MechanicsHelper 8 years ago
scrawl 50f3794d12 Merge pull request #1258 from akortunov/drownfix
Fixed drowning widget initialization with non-default "fHoldBreathTime" GMST value
8 years ago
David Cernat f2e8e14665 [General] Add shouldSend boolean to mwmp::Attack 8 years ago
Andrei Kortunov 3c4c47d1e6 Reduced scope of fHoldBreathTime variable 8 years ago
David Cernat c3375ba86f [Client] Add MechanicsHelper::assignAttackTarget() 8 years ago
David Cernat 17c4b6d4de [Client] Add MechanicsHelper methods for easily getting Attacks from Ptr 8 years ago
Andrei Kortunov c3fd327bb2 Fixed drowning widget initialization 8 years ago
scrawl f90e5081f9 Merge pull request #1257 from akortunov/chargen
Chargen menus fixes
8 years ago
David Cernat 82e455f736 [Client] Organize headers 8 years ago
David Cernat 014ff7a059 [Client] Replace usage of Networking::isDedicatedPlayer() 8 years ago
David Cernat 1f6d05dfe5 [Client] Remove unused Networking::attack() method 8 years ago
David Cernat 53081a6a6f [Client] Clean up more checks by using PlayerList::isDedicatedPlayer() 8 years ago
Koncord 0a9768860b [Client] Add Processors to subgroups in cmakelists 8 years ago
Koncord 505905ab7d [General] Allow backslashes in add_openmw_dir to specify subgroups 8 years ago
Koncord 9cbb8af9d2 [Client] Remove WorldController from cmakelists 8 years ago
Koncord 67aba35d37 [Client] Simplify Processors 8 years ago
David Cernat cc2250815d [General] Add packet data for attacks on and by Actors 8 years ago
Koncord 1db30a65cb [Client] Remove unecessary calls 8 years ago
Koncord 6969742ef0 [Client] Enable actor processors 8 years ago
Koncord 2c62c501f6 [Client] Add & init Actor processors 8 years ago
Koncord 7ec897a829 [Client] Add ActorProcessor 8 years ago
David Cernat 29f9453554 [Client] Clean up headers in Networking 8 years ago
Stanislav Zhukov ad62968397 Merge pull request #200 from TES3MP/tes3mp-introduce-Client-processors
[Client] Use protected member instead local variable
8 years ago
Koncord 8128a5c39c [Client] Use protected member instead local variable 8 years ago
David Cernat 818fc459aa Merge pull request #199 from TES3MP/tes3mp-introduce-Client-processors
Add tes3mp-introduce-Client-processors commits up to 18 Apr 2017
8 years ago
Koncord 25fef1a7b8 [Client] FIx conflicts 8 years ago
Koncord 578d305d86 [Client] Enable world processors 8 years ago
Koncord 7dcaef5a5a [Client] Init world processors 8 years ago
Koncord fd3a7d2ad0 [Client] Add world processors 8 years ago
Koncord f0805ca6f7 [Client] Fix typo 8 years ago
Koncord 740bfea0b2 [Client] Use processors for player packets 8 years ago
Koncord e98fa6ad07 [Client] Add ProcessorInitializer 8 years ago
Koncord f09dc2b65b [Client] Add player processors 8 years ago
Koncord a6111b6599 [Client] Add PlayerProcessor & WorldProcessor 8 years ago
David Cernat 07c2d4251e [Client] Add and use mwmp::PlayerList::isDedicatedPlayer() 8 years ago
David Cernat b1a394cd02 [General] Change chars into bools in mwmp::Attack for clarity 8 years ago
David Cernat 7c45888f05 [Client] Reorder methods in DedicatedPlayer 8 years ago
David Cernat 0aaf68c994 [Client] Rename mwmp::Players into mwmp::PlayerList for clarity 8 years ago
David Cernat c05c456b11 [Client] Clean up parts of LocalPlayer and DedicatedPlayer 8 years ago
David Cernat a650683bae [General] Add and use Target struct in mwmp::Attack 8 years ago
David Cernat 9882ceedf3 [General] Remove attackerGuid from mwmp::Attack because it is redundant 8 years ago
David Cernat 340ad09c97 [Server] Rename variables in ProcessorPlayerAttack 8 years ago
David Cernat caf5428532 [General] Rename mwmp::Attack vars in preparation for Actor support 8 years ago
David Cernat 2050d06b31 [Client] Process PlayerAttack in MechanicsHelper::processAttack() 8 years ago
David Cernat 2397afc6ce [General] Move mwmp::Attack to BaseStructs 8 years ago
David Cernat cf155c9279 [Client] Add MechanicsHelper and move linear interpolation code to it 8 years ago
David Cernat 2565816b22 [Client] Delimit and clarify combat changes made by tes3mp
Additionally, revert unneeded small changes to the formatting of OpenMW code
8 years ago
David Cernat 9f226253d4 [General] Rename mwmp::Attack's refid into refId for consistency 8 years ago
David Cernat b09e6644a9 [Client] Prevent infinite guard arrest loops 8 years ago
Andrei Kortunov aac78d29a4 Service menus layout fixes 8 years ago
David Cernat f0f0b2dcc9 [General] Send and read ActorSpeech packets 8 years ago
David Cernat d2178e5414 [Client] Assign LocalActor movement settings before rotations get reset 8 years ago
David Cernat 1fb11dafef [General] Send and read ActorStatsDynamic packets 8 years ago
David Cernat 678edffb5a [Client] Rename updateDynamicStats() into updateStatsDynamic() 8 years ago
David Cernat 00aa8839d4 [General] Update CMakeLists in components folder 8 years ago
David Cernat 870886192b [General] Rename DYNAMICSTATS into STATS_DYNAMIC 8 years ago
David Cernat f64580bc10 [Client] Enable head rotation AI for DedicatedActors 8 years ago
David Cernat 8ebe7ed683 [Client] Remove isLocalActor (no longer needed) from LiveCellRefBase 8 years ago
David Cernat ca8fd1aa72 [General] Remove ActorHeadRotation packet because it would be too spammy 8 years ago
David Cernat 2872675f5e [General] Send and read ActorAnimPlay packets 8 years ago
David Cernat 56aeb85965 [Client] Update method names in ActorList 8 years ago
David Cernat 5c1d7f614a [Client] Rename readDrawStates() into readAnimFlags() 8 years ago
David Cernat bf17464074 Merge pull request #198 from OpenMW/master
Add OpenMW commits up to 14 Apr 2017
8 years ago
Andrei Kortunov c93cf822c7 Reviewmenu: read name, race, class and birthsign from player stats (fixes bug #2628) 8 years ago
Andrei Kortunov fb0c4700a4 Save a proto gender in racemenu 8 years ago
Andrei Kortunov 8581d68b8e Updated documentation for windows settings 8 years ago
scrawl f63b1e81cd Merge pull request #1228 from akortunov/master
Options to show hidden weapon parameters
8 years ago
Andrei Kortunov 00e06095c1 Updated documentation for new weapon tooltips options 8 years ago
scrawl 8f71b65d38 sceneutil/attach: inherit the UserDataContainer to avoid the resource cache from being cleared incorrectly 8 years ago
David Cernat e7960eee76 [General] Rename DrawState packets into AnimFlags ones for clarity 8 years ago
David Cernat 11a9e3bdb1 Merge pull request #197 from OpenMW/master
Add OpenMW commits up to 14 Apr 2017
8 years ago
scrawl 17125e6c4d Merge pull request #1256 from Allofich/equip
Adjustments to RemoveItem behavior
8 years ago
scrawl 26e48a0695 Merge pull request #1255 from akortunov/manafix
Fixed magicka calculation on chargen (bug #3694)
8 years ago
David Cernat de8d28e2c3 [Client] Improve logic for updating LocalActors & sending their packets 8 years ago
David Cernat 9e25a95861 [Server] Initialize processors for recently added ActorPackets 8 years ago
David Cernat 426d5a7fc2 [Client] Add missing usage of sendDrawStateActors() 8 years ago
Andrei Kortunov dc036e96d4 fixed magicka calculation on chargen (bug #3694) 8 years ago
Allofich 6e405aed8c Adjustments to RemoveItem behavior
(Fixes #3796)
8 years ago
David Cernat d2fe777f89 [General] Send and read ActorDrawState packets 8 years ago
David Cernat 9c731990a9 [Client] Use clearer var names in LocalPlayer::updateDrawStateAndFlags() 8 years ago
David Cernat 10ad5b2a99 [General] Remove BaseActor's AnimStates that are no longer needed 8 years ago
David Cernat c6cd0a2953 Merge pull request #196 from OpenMW/master while resolving conflicts
# Conflicts:
#	apps/openmw/mwmechanics/spellcasting.cpp
8 years ago
scrawl 8d8f293a65 Merge pull request #1246 from akortunov/develop
Menu improvements
8 years ago
scrawl d8943d911c Merge pull request #1254 from Allofich/warning
Remove unnecessary line
8 years ago
Allofich 56dfa615e1 Minor changes to getActorsSidingWith 8 years ago
Allofich fe4fb82646 Cache allies found while iterating engageCombat
(Fixes #3814)
8 years ago
scrawl caacf31a09 Merge pull request #1210 from Allofich/fix
Fix frame rate drop during actor update
8 years ago
Allofich 470988f9ef Minor changes to getActorsSidingWith 8 years ago
Andrei Kortunov c3d49d5ca5 Fixed inventory crash and skipmenu launch 8 years ago
Allofich 6272e1c674 Cache allies found while iterating engageCombat
(Fixes #3814)
8 years ago
Andrei Kortunov 1fe3a3efe4 Count dialog layout changes 8 years ago
Allofich 5020d03c78 Remove unnecessary line 8 years ago
Andrei Kortunov 72a16dc78b Merge branch 'master' into pinned since added PR #1250 8 years ago
Andrei Kortunov 506cc47c9d Add option to show reach and attack speed for melee weapons 8 years ago
scrawl 993860a4b1 Merge pull request #1250 from resilar/mapbutton
Hide WorldButton when in game mode
8 years ago
scrawl 8f335b3484 Merge pull request #1245 from akortunov/tgm
Vanilla-like tgm
8 years ago
David Cernat 0d196af685 [General] Add placeholders for 7 new ActorPackets 8 years ago
Marc Zinnschlag 59a9a7aafb updated changelog 8 years ago
Marc Zinnschlag 13517e723a increased version number 8 years ago
David Cernat 9852076590 [Client] Send all NPC data to newly arriving players 8 years ago
David Cernat 15f91e7825 [Client] Add CellController methods for getting and checking Cells 8 years ago
David Cernat 69f820f3a0 [Client] Rename CellController's getCell() into getCellStore() 8 years ago
David Cernat d14102716d [Client] Retool LocalActors and DedicatedActors for ActorPosition packet 8 years ago
David Cernat cbd2af972d [Client] Get movement settings for NPCs before they are reset 8 years ago
David Cernat 7700b82952 [General] Clean up BaseEvent and BaseStructs 8 years ago
David Cernat 7662297334 [General] Use ESM::Position to store BaseActor's movement 8 years ago
David Cernat 2709de83fb [Client] Use clearer variable names in LocalPlayer::UpdatePosition() 8 years ago
David Cernat 742d6f653a [General] Add ActorPosition packet 8 years ago
David Cernat b6c3830ea0 [General] Rename WorldObject's pos into position for consistency 8 years ago
Andrei Kortunov 95ce7637f3 Adds persisted pin (feature #2834, bug #2489) 8 years ago
David Cernat 174f316787 [General] Rename PacketActorFrame into PacketActorTest 8 years ago
David Cernat a5d0486c82 [General] Set actor data correctly 8 years ago
David Cernat 69bf2749a5 [Server] Add ActorFunctions for getting and setting basic actor data 8 years ago
David Cernat e9c3abc2c3 [Server] Reset variables more elegantly in WorldFunctions 8 years ago
David Cernat b9d68c0ab2 Merge pull request #195 from OpenMW/master
Add OpenMW commits up to 10 Apr 2017
8 years ago
scrawl 1cd901d113 Merge pull request #1248 from akortunov/missedsound
Adds missing recharge and repair sounds
8 years ago
scrawl 969dda2e41 Merge pull request #1252 from MiroslavR/correctActorModelPath
Fix correctActorModelPath
8 years ago
MiroslavR c962b6dd6d Fix correctActorModelPath to work properly when both backward and forward slashes are used in the path (Fixes #3822) 8 years ago
David Cernat c52084a028 [General] Use BaseActorLists in ActorPackets 8 years ago
David Cernat 1b714fbfa7 [Server] Make script functions more consistent 8 years ago
David Cernat a24ef3a25e [Server] Create ActorFunctions placeholder 8 years ago
David Cernat 4f3d05eed2 [General] Add ActorList class 8 years ago
David Cernat 070c6a3bd4 [General] Add ActorPacketController & make controller var names clearer 8 years ago
David Cernat a1d0b4908f [Client] Fix Travis CI build by not using nullptr 8 years ago
David Cernat c8a486de6c [Client] Fix Ptr initialization in mwmp::Cell 8 years ago
David Cernat 0ccbe70e61 [Client] Rename methods to make their purpose clearer 8 years ago
David Cernat 6da6c4e62d [Client] Prevent NPCs from attacking a player engaged in dialogue 8 years ago
David Cernat b883b4c7ce [Client] Reorder includes 8 years ago
David Cernat 3d6dc74bdc [Client] Fix logic for mwmp::Cell initialization 8 years ago
David Cernat 89a8ace41c [Server] Print debug info only for certain world packets 8 years ago
David Cernat 417284c701 [Client] Implement head rotation sync for NPCs 8 years ago
David Cernat b8ca2382c7 [General] Remove variables that are not going to be used in ActorFrame 8 years ago
David Cernat f52fc19762 [Client] Reorder methods and don't set variables that are no longer used 8 years ago
David Cernat d3f3fb5d05 [Client] Correctly implement movement animation sync for NPCs 8 years ago
David Cernat 5b43e62c50 [Client] Make it possible to get DedicatedActor from CellController 8 years ago
David Cernat 6557577c03 Merge pull request #193 from OpenMW/master
Add OpenMW commits up to 7 March 2017
8 years ago
David Cernat e6536c7473 [Client] Disable basic NPC sync in preparation for overhaul 8 years ago
David Cernat 1101ff1e28 [Client] Update DedicatedActors every frame to allow interpolation 8 years ago
Marc Zinnschlag 9d5c46027d Merge remote-tracking branch 'rcutmore/bug-3484' 8 years ago
David Cernat ae92117d21 [Client] Add missing return 8 years ago
David Cernat 18be1880f0 [Client] Make it possible to get LocalActor from CellController 8 years ago
David Cernat 10be52d40d [Client] Add localActorsToCells map to more easily find LocalActors 8 years ago
David Cernat e89265e469 [Client] Turn CellController's cellsActive into a map instead of a deque 8 years ago
Rob Cutmore 0ff56677f6 Remove unused code 8 years ago
Rob Cutmore 84bad9316d Editor: flag orbit camera for re-initialization
After swapping cells the orbit cam controller needs to be
re-initialized to properly center on the new cell.
8 years ago
David Cernat d829d219c3 [General] Add (very) partial animation sync for NPCs 8 years ago
David Cernat e8638d9884 [Client] Add basic position sync for NPCs 8 years ago
David Cernat c6c0e4acc9 [Server] Fix Cell::sendToLoaded() part 2, and fix Player::sendToLoaded() 8 years ago
David Cernat 8616323bae [Server] Fix logic in Cell::sendToLoaded() 8 years ago
David Cernat fae3bcaeeb [Server] Send actor packets only to players in the same cell 8 years ago
David Cernat 89ed318d3c [Client] Remove usage of nullptr that Travis CI is getting stuck on 8 years ago
David Cernat 67ec81ad0c [Client] Use utility function for converting strings in mwmp::Cell 8 years ago
David Cernat d4a12856ee [Client] Enable AI for LocalActors 8 years ago
David Cernat 0d766a7a04 [Client] Add and use mwmp::Cell class 8 years ago
David Cernat 9beaf9b7a1 [Client] Initialize and update LocalActors while their cells are active 8 years ago
David Cernat 8df9d55331 [Client] Create placeholder DedicatedActor class 8 years ago
David Cernat d24cde16dd [General] Add simple BaseActor and LocalActor classes 8 years ago
David Cernat 679e790d8d [Client] Rename WorldController into CellController to avoid confusion with Networking's WorldPacketController 8 years ago
David Cernat ba8341bfb5 [Server] Add SendActorAuthority() script function 8 years ago
David Cernat c2d6265ffd [Client] Reorder methods in WorldEvent, placing packet senders at bottom 8 years ago
David Cernat 9759764699 [Client] Clean up getting and resetting of WorldEvent 8 years ago
David Cernat d7a760490e [Client] Simplify sending of world packets, part 2 8 years ago
David Cernat b55a3d5eb2 [Client] Add placeholder editActors() method for random creature sync 8 years ago
David Cernat 4abe295a80 [Client] Simplify sending of world packets by adding WorldEvent methods 8 years ago
David Cernat 1d23a48a42 [Client] Print mpNums when objects are found in a cell 8 years ago
David Cernat 0df14320e0 [Client] Set mMpNum to 0 for ManualRef 8 years ago
David Cernat 6c60c9c78e [Client] Clean up debug messages for when objects are found in a cell 8 years ago
David Cernat bb9ea6ccd4 [Client] Also include list of creatures in reply to ActorList 8 years ago
David Cernat ca92be14a5 [Client] Reply to ActorList request with list of NPCs 8 years ago
David Cernat 8f18dc87c4 [General] Model ActorList on Container more closely by including action 8 years ago
David Cernat c65e94587c [Server] Add SendActorList() script function 8 years ago
David Cernat 8c2469bf6d [General] Add placeholder ActorList, ActorAuthority & ActorFrame packets 8 years ago
Rob Cutmore f7664d4bb9 Editor: reset camera after cell drag and drop
When replacing a viewed cell via drag and drop the camera position is
not updated to better view the new cell. This flags the camera position
as not being set so a better default is set.
8 years ago
David Cernat 316720e710 [Server] Rename getNextMpNum() into incrementMpNum() 8 years ago
David Cernat 068835ba71 [Server] Add OnMpNumIncrement() script callback 8 years ago
David Cernat 3b34b9cd3e [Server] Fix typo in MiscellaneousFunctions 8 years ago
David Cernat 2716078a30 [Server] Add GetCurrentMpNum() and SetCurrentMpNum() script functions 8 years ago
David Cernat 8b8c01f389 [General] Make ID_OBJECT_PLACE take effect only when sent back by server 8 years ago
David Cernat 2bd81c3de0 [Client] Use mpNum for every WorldObject 8 years ago
David Cernat 82f38dcfad [Server] Set mpNum in AddWorldObject() 8 years ago
David Cernat ddedcac510 [General] Read and write mpNums in world packets 8 years ago
David Cernat 4644235cf6 [Client] Use mpNum in exact searches for objects 8 years ago
David Cernat 665fe09fd0 [Server] Add GetObjectMpNum() and SetObjectMpNum() script functions 8 years ago
David Cernat 8cc61b6048 [General] Generate mpNums on the server when forwarding ID_OBJECT_PLACE 8 years ago
David Cernat 31cd836558 [General] Small tweaks to debug info 8 years ago
David Cernat 06acd3cbc4 [Client] Add a multiplayer object index and matching methods to CellRef 8 years ago
David Cernat d242f3790f [Server] Don't try to send late-arriving container packets about now unloaded cells 8 years ago
David Cernat e5cf632e1d [Client] Stop creating new reference numbers for placed/spawned objects 8 years ago
David Cernat d8712ee1ea [Server] Fix script crashes by reusing BaseEvent in WorldProcessor 8 years ago
David Cernat 5ff40c5563 [Server] Make coding style consistent 8 years ago
David Cernat 106c9edead Merge pull request #192 from OpenMW/master
Add OpenMW commits up to 3 Apr 2017
8 years ago
David Cernat 174937f412 [Server] Add LogMessage() and LogAppend() script functions 8 years ago
def 785b3c3d01 Hide WorldButton when in game mode 8 years ago
MiroslavR 395e97cf40 Remove evil "implicit GetJournalIndex" hack from expression parser 8 years ago
Koncord 1d2a6d9056 [Server] Rename dontRead to avoidReading 8 years ago
Koncord 47924f5bb0 [Server] Move packet.Read() to parent 8 years ago
Koncord 4daf471874 [General] Add dontRead flag 8 years ago
Koncord ead92fff61 [Server] Move setPlayer() to PlayerProcessor 8 years ago
Koncord 0317e2523b [Server] Remove unused code 8 years ago
Koncord c8fb7d9c1a [Server] Move packet.Send(true) to parent class 8 years ago
Koncord 9ecc70d17c [Server] Fix ID in ProcessorContainer 8 years ago
Koncord f5600c508f [Server] Move all world handlers to WorldProcessors 8 years ago
Koncord 3ab25fb3f1 [Server] Move player processors to processors/player 8 years ago
Koncord 0a1041bf56 [Server] Add WorldProcessor 8 years ago
Andrei Kortunov 31bd70f334 Added missed recharge and repair sounds 8 years ago
Pieter van der Kloet 8d76903392 Ini-importer progress bar fills the whole width of the ui element now 8 years ago
David Cernat e7b5097c13 [Client] Print plugin paths correctly for Windows 8 years ago
David Cernat dff52d8fbe Merge pull request #191 from OpenMW/master
Add OpenMW commits up to 31 Mar 2017
8 years ago
Koncord 3b52549a3d [Server] Rename init_processors to ProcessorInitializer 8 years ago
Koncord e8a5fd1cd0 [Server] Move all message handlers to PlayerProcessors 8 years ago
Koncord 020167df08 [Server] Add PlayerProcessor 8 years ago
Koncord b01734888f [Server] Add missing header 8 years ago
Koncord 48a59cf9e9 [General] Add new class BasePacketProcessor 8 years ago
Marc Zinnschlag ab8294b281 Merge remote-tracking branch 'rcutmore/bug-2838' 8 years ago
Andrei Kortunov df5a43363a Confirmation dialogs size fix 8 years ago
Rob Cutmore 343f2cb81d Editor: add creator for body parts
Added creator subclass for body parts to allow adding first person
parts. IDs for first person body parts are expected to end with ".1st".
8 years ago
Koncord 691dc75401 [Browser] Fix sign compare warnings 8 years ago
scrawl 3c9f3a0f7f Merge pull request #1242 from Allofich/warnings
Fix AppVeyor warnings
8 years ago
scrawl 6a745cb2cc Fix text colorMode (Bug #3815) and render bin 8 years ago
Andrei Kortunov e5a0f89934 List scroll fix 8 years ago
David Cernat 7647715dac Merge pull request #190 from OpenMW/master
Add OpenMW commits up to 27 Mar 2017
8 years ago
Andrei Kortunov edadcb338c Savegame dialog improvements 8 years ago
scrawl 9e7ade4ba4 Merge pull request #1244 from akortunov/develop
MyGUI vertical alignment
8 years ago
Allofich 3780d94214 Cast LAND_SIZE to integer to avoid linking error 8 years ago
Allofich db2f97f308 Fix shadowing warning 8 years ago
Andrei Kortunov a35d4334c3 Encumberance text fix 8 years ago
Andrei Kortunov c9cf0ec977 Buttons and widgets captions vertical alignment 8 years ago
Andrei Kortunov 7d09a5d644 Progress bars vertical alignment 8 years ago
scrawl a036a98fd0 Merge pull request #1243 from akortunov/develop
Journal improvements
8 years ago
scrawl b064dd29cc Fix reset of blend function (Bug #3811) 8 years ago
Andrei Kortunov 658ab5e941 Minor journal improvements 8 years ago
Allofich 2a505b427d Remove second LAND_SIZE definition 8 years ago
scrawl 2a74f79bf1 Merge pull request #1240 from Allofich/follow
Adjust AI follow distances
8 years ago
Allofich 6253a5218e Adjust AI follow distances
(Fixes #3225)
8 years ago
scrawl 0a061d45b7 Merge pull request #1239 from akortunov/projectilefix
Disable explosion effect for 0-range projectiles (bug #3730)
8 years ago
scrawl f3a7be3339 Merge pull request #1238 from LennyPenny/patch-1
Ignore /MSVC* (Feature #3795)
8 years ago
scrawl 82e0bac297 Merge pull request #1237 from MiroslavR/haggling_fix
Fix selling success chance (Fixes #3802)
8 years ago
Rob Cutmore 77bf1efc1a Editor: Fix labels for creator user inputs 8 years ago
Rob Cutmore 8d4441bb5e Editor: document subclasses without ID checks
- Removes ID validation for PathgridCreator.
- Adds comments explaining why ID validation isn't used in some cases.
8 years ago
Andrei Kortunov 14b59e0e4b Vanilla-like tgm (fixes #3798) 8 years ago
Andrei Kortunov 860b556713 Disables explosion effect for 0-range projectiles (fixes #3730) 8 years ago
Lennart Bernhardt e56089aff4 Ignore /MSVC* (Feature #3795) 8 years ago
MiroslavR da6b28eb40 Fix selling success chance (Fixes #3802) 8 years ago
scrawl 97dbd07ed2 Merge pull request #1236 from akortunov/guifixes
Minor GUI fixes
8 years ago
Andrei Kortunov 7bd0c74aa8 Fixes mWatchedTimeToStartDrowning initialization (fixes bug #3801) 8 years ago
Andrei Kortunov e383e4d023 Disabled hit overlay for damage/absorb mana/fatigue spells 8 years ago
scrawl 9653b99add Merge pull request #1235 from akortunov/guifixes
Vanilla style progress bars
8 years ago
Andrei Kortunov 4daa88351b Vanilla style progress bars 8 years ago
scrawl 373bd78cf3 Merge pull request #1233 from akortunov/guifixes
Vanilla style drowning widget
8 years ago
scrawl a60302f6d6 Merge pull request #1234 from LennyPenny/patch-1
Ignore /deps (Feature #3795)
8 years ago
Lennart Bernhardt 76548a5e4c Ignore /deps (Feature #3795)
Implements https://bugs.openmw.org/issues/3795
8 years ago
Andrei Kortunov b89fdcfd27 Vanilla style drowning widget (partially fixes bug #3801). 8 years ago
David Cernat 1d83098619 [Build] Use slilghtly retooled version of CMake's default FindLua51 8 years ago
David Cernat c10dd1b002 Merge pull request #188 from OpenMW/master
Add OpenMW commits up to 24 Mar 2017
8 years ago
scrawl 338592b99b Don't clear the animation queue when turning (Bug #3581)
Otherwise, the turnAnimationThreshold would make it difficult to estimate when we can start playing the animation.
8 years ago
scrawl a5d7b36c28 Don't clear idle animation when movement ends (Bug #3581)
This caused problems when AiWander tried to start an idle animation in the frame after movement stops.
8 years ago
scrawl c611ddba8d Remove stray term 8 years ago
scrawl f676b62711 Remove unused variable 8 years ago
scrawl f230df3d1c Merge pull request #1232 from akortunov/tooltipfix
Tooltip maximum width cap
8 years ago
Andrei Kortunov 1a47b9727b Changed tooltip maximum width (bug #3800) 8 years ago
scrawl 02c6c1897e Merge pull request #1230 from Allofich/stats
Change bounds behavior of stat script commands
8 years ago
scrawl 7d0eeee568 Merge pull request #1229 from Allofich/appveyor
Fix AppVeyor not finding curl
8 years ago
scrawl 7075a3a99b Merge pull request #1231 from Allofich/tooltips
Show names on combat actors when RMB GUI is active
8 years ago
Marc Zinnschlag 77edb20783 Merge remote-tracking branch 'origin/master' 8 years ago
Marc Zinnschlag 021cef74ff Merge remote-tracking branch 'rcutmore/bug-3345' 8 years ago
Allofich 5282556ae0 Show names on combat actors when RMB GUI is active
Fixes (#3797)
8 years ago
Allofich 57aeec59d5 Change bounds behavior of stat script commands
Fixes (#3776)
8 years ago
Allofich 6c686fa242 Fix "curl: command not found" error
Fixes (#3799)
8 years ago
Rob Cutmore 3714c2a0f2 Editor: add ID validator to pathgrid input 8 years ago
Rob Cutmore 207695e094 Editor: switch input for pathgrid creator
Switched from QComboBox to DropLineEdit for pathgrid creator input.
This allows the input the use auto-complete and be a drop target from
the cells table.
8 years ago
David Cernat ab92b9f795 Merge pull request #187 from OpenMW/master
Add OpenMW commits up to 20 Mar 2017
8 years ago
scrawl c992cb6e82 Fix texture not being applied on rendering the composite map (Fixes #3791) 8 years ago
Marc Zinnschlag c2ecd47acd Merge remote-tracking branch 'rcutmore/bug-3345' 8 years ago
scrawl 4a1406c638 Merge pull request #1226 from MiroslavR/scdt_size
Downgrade SCDT size mismatch error to a warning
8 years ago
MiroslavR 06dc94552f Log a warning if size in SCHD (script header) does not match SCDT (bytecode) size instead of failing 8 years ago
Rob Cutmore 0dcb6a9bd4 Editor: update pathgrid creator input on changes
When data changes the cell input for pathgrid creator is repopulated
with valid choices. This handles the case where a cell is added or
removed, and also when a cell's pathgrid is added or completely
removed.
8 years ago
Rob Cutmore 491fd3d0be Editor: set combo box events for pathgrid creator
- Handles when combo box should automatically gain or lose focus.
- Checks user input when combo box selection changes.
8 years ago
Rob Cutmore 95d164a6e6 Editor: use combo box when creating pathgrids
Instead of using QLineEdit for user input, use a QComboBox populated
with valid choices. This prevents user from being able to create a
pathgrid for a non-existent cell.
8 years ago
Andrei Kortunov 1286754fb3 Add a new option to show arrow damage (feature #2923) 8 years ago
David Cernat 5eb183bacf Merge pull request #186 from OpenMW/master
Add OpenMW commits up to 15 Mar 2017
8 years ago
scrawl f151eccc23 Update AUTHORS.md 8 years ago
scrawl 3a2a5a90bd Merge pull request #1225 from akortunov/master
Disable weapons and spells cycling in GUI mode
8 years ago
scrawl a070551af3 Attempt to fix naming conflict on windows 8 years ago
scrawl 3d58ba7301 Fix boolean test 8 years ago
Andrei Kortunov eb81ab5b24 Disables weapon and spells cycling in GUI mode (bugs #2409, #2483, #2645) 8 years ago
David Cernat 60037e4081 Merge pull request #185 from OpenMW/master
Add OpenMW commits up to 14 Mar 2017
8 years ago
scrawl e987fe85d0 Add abort flag to TerrainPreloadItem 8 years ago
scrawl aed4cbaf29 Update settings documentation 8 years ago
scrawl 42e9891504 Fix issues caused by loading multiple views into the same terrain View 8 years ago
scrawl 97ed999097 Fix cleanup issue 8 years ago
scrawl fd215caa02 Add local LandCache to cut down on store searches 8 years ago
scrawl 088d5604bf Use a shader if required to display the composite map
Fixes composited terrain not respecting the 'clamp lighting' setting.
8 years ago
scrawl 7f5beb3172 Remove unused includes 8 years ago
scrawl 5044816770 Remove unused code 8 years ago
scrawl b66c2abfe3 Build the bounding sphere in the loading thread (only relevant for TerrainGrid) 8 years ago
scrawl 9e9c028f1d Skip light collection for far away terrain 8 years ago
scrawl 0782839a42 Avoid redundant culling tests on the transform/drawable 8 years ago
scrawl fb8ac06524 Reduce the minSize of quad tree nodes for better performance 8 years ago
scrawl a041546b54 Use the quad tree's minSize in the LodCallback 8 years ago
scrawl c22fde2bcd Preload terrain while reading savegame 8 years ago
scrawl e4e8821902 Refactor update of lodFlags 8 years ago
scrawl 2aa09639a9 Re-enable terrain intersections 8 years ago
scrawl 9371100fde Reuse the intersection visitor and set a traversal number to allow the terrain component to manage its view more efficiently 8 years ago
scrawl db00d47ca2 Hold a ref to the intersection visitor's view if possible 8 years ago
scrawl 59bf100907 Fill exteriorPositions in preloadFastTravel 8 years ago
scrawl 11bee6ee35 Avoid compiling composite maps that are no longer referenced 8 years ago
scrawl 03c07d3bd5 Remove old code 8 years ago
scrawl 86e75f0987 Preload terrain even when cell preloading is disabled 8 years ago
scrawl 9eed7fa6f5 Fix composite map when force shaders is enabled 8 years ago
scrawl d055dc25bf Add custom traversal for local map camera to avoid loading terrain nodes that are exactly outside the border to another cell 8 years ago
scrawl 7d50b6c2e2 Add QuadTreeWorld::cacheCell to preload cells at max LOD for local maps 8 years ago
scrawl 6ccb6009ee Use the View-based preloading for TerrainGrid as well 8 years ago
scrawl 3c29e2dbeb Refactor ownership of terrain views 8 years ago
scrawl 28fd492711 Don't use terrain LOD for the map camera 8 years ago
scrawl e7a0878c10 Add CompositeMapRenderer info to the stats panel 8 years ago
scrawl ec0b743123 Revert "Change ordering of LocalMap nodes to make sure they are traversed before the CompositeMapRenderer."
This reverts commit 7d72c70c93ee3c0cc3d00d37b22c339d0103cd19.
8 years ago
scrawl c921620ef3 Compile the drawables of a composite map one by one to avoid frame drops for larger maps 8 years ago
scrawl 47ca8aeee5 Use the time elapsed instead of # compiled as limit 8 years ago
scrawl 8a6d909b22 Fix composite map being compiled twice 8 years ago
scrawl 683e625c6c Rewrite CompositeMapRenderer to be based on Drawable and share the FBO 8 years ago
scrawl 4549196b31 Use the new way of terrain preloading in CellPreloader/Scene 8 years ago
scrawl 4baa795152 Add preloading implementation to QuadTreeWorld 8 years ago
scrawl 9db71e3f62 Recompute the LOD stitching when the view changes 8 years ago
scrawl ef704db877 Fix reset of changed flag 8 years ago
scrawl 1c15686353 Remove non required use of WorkQueue 8 years ago
scrawl 19d516cbda Use the QuadTreeWorld based on distant terrain setting now that it sort of works. 8 years ago
scrawl 433900fca5 Fix waiting on initial quad tree build 8 years ago
scrawl 4dbd224249 Hide the terrain in non-exterior cells 8 years ago
scrawl 2580de11a4 Refactor ownership of ViewDataMap 8 years ago
scrawl 5a3c645c89 Enable lazy compiling of composite maps 8 years ago
scrawl 99e18f0d68 Clear the ViewData on exit 8 years ago
scrawl bb991850da Add LOD stitches 8 years ago
scrawl 6bd286d924 Fix unnecessary resizing in ViewData 8 years ago
scrawl 8c151364df Add special handling for CullVisitor to QuadTreeWorld.
- Cull only against bounding box, not bounding sphere, as this appears to perform better.
- Also traverse into non visible nodes to compute their LOD, this is to avoid nodes having to be loaded in when the player turns the view around, and will avoid unnecessary refs/unrefs of rendering data in the View. This should probably be turned off at some point for static cameras, such as the local maps.
8 years ago
scrawl f19a88be9d Reject QuadTreeNodes with invalid bounds 8 years ago
scrawl 7d004bf757 Preliminary rendering of QuadTreeWorld 8 years ago
scrawl e36bdb490e Add view data structure for efficient collection of LOD nodes to use for a given camera/intersection 8 years ago
scrawl 0efc54c749 Subdivide the composite maps 8 years ago
scrawl c684860e3b Change ordering of LocalMap nodes to make sure they are traversed before the CompositeMapRenderer. 8 years ago
scrawl 0756fc4ae6 Optimize getBlendmaps for the general case that most points are within the given cell 8 years ago
scrawl 81c9853fe9 Fix handling in getBlendmaps when the chunk is >1 ESM::Cell 8 years ago
scrawl b384087e28 Fix handling in fillVertexBuffers when the chunk is >1 ESM::Cell 8 years ago
scrawl 819860081f Remove custom bounding box 8 years ago
scrawl ce8c4ad4f5 Add quad tree implementation (no rendering yet) 8 years ago
scrawl 2d549d088e Get the world size from the ESM::Land store 8 years ago
scrawl 14225a42c6 Remove unused pointer to IncrementalCompileOperation 8 years ago
scrawl c487df0abb Move updateTextureFiltering and material into the base class 8 years ago
scrawl 5eff286c71 Use separate node mask and parent for CompositeMapRenderer to allow the loading screen to pre compile composite maps. 8 years ago
scrawl 7e4450da55 Change the renderOrder of composite maps to ensure they are updated before water reflections or other cameras that may be using it. 8 years ago
scrawl b1d4bb5708 Add CompositeMapRenderer
Temporarily render all terrain using composite maps for testing purposes
8 years ago
scrawl e323b2fa7b Use the SceneManager's ShaderManager 8 years ago
scrawl 0fc465da59 Store the min/max height in LandData 8 years ago
scrawl 051c17a184 Make reportStats const 8 years ago
scrawl 5fb854036d Use a forward declaration to avoid having to workaround Qt MOC
Don't think that guard was still needed, but a forward declaration is better anyways.
8 years ago
scrawl 80a0398f9d Load LandData into the LandObject to avoid threading conflicts when the same data is being loaded by two threads 8 years ago
scrawl 20d30bb8d7 Move mDataLoaded into LandData 8 years ago
scrawl 16b5cadd9e Fix order of operations w.r.t clearing cache 8 years ago
scrawl 2c68ed4fb4 Remove no longer required use of UnrefQueue as the new resource manager will naturally clear the cache from the worker thread 8 years ago
scrawl 35d53acc65 Factor out terrain chunk loading/caching into a new resource manager 8 years ago
scrawl 274690f790 Refactor BufferCache to allow caching buffers of different sizes 8 years ago
scrawl 9a3a64f0c4 Add resource manager for ESM::Land to allow data to be unloaded when no longer required 8 years ago
scrawl b898315962 cellpreloader: abort all tasks first before waiting 8 years ago
scrawl 5f76317807 Wait for completion of CreateMapItem on exit to avoid potential threading issue 8 years ago
scrawl 804f873649 terrain: factor out texture caching into a separate class 8 years ago
scrawl 4cd4457d21 Add support for Functors to ObjectCache 8 years ago
scrawl 9d72d9f0c9 Change order of operations in SceneManager::updateCache to allow deleting of StateSets that just got unreferenced by the scene 8 years ago
scrawl eef63a880a terrain: use a custom drawable for multi-pass render instead of osgFX::Effect
osgFX::Effect is awkward to use because of the lazy-definition of passes, no support for compileGLObjects, useless 'Technique' abstraction and having to define silly methods like 'effectAuthor()'

Handling the multi-pass rendering inside the Drawable also avoids redundant culling tests against the same bounding box for each pass.
8 years ago
scrawl 34130fc5cc Fix handling in LightListCallback when the node is not a Group 8 years ago
scrawl b78a9f89af Refactor LightListCallback to allow for integration in custom Drawables. 8 years ago
scrawl ccfebdd2c3 Set the underwater fog relative to default view distance 8 years ago
David Cernat bbedf888b2 [Documentation] Add subreddit link to readme 8 years ago
David Cernat 0c4447dfd0 [Documentation] Update readme and credits 8 years ago
David Cernat d94850fbdf Merge pull request #184 from OpenMW/master
Code style
8 years ago
scrawl fe439e7bbf Add missing default material state for character preview 8 years ago
scrawl 37c71c15f2 Remove redundant state 8 years ago
scrawl 4c9bbce1e2 Fix node mask being reset 8 years ago
scrawl c1fe9f2a89 Avoid warping the mouse cursor more than necessary
Apparently, the SDL_WarpMouseInWindow can be very expensive (anywhere from 0.1-5ms) due to XSync() in the implementation.

This was causing no-grab=1 configurations to suffer from terrible stuttering when turning the view.
8 years ago
David Cernat e0234dc362 Merge pull request #183 from OpenMW/master while resolving conflicts
# Conflicts:
#	.travis.yml
#	CMakeLists.txt
8 years ago
MiroslavR a8517c34eb Code style 8 years ago
scrawl a556475fae Explicitely set the user data type to avoid const/non-const mismatch 8 years ago
scrawl 5de5be77f3 Fix Ptr/ConstPtr userdata mismatch (Bug #3784) 8 years ago
scrawl 928e2061f7 Remove redundant tolower 8 years ago
scrawl 13a6070629 Remove warning spam in skeleton.cpp
If the root bone is missing, that is caused by all bones being missing which will have been logged already.
8 years ago
scrawl e093a30736 Update AUTHORS.md 8 years ago
scrawl a9b5ea4f8c Merge pull request #1224 from schwitzerm/master
fix skill window update
8 years ago
Mitchell Schwitzer 421b92ae05 fix styling & add missing lines regarding max proficency 8 years ago
Mitchell Schwitzer f31e5ba85e fix display maximum proficency reached 8 years ago
Mitchell Schwitzer 7960d5a9a7 fix skill progress bar v2
both widgets display their own progess indicator. it was being set for
value (when you hovered over the level of your skill, eg the "5" in
"Acrobatics    5"), but not for the name.

this fixes that, but the progress information is being stored/displayed
by two different widgets for one skill
8 years ago
Mitchell Schwitzer 465b7361e1 fix skill window update
invoke winMgr->updateSkillArea() in mechanicsmanagerimp.cpp after looping
over ESM::Skill::SkillEnum if any updates have occurred.
8 years ago
Koncord 3d294500ba [General] Use std::replace() instead for-each in Utils::convertPath() 8 years ago
scrawl 809f5cd01b Fix bad override 8 years ago
scrawl 21aad00612 Don't pass key events to the viewer when Alt modifier is held
Fixes the stats panel briefly showing up when using 'Alt+F4' to exit.
8 years ago
scrawl fc95a45cb6 Don't pass repeat key events to the viewer's eventQueue 8 years ago
scrawl 70841ea3b7 Merge pull request #1222 from OpenMW/macos-nightly
Setup macOS nightly builds on Travis
8 years ago
scrawl a6429a2518 Merge pull request #1223 from MiroslavR/rifle_sounds
Fix for incorrect gun sounds with the Clean Hunter Rifles mod
8 years ago
Nikolay Kasyanov 7f429f26e1 Allow getting available version information even when clone is shallow 8 years ago
Nikolay Kasyanov e24cb0fe5d [macOS, CI] Configure deployment of nightly builds to FTP 8 years ago
MiroslavR af1fe64408 GetSoundPlaying called on an equipped item now also looks for sounds played by the equipping actor (Fixes #3781) 8 years ago
David Cernat 90387aedea Merge pull request #182 from OpenMW/master
Add OpenMW commits up to 5 Mar 2017
8 years ago
Koncord 2a723279b1 [Client] Send ID_GAME_PREINIT packet 8 years ago
Koncord 2c26ed8aee [Server] Process ID_GAME_PREINIT packet 8 years ago
Koncord 435d9780a7 [General] Fix PacketPreInit 8 years ago
Koncord 690211ad99 [General] Extract BaseEvent & BasePlayer from packets to functions
Move Send and Read functions to BasePacket
8 years ago
Nikolay Kasyanov 57c5ecfba8 [macOS, CI] Use most recent prebuilt dependencies 8 years ago
Nikolay Kasyanov f1abc5d7cb [macOS, CI] Use Release configuration 8 years ago
Nikolay Kasyanov 672aa80dc5 Revert "Make Travis build test-release-build-on-travis"
4eb5183d73
8 years ago
Koncord 6076346df4 [Client] Add Networking::preInit() method 8 years ago
Koncord 0c1905e842 [General] Add PreInit packet 8 years ago
Koncord 0d53a6916d [General] Move repeated code in Packet() to base class 8 years ago
David Cernat df051a777a Merge pull request #181 from OpenMW/master
Add OpenMW commits up to 4 Mar 2017
8 years ago
scrawl c1b1d502ee Fix up commit 330e5fefd1 8 years ago
scrawl 4123398cbc Change no-grab setting to respect the value given 8 years ago
scrawl 7eb48ea83b Don't wrap mouse to window bounds when the gamepad axis did not move and fix off-by-one error 8 years ago
scrawl 4051018862 optimizer: fix FlattenStaticTransformsVisitor not respecting the is permissible callback 8 years ago
scrawl 5866f0f80b Add OPENMW_OPTIMIZE env variable to help debugging optimizer-related issues
Example:

OPENMW_OPTIMIZE=OFF
OPENMW_OPTIMIZE="~FLATTEN_STATIC_TRANSFORMS"
8 years ago
scrawl 42a04de37c Fix a crash that occurred when a carried light fails to be attached. 8 years ago
scrawl 2776727794 Allow gamepad and mouse/keyboard to be used at the same time (Fixes #3093) 8 years ago
scrawl 29556a1802 More consistent wording of errors/warnings
A Warning indicates a potential problem in the content file(s) that the user told OpenMW to load. E.g. this might cause an object to not display at all or as intended, however the rest of the game will run fine.

An Error, however, is more likely to be a bug with the engine itself - it means that basic assumptions have been violated and the engine might not run correctly anymore.

The above mostly applies to errors/warnings during game-play; startup issues are handled differently: when a file is completely invalid/corrupted to the point that the engine can not start, that might cause messages that are worded as Error due to the severity of the issue but are not necessarily the engine's fault.

Hopefully, being a little more consistent here will alleviate confusion among users as to when a log message should be reported and to whom.
8 years ago
Nikolay Kasyanov 4eb5183d73 Make Travis build test-release-build-on-travis 8 years ago
David Cernat 82dcec5ec5 [Server] Use consistent pattern for script function category names 8 years ago
Koncord cea1425db1 [Client] Remove redundant newlines & keep ~120 columns 8 years ago
Koncord 4015c3e9a9 [Client] Use constant instead magic value in Lerp function 8 years ago
Koncord a10cf4360c [Client] Print all esm/esp files in load queue with idx & CRC32 checksum 8 years ago
Koncord 9199446edd [Client] Add Files::Collections to Main::init() arguments 8 years ago
Koncord c353e18645 [General] Move Utils from server to components
Rewrite CRC32 functions to the Boost equivalent
8 years ago
David Cernat 9cffc1f661 [Client] Don't open up main menu when player's death animation finishes 8 years ago
David Cernat 0d32bf5943 [General] Add extra death debug, don't request data from player on death 8 years ago
David Cernat c4b11a1251 [Client] Remove now unused sendData() and BitStream declarations 8 years ago
David Cernat cf6de6c474 [Client] Update old packet-sending code in LocalPlayer and GUIChat 8 years ago
David Cernat a2ef39c655 Merge pull request #178 from OpenMW/master
Add OpenMW commits up to 2 Mar 2017
8 years ago
David Cernat 6887930c04 [Client] Let scripts handle respawn point instead of hardcoding it 8 years ago
scrawl 599f0a36eb Update AUTHORS.md 8 years ago
scrawl 1692b7f38e Merge pull request #1209 from dhustkoder/master
Added ConstContainerStoreIterator (Task #3092)
8 years ago
scrawl 62cc091414 Fix incorrect setting of TexMat in terrain material 8 years ago
scrawl a759ef5d2e Leave the MyGUI::PixelFormat as Unknown when loading from file as its not required. 8 years ago
scrawl 8fc7942d64 Refactor osgMyGUI::OSGTexture to store width/height inside the object 8 years ago
David Cernat db8218545f Merge pull request #177 from OpenMW/master
Add OpenMW commits up to 1 Mar 2017
8 years ago
scrawl d8505e4f48 Fix a multithreading crash caused by modification of live Geometry 8 years ago
scrawl 2873c10284 Clean the object root of StateSets and hidden nodes 8 years ago
scrawl 4e0011bfc8 Improve NPC loading performance by caching the cleaned objectRoot 8 years ago
scrawl 058681ad73 ShaderVisitor: avoid reset of rig geometry when not required 8 years ago
Rafael Moura 6c2ce2b2a1 Porting more ContainerStoreIterator usage to const version #4
removed const_cast revision
8 years ago
Rafael Moura 7fa2703715 Porting more ContainerStoreIterator usage to const version #3 8 years ago
David Cernat 03984685e5 [Client] Remove unnecessary type specifiers 8 years ago
David Cernat 5c269a5f8d [General] Rename ID_GAME_DIE and ID_GAME_RESURRECT 8 years ago
David Cernat 4aaa9ed694 [General] Update version to 0.5.2 8 years ago
Rafael Moura 18a4b64f1a Porting more ContainerStoreIterator usage to const version #2 8 years ago
David Cernat e6bc7ad463 [General] Make all flying players fly correctly, including TCL users 8 years ago
David Cernat 48125913c3 Merge pull request #175 from OpenMW/master
Add OpenMW commits up to 27 Feb 2017
8 years ago
Koncord 0442ebd607 [Server] Remove redundant newlines & keep ~120 columns 8 years ago
Koncord 83d0cbedb2 [Server] Remove redundant type casts 8 years ago
Koncord 8f96ca22c1 [Server] Fix typo in RakNet name 8 years ago
Koncord aa91126ce3 [Server] Minor cleanup in Networking 8 years ago
David Cernat 02487dce13 [Client] Prevent invalid race used by other player from freezing client 8 years ago
scrawl 0772a03e98 Print the object ID that animateCollisionShapes did not find the node for 8 years ago
scrawl 1402e0b872 Don't optimize billboard nodes (Fixes #3774) 8 years ago
David Cernat 4110fac629 Merge pull request #174 from OpenMW/master
Add OpenMW commits up to 26 Feb 2017, part 2
8 years ago
David Cernat 8c8414f098 [Client] Spawn DedicatedPlayer in center of exterior cell 0,0 8 years ago
scrawl d4781d419f Merge pull request #1220 from MiroslavR/tcl_collision
Fix actors colliding with noclipping player
8 years ago
scrawl 706ac45c76 Fix missing particles caused by shallow copy of ParticleSystemController 8 years ago
scrawl 9b27ec4945 Remove redundant and ambiguous NiNode::makeBone()
Ambiguous because a skeleton can have multiple skinned meshes, with their own bone weights/bind matrix each.
8 years ago
scrawl aba3c471a9 nifloader: fix setting of dataVariance for non-controlled bones and refactor the code 8 years ago
Rafael Moura 05cc69f6f1 Porting more ContainerStoreIterator usage to const version 8 years ago
David Cernat 684517e02f [Server] Fix Miscellaneous category of script functions 8 years ago
David Cernat 0baada0aa2 [Server] Add GetLastPlayerId() script function in Miscellaneous category 8 years ago
David Cernat deb10919ab [Server] Delete cells that become empty when a player disconnects 8 years ago
scrawl 6f4c03aa32 Avoid retrieving setting every frame 8 years ago
David Cernat 048ddf6a34 [Server] Use LOG_APPEND for older debug messages in Cell 8 years ago
David Cernat a58601fb2b [Client] Delineate tes3mp-only code more clearly, part 1 8 years ago
David Cernat 341ec28b1f [Client] Don't allow actors to cast spells that don't exist on client 8 years ago
David Cernat 5d30ba0abd Merge pull request #173 from OpenMW/master
Add OpenMW commits up to 26 Feb 2017
8 years ago
David Cernat fb93ce57f9 [Server] Fix debug message 8 years ago
David Cernat ae37daca70 [Server] Ensure no information exchange takes place with nullptr player 8 years ago
David Cernat 7f51ca5298 [Server] Add permanent debug to Cell and CellController 8 years ago
MiroslavR 498a3d450b Fix actors colliding with noclipping player 8 years ago
scrawl 5caf53b6a3 optimizer: avoid reordering nodes
Fixes an osgParticle cloning issue.

(Fixes #3773)
8 years ago
scrawl a95773beef Fix unnecessary copy of ParticleSystem in SceneUtil::CopyOp 8 years ago
scrawl 585524805f Add 'tri ' variant of part filters to optimizer ignore list 8 years ago
Rafael Moura 9963601484 Porting code to ConstContainerStoreIterator #1 8 years ago
Rafael Moura ecbde7b11e Added ConstContainerStoreIterator
using base template for ContainerStoreIterators

less template arguments for ContainerStoreIteratorBase
8 years ago
HiPhish c822b1fa35 Write chapters about tables and record types.
The "Tables", "Record Types" and "Record Filters" chapters have been
adapted from the already existing manual.
8 years ago

@ -0,0 +1,16 @@
root = true
[*.cpp]
indent_style = space
indent_size = 4
insert_final_newline = true
[*.hpp]
indent_style = space
indent_size = 4
insert_final_newline = true
[*.glsl]
indent_style = space
indent_size = 4
insert_final_newline = false

7
.gitignore vendored

@ -8,6 +8,10 @@ makefile
build*
prebuilt
##windows build process
/deps
/MSVC*
## doxygen
Doxygen
@ -23,6 +27,8 @@ Doxygen
.directory
.idea
cmake-build-*
files/windows/*.aps
cmake-build-*
## qt-creator
CMakeLists.txt.user*
@ -76,6 +82,5 @@ moc_*.cxx
*ui_playpage.h
*.[ao]
*.so
gamecontrollerdb.txt
openmw.appdata.xml
venv/

@ -0,0 +1,69 @@
stages:
- build
Debian:
tags:
- docker
- linux
image: gcc
cache:
key: apt-cache
paths:
- apt-cache/
before_script:
- export APT_CACHE_DIR=`pwd`/apt-cache && mkdir -pv $APT_CACHE_DIR
- apt-get update -yq
- apt-get -o dir::cache::archives="$APT_CACHE_DIR" install -y cmake libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev libsdl2-dev libqt4-dev libopenal-dev libopenscenegraph-3.4-dev libunshield-dev libtinyxml-dev
# - apt-get install -y libmygui-dev libbullet-dev # to be updated to latest below because stretch is too old
- curl http://ftp.us.debian.org/debian/pool/main/b/bullet/libbullet-dev_2.87+dfsg-2_amd64.deb -o libbullet-dev_2.87+dfsg-2_amd64.deb
- curl http://ftp.us.debian.org/debian/pool/main/b/bullet/libbullet2.87_2.87+dfsg-2_amd64.deb -o libbullet2.87_2.87+dfsg-2_amd64.deb
- curl http://ftp.us.debian.org/debian/pool/main/m/mygui/libmygui.openglplatform0debian1v5_3.2.2+dfsg-1_amd64.deb -o libmygui.openglplatform0debian1v5_3.2.2+dfsg-1_amd64.deb
- curl http://ftp.us.debian.org/debian/pool/main/m/mygui/libmyguiengine3debian1v5_3.2.2+dfsg-1_amd64.deb -o libmyguiengine3debian1v5_3.2.2+dfsg-1_amd64.deb
- curl http://ftp.us.debian.org/debian/pool/main/m/mygui/libmygui-dev_3.2.2+dfsg-1_amd64.deb -o libmygui-dev_3.2.2+dfsg-1_amd64.deb
- dpkg --ignore-depends=libmygui.ogreplatform0debian1v5 -i *.deb
stage: build
script:
- cores_to_use=$((`nproc`-2)); if (( $cores_to_use < 1 )); then cores_to_use=1; fi
- mkdir build; cd build; cmake -DCMAKE_BUILD_TYPE=MinSizeRel ../
- make -j$cores_to_use
- DESTDIR=artifacts make install
artifacts:
paths:
- build/artifacts/
MacOS:
tags:
- macos
- xcode
except:
- branches # because our CI VMs are not public, MRs can't use them and timeout
stage: build
allow_failure: true
script:
- rm -fr build/* # remove anything in the build directory
- CI/before_install.osx.sh
- CI/before_script.osx.sh
- cd build; make -j2 package
artifacts:
paths:
- build/OpenMW-*.dmg
Windows:
tags:
- win10
- msvc2017
except:
- branches # because our CI VMs are not public, MRs can't use them and timeout
stage: build
allow_failure: true
script:
# - env # turn on for debugging
- sh %CI_PROJECT_DIR%/CI/before_script.msvc.sh -c Release -p x64 -v 2017 -V
- SET msBuildLocation="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe"
- call %msBuildLocation% MSVC2017_64\OpenMW.sln /t:Build /p:Configuration=Release /m:%NUMBER_OF_PROCESSORS%
- 7z a OpenMW_MSVC2017_64_%CI_BUILD_REF_NAME%_%CI_BUILD_ID%.zip %CI_PROJECT_DIR%\MSVC2017_64\Release\
cache:
paths:
- deps
artifacts:
paths:
- "*.zip"

@ -1,59 +1,75 @@
os:
- linux
# - osx
osx_image: xcode8.2
osx_image: xcode9.4
language: cpp
sudo: required
dist: trusty
dist: xenial
branches:
only:
- master
- coverity_scan
- /openmw-.*$/
- /^[0-9]+\.[0-9]+\.[0-9]+.*$/
env:
global:
- macos_qt_formula=qt@5.5
- secure: NZmvVuA0O9NJXVQ12tXQZHDJC2mbFgYNFcsicw0DgW1It2Nk5hxIkF0pfu4/Z59mhQuOPgRVjl5b0FKy2Axh0gkWc1DJEXGwNaiW5lpTMNWR1LJG5rxa8LrDUpFkycpbzfAFuTUZu5z3iYVv64XzELvBuqNGhPMu1LeBnrlech0jFNjkR9p5qtJGWb8zYcPMCC57rig8a9g1ABoVYS6UXjrKpx0946ZLRsE5ukc9pXsypGwPmOMyfzZkxxzIqFaxoE5JIEdaJTWba/6Za315ozYYIi/N35ROI1YAv5GHRe/Iw9XAa4vQpbDzjM7ZSsZdTvvQsSU598gD2xC6jFUKSrpW6GZKwM2x236fZLGnOk5Uw7DUbG+AwpcEmxBwoy9PjBl9ZF3tJykI0gROewCy8MODhdsVMKr1HGIMVBIJySm/RnNqtoDbYV8mYnSl5b8rwJiCajoiR8Zuv4CIfGneeH1a3DOQDPH/qkDsU6ilzF4ANsBlMUUpgY653KBMBmTlNuVZSH527tnD7Fg6JgHVuSQkTbRa1vSkR7Zcre604RZcAoaEdbX3bhVDasPPghU/I742L0RH3oQNlR09pPBDZ8kG7ydl4aPHwpCWnvXNM1vgxtGvnYLztwrse7IoaRXRYiMFmrso78WhMWUDKgvY4wV9aeUu0DtnMezZVIQwCKg=
# The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
# via the "travis encrypt" command using the project repo's public key
- secure: 1QK0yVyoOB+gf2I7XzvhXu9w/5lq4stBXIwJbVCTjz4Q4XVHCosURaW1MAgKzMrPnbFEwjyn5uQ8BwsvvfkuN1AZD0YXITgc7gyI+J1wQ/p/ljxRxglakU6WEgsTs2J5z9UmGac4YTXg+quK7YP3rv+zuGim2I2rhzImejyzp0Ym3kRCnNcy+SGBsiRaevRJMe00Ch8zGAbEhduQGeSoS6W0rcu02DNlQKiq5NktWsXR+TWWWVfIeIlQR/lbPsCd0pdxMaMv2QCY0rVbwrYxWJwr/Qe45dAdWp+8/C3PbXpeMSGxlLa33nJNX4Lf/djxbjm8KWk6edaXPajrjR/0iwcpwq0jg2Jt6XfEdnJt35F1gpXlc04sxStjG45uloOKCFYT0wdhIO1Lq+hDP54wypQl+JInd5qC001O7pwhVxO36EgKWqo8HD+BqGDBwsNj2engy9Qcp3wO6G0rLBPB3CrZsk9wrHVv5cSiQSLMhId3Xviu3ZI2qEDA+kgTvxrKrsnMj4bILVCyG5Ka2Mj22wIDW9e8oIab9oTdujax3DTN1GkD6QuOAGzwDsNwGASsgfoeZ+FUhgM75RlBWGMilgkmnF7EJ0oAXLEpjtABnEr2d4qHv+y08kOuTDBLB9ExzCIj024dYYYNLZrqPKx0ncHuCMG2QNj2aJAJEZtj1rQ=
addons:
apt:
sources:
- sourceline: 'ppa:openmw/openmw'
- sourceline: 'ppa:rakhimov/boost'
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.6
packages: [
# Dev
clang-3.6, libunshield-dev, libtinyxml-dev,
g++-6,
cmake, clang-6.0, libunshield-dev, libtinyxml-dev,
g++-8,
# Tests
libgtest-dev, google-mock,
# Boost
libboost-filesystem-dev, libboost-program-options-dev, libboost-system-dev, libboost-thread-dev,
libboost-filesystem1.61-dev, libboost-program-options1.61-dev, libboost-system1.61-dev,
# FFmpeg
libavcodec-dev, libavformat-dev, libavutil-dev, libswscale-dev,
# Audio & Video
libsdl2-dev, qtbase5-dev, libopenal-dev,
# The other ones from OpenMW ppa
libbullet-dev, libswresample-dev, libopenscenegraph-3.4-dev, libmygui-dev
libbullet-dev, libswresample-dev, libopenscenegraph-3.4-dev, libmygui-dev,
# tes3mp stuff
libboost1.61-dev, libqt5opengl5-dev, libluajit-5.1-dev
]
coverity_scan:
project:
name: "TES3MP/openmw-tes3mp"
description: "<Your project description here>"
notification_email: stas5978@gmail.com
build_command_prepend: "cmake . -DBUILD_UNITTESTS=FALSE"
notification_email: koncord@tes3mp.com
build_command_prepend: "cmake . -DBUILD_UNITTESTS=FALSE -DBUILD_OPENCS=FALSE -DBUILD_BSATOOL=FALSE -DBUILD_ESMTOOL=FALSE -DBUILD_MWINIIMPORTER=FALSE -DBUILD_LAUNCHER=FALSE"
build_command: "make -j3"
branch_pattern: coverity_scan
matrix:
include:
- os: linux
env:
ANALYZE="scan-build-3.6 --use-cc clang-3.6 --use-c++ clang++-3.6 "
- ANALYZE="scan-build-6.0 --use-cc clang-6.0 --use-c++ clang++-6.0 "
- MATRIX_CC="CC=clang-6.0 && CXX=clang++-6.0"
compiler: clang
- os: linux
env:
- MATRIX_CC="CC=gcc-8 && CXX=g++-8"
- os: linux
env:
- MATRIX_CC="CC=clang-6.0 && CXX=clang++-6.0"
allow_failures:
- env: ANALYZE="scan-build-3.6 --use-cc clang-3.6 --use-c++ clang++-3.6 "
- env:
- MATRIX_CC="CC=clang-6.0 && CXX=clang++-6.0"
- env:
- ANALYZE="scan-build-6.0 --use-cc clang-6.0 --use-c++ clang++-6.0 "
- MATRIX_CC="CC=clang-6.0 && CXX=clang++-6.0"
before_install:
before_install:
- ./CI/before_install.${TRAVIS_OS_NAME}.sh
before_script: ./CI/before_script.${TRAVIS_OS_NAME}.sh
script:

@ -15,13 +15,16 @@ Programmers
Adam Hogan (aurix)
Aesylwinn
aegis
AHSauge
Aleksandar Jovanov
Alex Haddad (rainChu)
Alex McKibben
alexanderkjall
Alexander Nadeau (wareya)
Alexander Olofsson (Ace)
Alex S (docwest)
Allofich
Andrei Kortunov (akortunov)
AnyOldName3
Aussiemon
Austin Salgat (Salgat)
@ -33,12 +36,17 @@ Programmers
Ben Shealy (bentsherman)
Bret Curtis (psi29a)
Britt Mathis (galdor557)
Capostrophic
cc9cii
Cédric Mocquillon
Chris Boyce (slothlife)
Chris Robinson (KittyCat)
Cory F. Cohen (cfcohen)
Cris Mihalache (Mirceam)
crussell187
DanielVukelich
darkf
David Cernat (davidcernat)
devnexen
Dieho
Dmitry Shkurskiy (endorph)
@ -49,19 +57,23 @@ Programmers
Edmondo Tommasina (edmondo)
Eduard Cot (trombonecot)
Eli2
elsid
Emanuel Guével (potatoesmaster)
eroen
escondida
Evgeniy Mineev (sandstranger)
Federico Guerra (FedeWar)
Fil Krynicki (filkry)
Finbar Crago(finbar-crago)
Florian Weber (Florianjw)
Gašper Sedej
gugus/gus
Hallfaer Tuilinn
Haoda Wang (h313)
hristoast
Internecine
Jacob Essex (Yacoby)
Jannik Heller (scrawl)
Jacob Essex (Yacoby)
Jake Westrip (16bitint)
Jason Hooks (jhooks)
jeaye
Jeffrey Haines (Jyby)
@ -73,6 +85,7 @@ Programmers
Jordan Ayers
Jordan Milne
Jules Blok (Armada651)
julianko
Julien Voisin (jvoisin/ap0)
Karl-Felix Glatzer (k1ll)
Kevin Poitra (PuppyKevin)
@ -82,6 +95,7 @@ Programmers
lazydev
Leon Krieg (lkrieg)
Leon Saunders (emoose)
Łukasz Gołębiewski (lukago)
logzero
lohikaarme
Lukasz Gromanowski (lgro)
@ -100,12 +114,15 @@ Programmers
Michael Papageorgiou (werdanith)
Michał Bień (Glorf)
Michał Moroz (dragonee)
Miloslav Číž (drummyfish)
Miroslav Puda (pakanek)
MiroslavR
Mitchell Schwitzer (schwitzerm)
naclander
Narmo
Nathan Jeffords (blunted2night)
NeveHanter
Nialsy
Nikolay Kasyanov (corristo)
nobrakal
Nolan Poe (nopoe)
@ -115,21 +132,28 @@ Programmers
Pi03k
Pieter van der Kloet (pvdk)
pkubik
PlutonicOverkill
Radu-Marius Popovici (rpopovici)
Rafael Moura (dhustkoder)
rdimesio
rexelion
riothamus
Rob Cutmore (rcutmore)
Robert MacGregor (Ragora)
Rohit Nirmal
Roman Melnik (Kromgart)
Roman Proskuryakov (kpp)
Roman Siromakha (elsid)
Sandy Carter (bwrsandman)
Scott Howard
scrawl
Sebastian Wick (swick)
Sergey Shambir
ShadowRadiance
Siimacore
sir_herrbatka
smbas
spycrab
Stefan Galowicz (bogglez)
Stanislav Bobrov (Jiub)
stil-t
@ -137,7 +161,11 @@ Programmers
Sylvain Thesnieres (Garvek)
t6
terrorfisch
thegriglat
Thomas Luppi (Digmaster)
tri4ng1e
unelsson
Will Herrmann (Thunderforge)
Tom Mason (wheybags)
Torben Leif Carrington (TorbenC)
viadanna
@ -148,6 +176,7 @@ Programmers
Documentation
-------------
Adam Bowen (adamnbowen)
Alejandro Sanchez (HiPhish)
Bodillium
Bret Curtis (psi29a)
@ -206,7 +235,7 @@ Artwork
Necrod - OpenMW Logo
Mickey Lyle (raevol) - Wordpress Theme
Tom Koenderink (Okulo), SirHerrbatka, crysthala, Shnatsel - OpenMW Editor Icons
Tom Koenderink (Okulo), SirHerrbatka, crysthala, Shnatsel, Lamoot - OpenMW Editor Icons
Inactive Contributors
---------------------

@ -1,3 +1,431 @@
0.45.0
------
Bug #1990: Sunrise/sunset not set correct
Bug #2131: Lustidrike's spell misses the player every time
Bug #2222: Fatigue's effect on selling price is backwards
Bug #2326: After a bound item expires the last equipped item of that type is not automatically re-equipped
Bug #2455: Creatures attacks degrade armor
Bug #2562: Forcing AI to activate a teleport door sometimes causes a crash
Bug #2626: Resurrecting the player does not resume the game
Bug #2772: Non-existing class or faction freezes the game
Bug #2835: Player able to slowly move when overencumbered
Bug #2852: No murder bounty when a player follower commits murder
Bug #2862: [macOS] Can't quit launcher using Command-Q or OpenMW->Quit
Bug #2872: Tab completion in console doesn't work with explicit reference
Bug #2971: Compiler did not reject lines with naked expressions beginning with x.y
Bug #3249: Fixed revert function not updating views properly
Bug #3374: Touch spells not hitting kwama foragers
Bug #3486: [Mod] NPC Commands does not work
Bug #3591: Angled hit distance too low
Bug #3629: DB assassin attack never triggers creature spawning
Bug #3876: Landscape texture painting is misaligned
Bug #3897: Have Goodbye give all choices the effects of Goodbye
Bug #3911: [macOS] Typing in the "Content List name" dialog box produces double characters
Bug #3950: FLATTEN_STATIC_TRANSFORMS optimization breaks animated collision shapes
Bug #3993: Terrain texture blending map is not upscaled
Bug #3997: Almalexia doesn't pace
Bug #4036: Weird behaviour of AI packages if package target has non-unique ID
Bug #4047: OpenMW not reporting its version number in MacOS; OpenMW-CS not doing it fully
Bug #4110: Fixed undo / redo menu text losing the assigned shortcuts
Bug #4125: OpenMW logo cropped on bugtracker
Bug #4215: OpenMW shows book text after last EOL tag
Bug #4221: Characters get stuck in V-shaped terrain
Bug #4230: AiTravel package issues break some Tribunal quests
Bug #4251: Stationary NPCs do not return to their position after combat
Bug #4274: Pre-0.43 death animations are not forward-compatible with 0.43+
Bug #4286: Scripted animations can be interrupted
Bug #4291: Non-persistent actors that started the game as dead do not play death animations
Bug #4293: Faction members are not aware of faction ownerships in barter
Bug #4307: World cleanup should remove dead bodies only if death animation is finished
Bug #4311: OpenMW does not handle RootCollisionNode correctly
Bug #4327: Missing animations during spell/weapon stance switching
Bug #4358: Running animation is interrupted when magic mode is toggled
Bug #4368: Settings window ok button doesn't have key focus by default
Bug #4378: On-self absorb spells restore stats
Bug #4393: NPCs walk back to where they were after using ResetActors
Bug #4416: Handle exception if we try to play non-music file
Bug #4419: MRK NiStringExtraData is handled incorrectly
Bug #4426: RotateWorld behavior is incorrect
Bug #4429: [Windows] Error on build INSTALL.vcxproj project (debug) with cmake 3.7.2
Bug #4431: "Lock 0" console command is a no-op
Bug #4432: Guards behaviour is incorrect if they do not have AI packages
Bug #4433: Guard behaviour is incorrect with Alarm = 0
Bug #4451: Script fails to compile when using "Begin, [ScriptName]" syntax
Bug #4452: Default terrain texture bleeds through texture transitions
Bug #4453: Quick keys behaviour is invalid for equipment
Bug #4454: AI opens doors too slow
Bug #4457: Item without CanCarry flag prevents shield autoequipping in dark areas
Bug #4458: AiWander console command handles idle chances incorrectly
Bug #4459: NotCell dialogue condition doesn't support partial matches
Bug #4460: Script function "Equip" doesn't bypass beast restrictions
Bug #4461: "Open" spell from non-player caster isn't a crime
Bug #4464: OpenMW keeps AiState cached storages even after we cancel AI packages
Bug #4469: Abot Silt Striders Model turn 90 degrees on horizontal
Bug #4474: No fallback when getVampireHead fails
Bug #4475: Scripted animations should not cause movement
Bug #4479: "Game" category on Advanced page is getting too long
Bug #4480: Segfault in QuickKeysMenu when item no longer in inventory
Bug #4489: Goodbye doesn't block dialogue hyperlinks
Bug #4490: PositionCell on player gives "Error: tried to add local script twice"
Bug #4494: Training cap based off Base Skill instead of Modified Skill
Bug #4495: Crossbow animations blending is buggy
Bug #4496: SpellTurnLeft and SpellTurnRight animation groups are unused
Bug #4497: File names starting with x or X are not classified as animation
Bug #4503: Cast and ExplodeSpell commands increase alteration skill
Bug #4510: Division by zero in MWMechanics::CreatureStats::setAttribute
Bug #4519: Knockdown does not discard movement in the 1st-person mode
Bug #4539: Paper Doll is affected by GUI scaling
Bug #4545: Creatures flee from werewolves
Bug #4551: Replace 0 sound range with default range separately
Bug #4553: Forcegreeting on non-actor opens a dialogue window which cannot be closed
Bug #4557: Topics with reserved names are handled differently from vanilla
Bug #4558: Mesh optimizer: check for reserved node name is case-sensitive
Bug #4563: Fast travel price logic checks destination cell instead of service actor cell
Bug #4565: Underwater view distance should be limited
Bug #4573: Player uses headtracking in the 1st-person mode
Bug #4574: Player turning animations are twitchy
Bug #4575: Weird result of attack animation blending with movement animations
Bug #4576: Reset of idle animations when attack can not be started
Feature #2606: Editor: Implemented (optional) case sensitive global search
Feature #3083: Play animation when NPC is casting spell via script
Feature #3103: Provide option for disposition to get increased by successful trade
Feature #3276: Editor: Search - Show number of (remaining) search results and indicate a search without any results
Feature #3641: Editor: Limit FPS in 3d preview window
Feature #3703: Ranged sneak attack criticals
Feature #4012: Editor: Write a log file if OpenCS crashes
Feature #4222: 360° screenshots
Feature #4256: Implement ToggleBorders (TB) console command
Feature #4324: Add CFBundleIdentifier in Info.plist to allow for macOS function key shortcuts
Feature #4345: Add equivalents for the command line commands to Launcher
Feature #4404: Editor: All EnumDelegate fields should have their items sorted alphabetically
Feature #4444: Per-group KF-animation files support
Feature #4466: Editor: Add option to ignore "Base" records when running verifier
Feature #4488: Make water shader rougher during rain
Feature #4509: Show count of enchanted items in stack in the spells list
Feature #4512: Editor: Use markers for lights and creatures levelled lists
Feature #4548: Weapon priority: use the actual chance to hit the target instead of weapon skill
Feature #4549: Weapon priority: use the actual damage in weapon rating calculations
Feature #4550: Weapon priority: make ranged weapon bonus more sensible
Task #2490: Don't open command prompt window on Release-mode builds automatically
Task #4545: Enable is_pod string test
0.44.0
------
Bug #1428: Daedra summoning scripts aren't executed when the item is taken through the inventory
Bug #1987: Some glyphs are not supported
Bug #2254: Magic related visual effects are not rendered when loading a saved game
Bug #2485: Journal alphabetical index doesn't match "Morrowind content language" setting
Bug #2703: OnPCHitMe is not handled correctly
Bug #2829: Incorrect order for content list consisting of a game file and an esp without dependencies
Bug #2841: "Total eclipse" happens if weather settings are not defined.
Bug #2897: Editor: Rename "Original creature" field
Bug #3278: Editor: Unchecking "Auto Calc" flag changes certain values
Bug #3343: Editor: ID sorting is case-sensitive in certain tables
Bug #3557: Resource priority confusion when using the local data path as installation root
Bug #3587: Pathgrid and Flying Creatures wrong behaviour abotWhereAreAllBirdsGoing
Bug #3603: SetPos should not skip weather transitions
Bug #3618: Myar Aranath total conversion can't be started due to capital-case extension of the master file
Bug #3638: Fast forwarding can move NPC inside objects
Bug #3664: Combat music does not start in dialogue
Bug #3696: Newlines are accompanied by empty rectangle glyph in dialogs
Bug #3708: Controllers broken on macOS
Bug #3726: Items with suppressed activation can be picked up via the inventory menu
Bug #3783: [Mod] Abot's Silt Striders 1.16 - silt strider "falls" to ground and glides on floor during travel
Bug #3863: Can be forced to not resist arrest if you cast Calm Humanoid on aggroed death warrant guards
Bug #3884: Incorrect enemy behavior when exhausted
Bug #3926: Installation Wizard places Morrowind.esm after Tribunal/Bloodmoon if it has a later file creation date
Bug #4061: Scripts error on special token included in name
Bug #4111: Crash when mouse over soulgem with a now-missing soul
Bug #4122: Swim animation should not be interrupted during underwater attack
Bug #4134: Battle music behaves different than vanilla
Bug #4135: Reflecting an absorb spell different from vanilla
Bug #4136: Enchanted weapons without "ignore normal weapons" flag don't bypass creature "ignore normal weapons" effect
Bug #4143: Antialiasing produces graphical artifacts when used with shader lighting
Bug #4159: NPCs' base skeleton files should not be optimized
Bug #4177: Jumping/landing animation interference/flickering
Bug #4179: NPCs do not face target
Bug #4180: Weapon switch sound playing even though no weapon is switched
Bug #4184: Guards can initiate dialogue even though you are far above them
Bug #4190: Enchanted clothes changes visibility with Chameleon on equip/unequip
Bug #4191: "screenshot saved" message also appears in the screenshot image
Bug #4192: Archers in OpenMW have shorter attack range than archers in Morrowind
Bug #4210: Some dialogue topics are not highlighted on first encounter
Bug #4211: FPS drops after minimizing the game during rainy weather
Bug #4216: Thrown weapon projectile doesn't rotate
Bug #4223: Displayed spell casting chance must be 0 if player doesn't have enough magicka to cast it
Bug #4225: Double "Activate" key presses with Mouse and Gamepad.
Bug #4226: The current player's class should be default value in the class select menu
Bug #4229: Tribunal/Bloodmoon summoned creatures fight other summons
Bug #4233: W and A keys override S and D Keys
Bug #4235: Wireframe mode affects local map
Bug #4239: Quick load from container screen causes crash
Bug #4242: Crime greetings display in Journal
Bug #4245: Merchant NPCs sell ingredients growing on potted plants they own
Bug #4246: Take armor condition into account when calcuting armor rating
Bug #4250: Jumping is not as fluid as it was pre-0.43.0
Bug #4252: "Error in frame: FFmpeg exception: Failed to allocate input stream" message spam if OpenMW encounter non-music file in the Music folder
Bug #4261: Magic effects from eaten ingredients always have 1 sec duration
Bug #4263: Arrow position is incorrect in 3rd person view during attack for beast races
Bug #4264: Player in god mode can be affected by some negative spell effects
Bug #4269: Crash when hovering the faction section and the 'sAnd' GMST is missing (as in MW 1.0)
Bug #4272: Root note transformations are discarded again
Bug #4279: Sometimes cells are not marked as explored on the map
Bug #4298: Problem with MessageBox and chargen menu interaction order
Bug #4301: Optimizer breaks LOD nodes
Bug #4308: PlaceAtMe doesn't inherit scale of calling object
Bug #4309: Only harmful effects with resistance effect set are resistable
Bug #4313: Non-humanoid creatures are capable of opening doors
Bug #4314: Rainy weather slows down the game when changing from indoors/outdoors
Bug #4319: Collisions for certain meshes are incorrectly ignored
Bug #4320: Using mouse 1 to move forward causes selection dialogues to jump selections forward.
Bug #4322: NPC disposition: negative faction reaction modifier doesn't take PC rank into account
Bug #4328: Ownership by dead actors is not cleared from picked items
Bug #4334: Torch and shield usage inconsistent with original game
Bug #4336: Wizard: Incorrect Morrowind assets path autodetection
Bug #4343: Error message for coc and starting cell shouldn't imply that it only works for interior cells
Bug #4346: Count formatting does not work well with very high numbers
Bug #4351: Using AddSoulgem fills all soul gems of the specified type
Bug #4391: No visual indication is provided when an unavailable spell fails to be chosen via a quick key
Bug #4392: Inventory filter breaks after loading a game
Bug #4405: No default terrain in empty cells when distant terrain is enabled
Bug #4410: [Mod] Arktwend: OpenMW does not use default marker definitions
Bug #4412: openmw-iniimporter ignores data paths from config
Bug #4413: Moving with 0 strength uses all of your fatigue
Bug #4420: Camera flickering when I open up and close menus while sneaking
Bug #4424: [macOS] Cursor is either empty or garbage when compiled against macOS 10.13 SDK
Bug #4435: Item health is considered a signed integer
Bug #4441: Adding items to currently disabled weapon-wielding creatures crashes the game
Feature #1786: Round up encumbrance value in the encumbrance bar
Feature #2694: Editor: rename "model" column to make its purpose clear
Feature #3870: Editor: Terrain Texture Brush Button
Feature #3872: Editor: Edit functions in terrain texture editing mode
Feature #4054: Launcher: Create menu for settings.cfg options
Feature #4064: Option for fast travel services to charge for the first companion
Feature #4142: Implement fWereWolfHealth GMST
Feature #4174: Multiple quicksaves
Feature #4407: Support NiLookAtController
Feature #4423: Rebalance soul gem values
Task #4015: Use AppVeyor build artifact features to make continuous builds available
Editor: New (and more complete) icon set
0.43.0
------
Bug #815: Different settings cause inconsistent underwater visibility
Bug #1452: autosave is not executed when waiting
Bug #1555: Closing containers with spacebar doesn't work after touching an item
Bug #1692: Can't close container when item is "held"
Bug #2405: Maximum distance for guards attacking hostile creatures is incorrect
Bug #2445: Spellcasting can be interrupted
Bug #2489: Keeping map open not persisted between saves
Bug #2594: 1st person view uses wrong body texture with Better bodies
Bug #2628: enablestatreviewmenu command doen't read race, class and sign values from current game
Bug #2639: Attacking flag isn't reset upon reloading
Bug #2698: Snow and rain VFX move with the player
Bug #2704: Some creature swim animations not being used
Bug #2789: Potential risk of misunderstanding using the colored "owned" crosshair feature
Bug #3045: Settings containing '#' cannot be loaded
Bug #3097: Drop() doesn't work when an item is held (with the mouse)
Bug #3110: GetDetected doesn't work without a reference
Bug #3126: Framerate nosedives when adjusting dialogue window size
Bug #3243: Ampersand in configuration files isn't escaped automatically
Bug #3365: Wrong water reflection along banks
Bug #3441: Golden saint always dispelling soul trap / spell priority issue
Bug #3528: Disposing of corpses breaks quests
Bug #3531: No FPS limit when playing bink videos even though "framerate limit" is set in settings.cfg
Bug #3647: Multi-effect spells play audio louder than in Vanilla
Bug #3656: NPCs forget where their place in the world is
Bug #3665: Music transitions are too abrupt
Bug #3679: Spell cast effect should disappear after using rest command
Bug #3684: Merchants do not restock empty soul gems if they acquire filled ones.
Bug #3694: Wrong magicka bonus applied on character creation
Bug #3706: Guards don't try to arrest the player if attacked
Bug #3709: Editor: Camera is not positioned correctly on mode switches related to orbital mode
Bug #3720: Death counter not cleaned of non-existing IDs when loading a game
Bug #3744: "Greater/lesser or equal" operators are not parsed when their signs are swapped
Bug #3749: Yagrum Bagarn moves to different position on encountering
Bug #3766: DisableLevitation does not remove visuals of preexisting effect
Bug #3787: Script commands in result box for voiced dialogue are ignored
Bug #3793: OpenMW tries to animate animated references even when they are disabled
Bug #3794: Default sound buffer size is too small for mods
Bug #3796: Mod 'Undress for me' doesn't work: NPCs re-equip everything
Bug #3798: tgm command behaviour differs from vanilla
Bug #3804: [Mod] Animated Morrowind: some animations do not loop correctly
Bug #3805: Slight enchant miscalculation
Bug #3826: Rendering problems with an image in a letter
Bug #3833: [Mod] Windows Glow: windows textures are much darker than in original game
Bug #3835: Bodyparts with multiple NiTriShapes are not handled correctly
Bug #3839: InventoryStore::purgeEffect() removes only first effect with argument ID
Bug #3843: Wrong jumping fatigue loss calculations
Bug #3850: Boethiah's voice is distorted underwater
Bug #3851: NPCs and player say things while underwater
Bug #3864: Crash when exiting to Khartag point from Ilunibi
Bug #3878: Swapping soul gems while enchanting allows constant effect enchantments using any soul gem
Bug #3879: Dialogue option: Go to jail, persists beyond quickload
Bug #3891: Journal displays empty entries
Bug #3892: Empty space before dialogue entry display
Bug #3898: (mod) PositionCell in dialogue results closes dialogue window
Bug #3906: "Could not find Data Files location" dialog can appear multiple times
Bug #3908: [Wizard] User gets stuck if they cancel out of installing from a CD
Bug #3909: Morrowind Content Language dropdown is the only element on the right half of the Settings window
Bug #3910: Launcher window can be resized so that it cuts off the scroll
Bug #3915: NC text key on nifs doesn't work
Bug #3919: Closing inventory while cursor hovers over spell (or other magic menu item) produces left click sound
Bug #3922: Combat AI should avoid enemy hits when casts Self-ranged spells
Bug #3934: [macOS] Copy/Paste from system clipboard uses Control key instead of Command key
Bug #3935: Incorrect attack strength for AI actors
Bug #3937: Combat AI: enchanted weapons have too high rating
Bug #3942: UI sounds are distorted underwater
Bug #3943: CPU/GPU usage should stop when the game is minimised
Bug #3944: Attempting to sell stolen items back to their owner does not remove them from your inventory
Bug #3955: Player's avatar rendering issues
Bug #3956: EditEffectDialog: Cancel button does not update a Range button and an Area slider properly
Bug #3957: Weird bodypart rendering if a node has reserved name
Bug #3960: Clothes with high cost (> 32768) are not handled properly
Bug #3963: When on edge of being burdened the condition doesn't lower as you run.
Bug #3971: Editor: Incorrect colour field in cell table
Bug #3974: Journal page turning doesn't produce sounds
Bug #3978: Instant opening and closing happens when using a Controller with Menus/Containers
Bug #3981: Lagging when spells are cast, especially noticeable on new landmasses such as Tamriel Rebuilt
Bug #3982: Down sounds instead of Up ones are played when trading
Bug #3987: NPCs attack after some taunting with no "Goodbye"
Bug #3991: Journal can still be opened at main menu
Bug #3995: Dispel cancels every temporary magic effect
Bug #4002: Build broken on OpenBSD with clang
Bug #4003: Reduce Render Area of Inventory Doll to Fit Within Border
Bug #4004: Manis Virmaulese attacks without saying anything
Bug #4010: AiWander: "return to the spawn position" feature does not work properly
Bug #4016: Closing menus with spacebar will still send certain assigned actions through afterwards
Bug #4017: GetPCRunning and GetPCSneaking should check that the PC is actually moving
Bug #4024: Poor music track distribution
Bug #4025: Custom spell with copy-pasted name always sorts to top of spell list
Bug #4027: Editor: OpenMW-CS misreports its own name as "OpenCS", under Mac OS
Bug #4033: Archers don't attack if the arrows have run out and there is no other weapon
Bug #4037: Editor: New greetings do not work in-game.
Bug #4049: Reloading a saved game while falling prevents damage
Bug #4056: Draw animation should not be played when player equips a new weapon
Bug #4074: Editor: Merging of LAND/LTEX records
Bug #4076: Disposition bar is not updated when "goodbye" selected in dialogue
Bug #4079: Alchemy skill increases do not take effect until next batch
Bug #4093: GetResistFire, getResistFrost and getResistShock doesn't work as in vanilla
Bug #4094: Level-up messages for levels past 20 are hardcoded not to be used
Bug #4095: Error in framelistener when take all items from a dead corpse
Bug #4096: Messagebox with the "%0.f" format should use 0 digit precision
Bug #4104: Cycling through weapons does not skip broken ones
Bug #4105: birthsign generation menu does not show full details
Bug #4107: Editor: Left pane in Preferences window is too narrow
Bug #4112: Inventory sort order is inconsistent
Bug #4113: 'Resolution not supported in fullscreen' message is inconvenient
Bug #4131: Pickpocketing behaviour is different from vanilla
Bug #4155: NPCs don't equip a second ring in some cases
Bug #4156: Snow doesn't create water ripples
Bug #4165: NPCs autoequip new clothing with the same price
Feature #452: Rain-induced water ripples
Feature #824: Fading for doors and teleport commands
Feature #933: Editor: LTEX record table
Feature #936: Editor: LAND record table
Feature #1374: AI: Resurface to breathe
Feature #2320: ess-Importer: convert projectiles
Feature #2509: Editor: highlighting occurrences of a word in a script
Feature #2748: Editor: Should use one resource manager per document
Feature #2834: Have openMW's UI remember what menu items were 'pinned' across boots.
Feature #2923: Option to show the damage of the arrows through tooltip.
Feature #3099: Disabling inventory while dragging an item forces you to drop it
Feature #3274: Editor: Script Editor - Shortcuts and context menu options for commenting code out and uncommenting code respectively
Feature #3275: Editor: User Settings- Add an option to reset settings to their default status (per category / all)
Feature #3400: Add keyboard shortcuts for menus
Feature #3492: Show success rate while enchanting
Feature #3530: Editor: Reload data files
Feature #3682: Editor: Default key binding reset
Feature #3921: Combat AI: aggro priorities
Feature #3941: Allow starting at an unnamed exterior cell with --start
Feature #3952: Add Visual Studio 2017 support
Feature #3953: Combat AI: use "WhenUsed" enchantments
Feature #4082: Leave the stack of ingredients or potions grabbed after using an ingredient/potion
Task #2258: Windows installer: launch OpenMW tickbox
Task #4152: The Windows CI script is moving files around that CMake should be dealing with
0.42.0
------
Bug #1956: Duplicate objects after loading the game, when a mod was edited
Bug #2100: Falling leaves in Vurt's Leafy West Gash II not rendered correctly
Bug #2116: Cant fit through some doorways pressed against staircases
Bug #2289: Some modal dialogs are not centered on the screen when the window resizes
Bug #2409: Softlock when pressing weapon/magic switch keys during chargen, afterwards switches weapons even though a text field is selected
Bug #2483: Previous/Next Weapon hotkeys triggered while typing the name of game save
Bug #2629: centeroncell, coc causes death / fall damage time to time when teleporting from high
Bug #2645: Cycling weapons is possible while console/pause menu is open
Bug #2678: Combat with water creatures do not end upon exiting water
Bug #2759: Light Problems in Therana's Chamber in Tel Branora
Bug #2771: unhandled sdl event of type 0x302
Bug #2777: (constant/on cast) disintegrate armor/weapon on self is seemingly not working
Bug #2838: Editor: '.' in a record name should be allowed
Bug #2909: NPCs appear floating when standing on a slope
Bug #3093: Controller movement cannot be used while mouse is moving
Bug #3134: Crash possible when using console with open container
Bug #3254: AI enemies hit between them.
Bug #3344: Editor: Verification results sorting by Type is not alphabetical.
Bug #3345: Editor: Cloned and added pathgrids are lost after reopen of saved omwgame file
Bug #3355: [MGSO] Physics maxing out in south cornerclub Balmora
Bug #3484: Editor: camera position is not set when changing cell via drag&drop
Bug #3508: Slowfall kills Jump momentum
Bug #3580: Crash: Error ElementBufferObject::remove BufferData<0> out of range
Bug #3581: NPCs wander too much
Bug #3601: Menu Titles not centered vertically
Bug #3607: [Mac OS] Beginning of NPC speech cut off (same issue as closed bug #3453)
Bug #3613: Can not map "next weapon" or "next spell" to controller
Bug #3617: Enchanted arrows don't explode when hitting the ground
Bug #3645: Unable to use steps in Vivec, Palace of Vivec
Bug #3650: Tamriel Rebuilt 16.09.1 Hist Cuirass GND nif is rendered inside a Pink Box
Bug #3652: Item icon shadows get stuck in the alchemy GUI
Bug #3653: Incorrect swish sounds
Bug #3666: NPC collision should not be disabled until death animation has finished
Bug #3669: Editor: Text field was missing from book object editing dialogue
Bug #3670: Unhandled SDL event of type 0x304
Bug #3671: Incorrect local variable value after picking up bittercup
Bug #3686: Travelling followers doesn't increase travel fee
Bug #3689: Problematic greetings from Antares Big Mod that override the appropriate ones.
Bug #3690: Certain summoned creatures do not engage in combat with underwater creatures
Bug #3691: Enemies do not initiate combat with player followers on sight
Bug #3695: [Regression] Dispel does not always dispel spell effects in 0.41
Bug #3699: Crash on MWWorld::ProjectileManager::moveMagicBolts
Bug #3700: Climbing on rocks and mountains
Bug #3704: Creatures don't auto-equip their shields on creation
Bug #3705: AI combat engagement logic differs from vanilla
Bug #3707: Animation playing does some very odd things if pc comes in contact with the animated mesh
Bug #3712: [Mod] Freeze upon entering Adanumuran with mod Adanumuran Reclaimed
Bug #3713: [Regression] Cancelling dialogue or using travel with creatures throws a (possibly game-breaking) exception
Bug #3719: Dropped identification papers can't be picked up again
Bug #3722: Command spell doesn't bring enemies out of combat
Bug #3727: Using "Activate" mid-script-execution invalidates interpreter context
Bug #3746: Editor: Book records show attribute IDs instead of skill IDs for teached skills entry.
Bug #3755: Followers stop following after loading from savegame
Bug #3772: ModStat lowers attribute to 100 if it was greater
Bug #3781: Guns in Clean Hunter Rifles mod use crossbow sounds
Bug #3797: NPC and creature names don't show up in combat when RMB windows are displayed
Bug #3800: Wrong tooltip maximum width
Bug #3801: Drowning widget is bugged
Bug #3802: BarterOffer shouldn't limit pcMercantile
Bug #3813: Some fatal error
Bug #3816: Expression parser thinks the -> token is unexpected when a given explicit refID clashes with a journal ID
Bug #3822: Custom added creatures are not animated
Feature #451: Water sounds
Feature #2691: Light particles sometimes not shown in inventory character preview
Feature #3523: Light source on magic projectiles
Feature #3644: Nif NiSphericalCollider Unknown Record Type
Feature #3675: ess-Importer: convert mark location
Feature #3693: ess-Importer: convert last known exterior cell
Feature #3748: Editor: Replace "Scroll" check box in Book records with "Book Type" combo box.
Feature #3751: Editor: Replace "Xyz Blood" check boxes in NPC and Creature records with "Blood Type" combo box
Feature #3752: Editor: Replace emitter check boxes in Light records with "Emitter Type" combo box
Feature #3756: Editor: Replace "Female" check box in NPC records with "Gender" combo box
Feature #3757: Editor: Replace "Female" check box in BodyPart records with "Gender" combo box
Task #3092: const version of ContainerStoreIterator
Task #3795: /deps folder not in .gitignore
0.41.0
------

@ -1,7 +1,10 @@
#!/bin/sh
echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-
sudo ln -s /usr/bin/clang-3.6 /usr/local/bin/clang
sudo ln -s /usr/bin/clang++-3.6 /usr/local/bin/clang++
# Set up compilers
if [ ! -z "${MATRIX_CC}" ]; then
eval "${MATRIX_CC}"
fi
# build libgtest & libgtest_main
sudo mkdir /usr/src/gtest/build
@ -12,13 +15,8 @@ sudo ln -s /usr/src/gtest/build/libgtest.so /usr/lib/libgtest.so
sudo ln -s /usr/src/gtest/build/libgtest_main.so /usr/lib/libgtest_main.so
cd ~/
git clone https://github.com/TES3MP/RakNet
cd RakNet
cmake . -DRAKNET_ENABLE_DLL=OFF -DRAKNET_ENABLE_SAMPLES=OFF -DCMAKE_BUILD_TYPE=Release
mkdir ./lib
make -j3 install
cp ./Lib/RakNetLibStatic/libRakNetLibStatic.a ./lib
cd ..
git clone https://github.com/TES3MP/CrabNet
cd CrabNet
cmake . -DCRABNET_ENABLE_DLL=OFF -DCRABNET_ENABLE_SAMPLES=OFF -DCMAKE_BUILD_TYPE=Release
make -j3
wget https://github.com/zdevito/terra/releases/download/release-2016-03-25/terra-Linux-x86_64-332a506.zip
unzip terra-Linux-x86_64-332a506.zip

@ -2,10 +2,9 @@
brew update
brew rm cmake || true
brew rm pkgconfig || true
brew rm qt5 || true
brew install cmake pkgconfig $macos_qt_formula
brew outdated cmake || brew upgrade cmake
brew outdated pkgconfig || brew upgrade pkgconfig
brew install qt
curl https://downloads.openmw.org/osx/dependencies/openmw-deps-0ecece4.zip -o ~/openmw-deps.zip
unzip ~/openmw-deps.zip -d /private/tmp/openmw-deps > /dev/null
curl -fSL -R -J https://downloads.openmw.org/osx/dependencies/openmw-deps-100d2e0.zip -o ~/openmw-deps.zip
unzip -o ~/openmw-deps.zip -d /private/tmp/openmw-deps > /dev/null

@ -3,15 +3,37 @@
free -m
mkdir build
cd build
export CODE_COVERAGE=1
export RAKNET_ROOT=~/RakNet
export Terra_ROOT=~/terra-Linux-x86_64-332a506
export BUILD_SERVER=OFF
if [ "${CC}" = "clang" ]; then export CODE_COVERAGE=0;
else
export COMPILER_NAME=gcc
export CXX=g++-6
export CC=gcc-6
export BUILD_SERVER=ON
# Set up compilers
if [ ! -z "${MATRIX_CC}" ]; then
eval "${MATRIX_CC}"
fi
${ANALYZE}cmake .. -DBUILD_OPENMW_MP=${BUILD_SERVER} -DBUILD_WITH_CODE_COVERAGE=${CODE_COVERAGE} -DBUILD_BSATOOL=OFF -DBUILD_ESMTOOL=OFF -DBUILD_ESSIMPORTER=OFF -DBUILD_LAUNCHER=OFF -DBUILD_MWINIIMPORTER=OFF -DBUILD_MYGUI_PLUGIN=OFF -DBUILD_OPENCS=OFF -DBUILD_WIZARD=OFF -DBUILD_BROWSER=OFF -DBUILD_UNITTESTS=1 -DCMAKE_INSTALL_PREFIX=/usr -DBINDIR=/usr/games -DCMAKE_BUILD_TYPE="None" -DUSE_SYSTEM_TINYXML=TRUE -DRakNet_LIBRARY_RELEASE=~/RakNet/lib/libRakNetLibStatic.a -DRakNet_LIBRARY_DEBUG=~/RakNet/lib/libRakNetLibStatic.a
export RAKNET_ROOT=~/CrabNet
export CODE_COVERAGE=0
if [ ! -z "${ANALYZE}" ]; then
CODE_COVERAGE=1
fi
${ANALYZE}cmake .. \
-DDESIRED_QT_VERSION=5 \
-DBUILD_OPENMW_MP=ON \
-DBUILD_BROWSER=ON \
-DBUILD_MASTER=ON \
-DBUILD_WITH_CODE_COVERAGE=${CODE_COVERAGE} \
-DBUILD_BSATOOL=OFF \
-DBUILD_ESMTOOL=OFF \
-DBUILD_ESSIMPORTER=OFF \
-DBUILD_LAUNCHER=OFF \
-DBUILD_MWINIIMPORTER=OFF \
-DBUILD_MYGUI_PLUGIN=OFF \
-DBUILD_OPENCS=OFF \
-DBUILD_WIZARD=OFF \
-DBUILD_UNITTESTS=1 \
-DCMAKE_INSTALL_PREFIX=/usr \
-DBINDIR=/usr/games \
-DCMAKE_BUILD_TYPE="None" \
-DUSE_SYSTEM_TINYXML=TRUE \
-DRakNet_LIBRARY_RELEASE=~/CrabNet/lib/libRakNetLibStatic.a \
-DRakNet_LIBRARY_DEBUG=~/CrabNet/lib/libRakNetLibStatic.a

@ -1,4 +1,22 @@
#!/bin/bash
# set -x # turn-on for debugging
MISSINGTOOLS=0
command -v 7z >/dev/null 2>&1 || { echo "Error: 7z (7zip) is not on the path."; MISSINGTOOLS=1; }
command -v cmake >/dev/null 2>&1 || { echo "Error: cmake (CMake) is not on the path."; MISSINGTOOLS=1; }
if [ $MISSINGTOOLS -ne 0 ]; then
exit 1
fi
WORKINGDIR="$(pwd)"
case "$WORKINGDIR" in
*[[:space:]]*)
echo "Error: Working directory contains spaces."
exit 1
;;
esac
set -euo pipefail
@ -59,7 +77,6 @@ while [ $# -gt 0 ]; do
h )
cat <<EOF
Usage: $0 [-cdehkpuvV]
Options:
-c <Release/Debug>
Set the configuration, can also be set with environment variable CONFIGURATION.
@ -75,7 +92,7 @@ Options:
Set the build platform, can also be set with environment variable PLATFORM.
-u
Configure for unity builds.
-v <2013/2015>
-v <2013/2015/2017>
Choose the Visual Studio version to use.
-V
Run verbosely
@ -213,20 +230,31 @@ if [ -z $VS_VERSION ]; then
fi
case $VS_VERSION in
15|15.0|2017 )
GENERATOR="Visual Studio 15 2017"
TOOLSET="vc141"
MSVC_REAL_VER="15"
MSVC_VER="14.1"
MSVC_YEAR="2015"
MSVC_DISPLAY_YEAR="2017"
;;
14|14.0|2015 )
GENERATOR="Visual Studio 14 2015"
XP_TOOLSET="v140_xp"
TOOLSET="v140"
MSVC_VER="14"
TOOLSET="vc140"
MSVC_REAL_VER="14"
MSVC_VER="14.0"
MSVC_YEAR="2015"
MSVC_DISPLAY_YEAR="2015"
;;
12|12.0|2013 )
GENERATOR="Visual Studio 12 2013"
XP_TOOLSET="v120_xp"
TOOLSET="v120"
MSVC_VER="12"
TOOLSET="vc120"
MSVC_REAL_VER="12"
MSVC_VER="12.0"
MSVC_YEAR="2013"
MSVC_DISPLAY_YEAR="2013"
;;
esac
@ -278,7 +306,7 @@ fi
echo
echo "==================================="
echo "Starting prebuild on MSVC${MSVC_YEAR} WIN${BITS}"
echo "Starting prebuild on MSVC${MSVC_DISPLAY_YEAR} WIN${BITS}"
echo "==================================="
echo
@ -294,27 +322,27 @@ if [ -z $SKIP_DOWNLOAD ]; then
# Boost
if [ -z $APPVEYOR ]; then
download "Boost 1.61.0" \
"http://sourceforge.net/projects/boost/files/boost-binaries/1.61.0/boost_1_61_0-msvc-${MSVC_VER}.0-${BITS}.exe" \
"boost-1.61.0-msvc${MSVC_YEAR}-win${BITS}.exe"
download "Boost 1.67.0" \
"https://sourceforge.net/projects/boost/files/boost-binaries/1.67.0/boost_1_67_0-msvc-${MSVC_VER}-${BITS}.exe" \
"boost-1.67.0-msvc${MSVC_YEAR}-win${BITS}.exe"
fi
# Bullet
download "Bullet 2.86" \
"http://www.lysator.liu.se/~ace/OpenMW/deps/Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}.7z" \
"https://www.lysator.liu.se/~ace/OpenMW/deps/Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}.7z" \
"Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}.7z"
# FFmpeg
download "FFmpeg 3.0.1" \
"http://ffmpeg.zeranoe.com/builds/win${BITS}/shared/ffmpeg-3.0.1-win${BITS}-shared.7z" \
"ffmpeg-3.0.1-win${BITS}.7z" \
"http://ffmpeg.zeranoe.com/builds/win${BITS}/dev/ffmpeg-3.0.1-win${BITS}-dev.7z" \
"ffmpeg-3.0.1-dev-win${BITS}.7z"
download "FFmpeg 3.2.4" \
"https://ffmpeg.zeranoe.com/builds/win${BITS}/shared/ffmpeg-3.2.4-win${BITS}-shared.zip" \
"ffmpeg-3.2.4-win${BITS}.zip" \
"https://ffmpeg.zeranoe.com/builds/win${BITS}/dev/ffmpeg-3.2.4-win${BITS}-dev.zip" \
"ffmpeg-3.2.4-dev-win${BITS}.zip"
# MyGUI
download "MyGUI 3.2.3-git" \
"http://www.lysator.liu.se/~ace/OpenMW/deps/MyGUI-3.2.3-git-msvc${MSVC_YEAR}-win${BITS}.7z" \
"MyGUI-3.2.3-git-msvc${MSVC_YEAR}-win${BITS}.7z"
download "MyGUI 3.2.2" \
"https://www.lysator.liu.se/~ace/OpenMW/deps/MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}.7z" \
"MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}.7z"
# OpenAL
download "OpenAL-Soft 1.17.2" \
@ -322,9 +350,9 @@ if [ -z $SKIP_DOWNLOAD ]; then
"OpenAL-Soft-1.17.2.zip"
# OSG
download "OpenSceneGraph 3.4.0-scrawl" \
"http://www.lysator.liu.se/~ace/OpenMW/deps/OSG-3.4.0-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z" \
"OSG-3.4.0-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z"
download "OpenSceneGraph 3.4.1-scrawl" \
"https://www.lysator.liu.se/~ace/OpenMW/deps/OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z" \
"OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z"
# Qt
if [ -z $APPVEYOR ]; then
@ -334,23 +362,23 @@ if [ -z $SKIP_DOWNLOAD ]; then
QT_SUFFIX=""
fi
download "Qt 5.7.2" \
"http://download.qt.io/official_releases/qt/5.7/5.7.0/qt-opensource-windows-x86-msvc${MSVC_YEAR}${QT_SUFFIX}-5.7.0.exe" \
download "Qt 5.7.0" \
"https://download.qt.io/archive/qt/5.7/5.7.0/qt-opensource-windows-x86-msvc${MSVC_YEAR}${QT_SUFFIX}-5.7.0.exe" \
"qt-5.7.0-msvc${MSVC_YEAR}-win${BITS}.exe" \
"http://www.lysator.liu.se/~ace/OpenMW/deps/qt-5-install.qs" \
"https://www.lysator.liu.se/~ace/OpenMW/deps/qt-5-install.qs" \
"qt-5-install.qs"
fi
# SDL2
download "SDL 2.0.4" \
"https://www.libsdl.org/release/SDL2-devel-2.0.4-VC.zip" \
"SDL2-2.0.4.zip"
download "SDL 2.0.7" \
"https://www.libsdl.org/release/SDL2-devel-2.0.7-VC.zip" \
"SDL2-2.0.7.zip"
fi
cd .. #/..
# Set up dependencies
BUILD_DIR="MSVC${MSVC_YEAR}_${BITS}"
BUILD_DIR="MSVC${MSVC_DISPLAY_YEAR}_${BITS}"
if [ -z $KEEP ]; then
echo
echo "(Re)Creating build directory."
@ -372,12 +400,12 @@ echo
# Boost
if [ -z $APPVEYOR ]; then
printf "Boost 1.61.0... "
printf "Boost 1.67.0... "
else
if [ $MSVC_VER -eq 12 ]; then
if [ $MSVC_VER -eq 12.0 ]; then
printf "Boost 1.58.0 AppVeyor... "
else
printf "Boost 1.60.0 AppVeyor... "
printf "Boost 1.67.0 AppVeyor... "
fi
fi
{
@ -386,38 +414,55 @@ fi
BOOST_SDK="$(real_pwd)/Boost"
if [ -d Boost ] && grep "BOOST_VERSION 106100" Boost/boost/version.hpp > /dev/null; then
# Boost's installer is still based on ms-dos API that doesn't support larger than 260 char path names
# We work around this by installing to root of the current working drive and then move it to our deps
# get the current working drive's root, we'll install to that temporarily
CWD_DRIVE_ROOT="$(powershell -command '(get-location).Drive.Root')Boost_temp"
CWD_DRIVE_ROOT_BASH=$(echo "$CWD_DRIVE_ROOT" | sed "s,\\\\,/,g" | sed "s,\(.\):,/\\1,")
if [ -d CWD_DRIVE_ROOT_BASH ]; then
printf "Cannot continue, ${CWD_DRIVE_ROOT_BASH} aka ${CWD_DRIVE_ROOT} already exists. Please remove before re-running. ";
exit 1;
fi
if [ -d ${BOOST_SDK} ] && grep "BOOST_VERSION 106700" Boost/boost/version.hpp > /dev/null; then
printf "Exists. "
elif [ -z $SKIP_EXTRACT ]; then
rm -rf Boost
"${DEPS}/boost-1.61.0-msvc${MSVC_YEAR}-win${BITS}.exe" //dir="$(echo $BOOST_SDK | sed s,/,\\\\,g)" //verysilent
CI_EXTRA_INNO_OPTIONS=""
[ -n "$CI" ] && CI_EXTRA_INNO_OPTIONS="//SUPPRESSMSGBOXES //LOG='boost_install.log'"
"${DEPS}/boost-1.67.0-msvc${MSVC_YEAR}-win${BITS}.exe" //DIR="${CWD_DRIVE_ROOT}" //VERYSILENT //NORESTART ${CI_EXTRA_INNO_OPTIONS}
mv "${CWD_DRIVE_ROOT_BASH}" "${BOOST_SDK}"
fi
add_cmake_opts -DBOOST_ROOT="$BOOST_SDK" \
-DBOOST_LIBRARYDIR="${BOOST_SDK}/lib${BITS}-msvc-${MSVC_VER}.0"
-DBOOST_LIBRARYDIR="${BOOST_SDK}/lib${BITS}-msvc-${MSVC_VER}"
add_cmake_opts -DBoost_COMPILER="-${TOOLSET}"
echo Done.
else
# Appveyor unstable has all the boost we need already
if [ $MSVC_VER -eq 12 ]; then
if [ $MSVC_REAL_VER -eq 12 ]; then
BOOST_SDK="c:/Libraries/boost_1_58_0"
else
BOOST_SDK="c:/Libraries/boost_1_60_0"
BOOST_SDK="c:/Libraries/boost_1_67_0"
fi
if [ $MSVC_REAL_VER -eq 15 ]; then
LIB_SUFFIX="1"
else
LIB_SUFFIX="0"
fi
add_cmake_opts -DBOOST_ROOT="$BOOST_SDK" \
-DBOOST_LIBRARYDIR="${BOOST_SDK}/lib${BITS}-msvc-${MSVC_VER}.0"
-DBOOST_LIBRARYDIR="${BOOST_SDK}/lib${BITS}-msvc-${MSVC_VER}.${LIB_SUFFIX}"
add_cmake_opts -DBoost_COMPILER="-${TOOLSET}"
echo Done.
fi
}
cd $DEPS
echo
# Bullet
printf "Bullet 2.86... "
{
cd $DEPS_INSTALL
if [ -d Bullet ]; then
printf -- "Exists. (No version checking) "
elif [ -z $SKIP_EXTRACT ]; then
@ -425,75 +470,60 @@ printf "Bullet 2.86... "
eval 7z x -y "${DEPS}/Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}.7z" $STRIP
mv "Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}" Bullet
fi
export BULLET_ROOT="$(real_pwd)/Bullet"
echo Done.
}
cd $DEPS
echo
# FFmpeg
printf "FFmpeg 3.0.1... "
printf "FFmpeg 3.2.4... "
{
cd $DEPS_INSTALL
if [ -d FFmpeg ] && grep "FFmpeg version: 3.0.1" FFmpeg/README.txt > /dev/null; then
if [ -d FFmpeg ] && grep "FFmpeg version: 3.2.4" FFmpeg/README.txt > /dev/null; then
printf "Exists. "
elif [ -z $SKIP_EXTRACT ]; then
rm -rf FFmpeg
eval 7z x -y "${DEPS}/ffmpeg-3.0.1-win${BITS}.7z" $STRIP
eval 7z x -y "${DEPS}/ffmpeg-3.0.1-dev-win${BITS}.7z" $STRIP
mv "ffmpeg-3.0.1-win${BITS}-shared" FFmpeg
cp -r "ffmpeg-3.0.1-win${BITS}-dev/"* FFmpeg/
rm -rf "ffmpeg-3.0.1-win${BITS}-dev"
eval 7z x -y "${DEPS}/ffmpeg-3.2.4-win${BITS}.zip" $STRIP
eval 7z x -y "${DEPS}/ffmpeg-3.2.4-dev-win${BITS}.zip" $STRIP
mv "ffmpeg-3.2.4-win${BITS}-shared" FFmpeg
cp -r "ffmpeg-3.2.4-win${BITS}-dev/"* FFmpeg/
rm -rf "ffmpeg-3.2.4-win${BITS}-dev"
fi
export FFMPEG_HOME="$(real_pwd)/FFmpeg"
add_runtime_dlls "$(pwd)/FFmpeg/bin/"{avcodec-57,avformat-57,avutil-55,swresample-2,swscale-4}.dll
if [ $BITS -eq 32 ]; then
add_cmake_opts "-DCMAKE_EXE_LINKER_FLAGS=\"/machine:X86 /safeseh:no\""
fi
echo Done.
}
cd $DEPS
echo
# MyGUI
printf "MyGUI 3.2.3-git... "
printf "MyGUI 3.2.2... "
{
cd $DEPS_INSTALL
if [ -d MyGUI ] && \
grep "MYGUI_VERSION_MAJOR 3" MyGUI/include/MYGUI/MyGUI_Prerequest.h > /dev/null && \
grep "MYGUI_VERSION_MINOR 2" MyGUI/include/MYGUI/MyGUI_Prerequest.h > /dev/null && \
grep "MYGUI_VERSION_PATCH 3" MyGUI/include/MYGUI/MyGUI_Prerequest.h > /dev/null
grep "MYGUI_VERSION_PATCH 2" MyGUI/include/MYGUI/MyGUI_Prerequest.h > /dev/null
then
printf "Exists. "
elif [ -z $SKIP_EXTRACT ]; then
rm -rf MyGUI
eval 7z x -y "${DEPS}/MyGUI-3.2.3-git-msvc${MSVC_YEAR}-win${BITS}.7z" $STRIP
mv "MyGUI-3.2.3-git-msvc${MSVC_YEAR}-win${BITS}" MyGUI
eval 7z x -y "${DEPS}/MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}.7z" $STRIP
mv "MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}" MyGUI
fi
export MYGUI_HOME="$(real_pwd)/MyGUI"
if [ $CONFIGURATION == "Debug" ]; then
SUFFIX="_d"
else
SUFFIX=""
fi
add_runtime_dlls "$(pwd)/MyGUI/bin/${CONFIGURATION}/MyGUIEngine${SUFFIX}.dll"
echo Done.
}
cd $DEPS
echo
# OpenAL
printf "OpenAL-Soft 1.17.2... "
{
@ -503,62 +533,49 @@ printf "OpenAL-Soft 1.17.2... "
rm -rf openal-soft-1.17.2-bin
eval 7z x -y OpenAL-Soft-1.17.2.zip $STRIP
fi
OPENAL_SDK="$(real_pwd)/openal-soft-1.17.2-bin"
add_cmake_opts -DOPENAL_INCLUDE_DIR="${OPENAL_SDK}/include/AL" \
-DOPENAL_LIBRARY="${OPENAL_SDK}/libs/Win${BITS}/OpenAL32.lib"
add_runtime_dlls "$(pwd)/openal-soft-1.17.2-bin/bin/WIN${BITS}/soft_oal.dll:OpenAL32.dll"
echo Done.
}
cd $DEPS
echo
# OSG
printf "OSG 3.4.0-scrawl... "
printf "OSG 3.4.1-scrawl... "
{
cd $DEPS_INSTALL
if [ -d OSG ] && \
grep "OPENSCENEGRAPH_MAJOR_VERSION 3" OSG/include/osg/Version > /dev/null && \
grep "OPENSCENEGRAPH_MINOR_VERSION 4" OSG/include/osg/Version > /dev/null && \
grep "OPENSCENEGRAPH_PATCH_VERSION 0" OSG/include/osg/Version > /dev/null
grep "OPENSCENEGRAPH_PATCH_VERSION 1" OSG/include/osg/Version > /dev/null
then
printf "Exists. "
elif [ -z $SKIP_EXTRACT ]; then
rm -rf OSG
eval 7z x -y "${DEPS}/OSG-3.4.0-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z" $STRIP
mv "OSG-3.4.0-scrawl-msvc${MSVC_YEAR}-win${BITS}" OSG
eval 7z x -y "${DEPS}/OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z" $STRIP
mv "OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}" OSG
fi
OSG_SDK="$(real_pwd)/OSG"
add_cmake_opts -DOSG_DIR="$OSG_SDK"
if [ $CONFIGURATION == "Debug" ]; then
SUFFIX="d"
else
SUFFIX=""
fi
add_runtime_dlls "$(pwd)/OSG/bin/"{OpenThreads,zlib,libpng*}${SUFFIX}.dll \
"$(pwd)/OSG/bin/osg"{,Animation,DB,FX,GA,Particle,Text,Util,Viewer}${SUFFIX}.dll
add_osg_dlls "$(pwd)/OSG/bin/osgPlugins-3.4.0/osgdb_"{bmp,dds,jpeg,osg,png,tga}${SUFFIX}.dll
add_osg_dlls "$(pwd)/OSG/bin/osgPlugins-3.4.0/osgdb_serializers_osg"{,animation,fx,ga,particle,text,util,viewer}${SUFFIX}.dll
add_osg_dlls "$(pwd)/OSG/bin/osgPlugins-3.4.1/osgdb_"{bmp,dds,jpeg,osg,png,tga}${SUFFIX}.dll
add_osg_dlls "$(pwd)/OSG/bin/osgPlugins-3.4.1/osgdb_serializers_osg"{,animation,fx,ga,particle,text,util,viewer}${SUFFIX}.dll
echo Done.
}
cd $DEPS
echo
# Qt
if [ -z $APPVEYOR ]; then
printf "Qt 5.7.0... "
else
printf "Qt 5.7 AppVeyor... "
printf "Qt 5.10 AppVeyor... "
fi
{
if [ $BITS -eq 64 ]; then
@ -566,90 +583,74 @@ fi
else
SUFFIX=""
fi
if [ -z $APPVEYOR ]; then
cd $DEPS_INSTALL
QT_SDK="$(real_pwd)/Qt/5.7/msvc${MSVC_YEAR}${SUFFIX}"
if [ -d Qt ] && head -n2 Qt/InstallationLog.txt | grep "5.7.0" > /dev/null; then
printf "Exists. "
elif [ -z $SKIP_EXTRACT ]; then
rm -rf Qt
cp "${DEPS}/qt-5-install.qs" qt-install.qs
sed -i "s|INSTALL_DIR|$(real_pwd)/Qt|" qt-install.qs
sed -i "s/qt.VERSION.winBITS_msvcYEAR/qt.57.win${BITS}_msvc${MSVC_YEAR}${SUFFIX}/" qt-install.qs
printf -- "(Installation might take a while) "
"${DEPS}/qt-5.7.0-msvc${MSVC_YEAR}-win${BITS}.exe" --script qt-install.qs --silent
mv qt-install.qs Qt/
echo Done.
printf " Cleaning up extraneous data... "
rm -r "$(real_pwd)/Qt/"{dist,Docs,Examples,Tools,vcredist,components.xml,MaintenanceTool.dat,MaintenanceTool.exe,MaintenanceTool.ini,network.xml,qt-install.qs}
fi
cd $QT_SDK
add_cmake_opts -DDESIRED_QT_VERSION=5 \
-DQT_QMAKE_EXECUTABLE="${QT_SDK}/bin/qmake.exe" \
-DCMAKE_PREFIX_PATH="$QT_SDK"
if [ $CONFIGURATION == "Debug" ]; then
SUFFIX="d"
else
SUFFIX=""
fi
add_runtime_dlls "$(pwd)/bin/lib"{EGL,GLESv2}${SUFFIX}.dll \
"$(pwd)/bin/Qt5"{Core,Gui,Network,OpenGL,Widgets}${SUFFIX}.dll
add_runtime_dlls "$(pwd)/bin/Qt5"{Core,Gui,Network,OpenGL,Widgets}${SUFFIX}.dll
add_qt_platform_dlls "$(pwd)/plugins/platforms/qwindows${SUFFIX}.dll"
echo Done.
else
QT_SDK="C:/Qt/5.7/msvc${MSVC_YEAR}${SUFFIX}"
QT_SDK="C:/Qt/5.10/msvc${MSVC_DISPLAY_YEAR}${SUFFIX}"
add_cmake_opts -DDESIRED_QT_VERSION=5 \
-DQT_QMAKE_EXECUTABLE="${QT_SDK}/bin/qmake.exe" \
-DCMAKE_PREFIX_PATH="$QT_SDK"
if [ $CONFIGURATION == "Debug" ]; then
SUFFIX="d"
else
SUFFIX=""
fi
DIR=$(echo "${QT_SDK}" | sed "s,\\\\,/,g" | sed "s,\(.\):,/\\1,")
add_runtime_dlls "${DIR}/bin/Qt5"{Core,Gui,Network,OpenGL,Widgets}${SUFFIX}.dll
add_qt_platform_dlls "${DIR}/plugins/platforms/qwindows${SUFFIX}.dll"
echo Done.
fi
}
cd $DEPS
echo
# SDL2
printf "SDL 2.0.4... "
printf "SDL 2.0.7... "
{
if [ -d SDL2-2.0.4 ]; then
if [ -d SDL2-2.0.7 ]; then
printf "Exists. "
elif [ -z $SKIP_EXTRACT ]; then
rm -rf SDL2-2.0.4
eval 7z x -y SDL2-2.0.4.zip $STRIP
rm -rf SDL2-2.0.7
eval 7z x -y SDL2-2.0.7.zip $STRIP
fi
export SDL2DIR="$(real_pwd)/SDL2-2.0.4"
add_runtime_dlls "$(pwd)/SDL2-2.0.4/lib/x${ARCHSUFFIX}/SDL2.dll"
export SDL2DIR="$(real_pwd)/SDL2-2.0.7"
add_runtime_dlls "$(pwd)/SDL2-2.0.7/lib/x${ARCHSUFFIX}/SDL2.dll"
echo Done.
}
echo
cd $DEPS_INSTALL/..
echo
echo "Setting up OpenMW build..."
add_cmake_opts -DBUILD_BSATOOL=no \
-DBUILD_ESMTOOL=no \
-DBUILD_MYGUI_PLUGIN=no \
-DOPENMW_MP_BUILD=on
if [ ! -z $CI ]; then
case $STEP in
components )
@ -661,7 +662,6 @@ if [ ! -z $CI ]; then
-DBUILD_OPENMW=no \
-DBUILD_WIZARD=no
;;
openmw )
echo " Building subproject: OpenMW."
add_cmake_opts -DBUILD_ESSIMPORTER=no \
@ -670,7 +670,6 @@ if [ ! -z $CI ]; then
-DBUILD_OPENCS=no \
-DBUILD_WIZARD=no
;;
opencs )
echo " Building subproject: OpenCS."
add_cmake_opts -DBUILD_ESSIMPORTER=no \
@ -679,7 +678,6 @@ if [ ! -z $CI ]; then
-DBUILD_OPENMW=no \
-DBUILD_WIZARD=no
;;
misc )
echo " Building subprojects: Misc."
add_cmake_opts -DBUILD_OPENCS=no \
@ -687,33 +685,28 @@ if [ ! -z $CI ]; then
;;
esac
fi
# NOTE: Disable this when/if we want to run test cases
if [ -z $CI ]; then
#if [ -z $CI ]; then
echo "- Copying Runtime DLLs..."
mkdir -p $BUILD_CONFIG
for DLL in $RUNTIME_DLLS; do
TARGET="$(basename "$DLL")"
if [[ "$DLL" == *":"* ]]; then
IFS=':'; SPLIT=( ${DLL} ); unset IFS
DLL=${SPLIT[0]}
TARGET=${SPLIT[1]}
fi
echo " ${TARGET}."
cp "$DLL" "$BUILD_CONFIG/$TARGET"
done
echo
echo "- OSG Plugin DLLs..."
mkdir -p $BUILD_CONFIG/osgPlugins-3.4.0
mkdir -p $BUILD_CONFIG/osgPlugins-3.4.1
for DLL in $OSG_PLUGINS; do
echo " $(basename $DLL)."
cp "$DLL" $BUILD_CONFIG/osgPlugins-3.4.0
cp "$DLL" $BUILD_CONFIG/osgPlugins-3.4.1
done
echo
echo "- Qt Platform DLLs..."
mkdir -p ${BUILD_CONFIG}/platforms
for DLL in $QT_PLATFORMS; do
@ -721,17 +714,14 @@ if [ -z $CI ]; then
cp "$DLL" "${BUILD_CONFIG}/platforms"
done
echo
fi
#fi
if [ -z $VERBOSE ]; then
printf -- "- Configuring... "
else
echo "- cmake .. $CMAKE_OPTS"
fi
run_cmd cmake .. $CMAKE_OPTS
RET=$?
if [ -z $VERBOSE ]; then
if [ $RET -eq 0 ]; then
echo Done.
@ -739,20 +729,4 @@ if [ -z $VERBOSE ]; then
echo Failed.
fi
fi
if [ -z $CI ]; then
echo "- Copying Runtime Resources/Config Files"
echo " gamecontrollerdb.txt"
cp gamecontrollerdb.txt $BUILD_CONFIG/gamecontrollerdb.txt
echo " openmw.cfg"
cp openmw.cfg.install $BUILD_CONFIG/openmw.cfg
echo " openmw-cs.cfg"
cp openmw-cs.cfg $BUILD_CONFIG/openmw-cs.cfg
echo " settings-default.cfg"
cp settings-default.cfg $BUILD_CONFIG/settings-default.cfg
echo " resources/"
cp -r resources $BUILD_CONFIG/resources
echo
fi
exit $RET
exit $RET

@ -4,16 +4,15 @@ export CXX=clang++
export CC=clang
DEPENDENCIES_ROOT="/private/tmp/openmw-deps/openmw-deps"
QT_PATH=`brew --prefix $macos_qt_formula`
QT_PATH=`brew --prefix qt`
mkdir build
cd build
cmake \
-D CMAKE_PREFIX_PATH="$DEPENDENCIES_ROOT;$QT_PATH" \
-D CMAKE_OSX_DEPLOYMENT_TARGET="10.8" \
-D CMAKE_OSX_SYSROOT="macosx10.12" \
-D CMAKE_BUILD_TYPE=Debug \
-D CMAKE_OSX_DEPLOYMENT_TARGET="10.9" \
-D CMAKE_OSX_SYSROOT="macosx10.13" \
-D CMAKE_BUILD_TYPE=Release \
-D OPENMW_OSX_DEPLOYMENT=TRUE \
-D DESIRED_QT_VERSION=5 \
-D BUILD_ESMTOOL=FALSE \

@ -77,9 +77,9 @@ if [ $? -ne 0 ]; then
fi
if [ -z $APPVEYOR ]; then
msbuild OpenMW.sln //t:Build //m:8
msbuild OpenMW.sln //t:Build //p:Configuration=${CONFIGURATION} //m:8
else
msbuild OpenMW.sln //t:Build //m:8 //logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
msbuild OpenMW.sln //t:Build //p:Configuration=${CONFIGURATION} //m:8 //logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
fi
RET=$?

@ -0,0 +1,11 @@
#!/bin/sh
cd build
DATE=`date +'%d%m%Y'`
SHORT_COMMIT=`git rev-parse --short ${TRAVIS_COMMIT}`
TARGET_FILENAME="OpenMW-${DATE}-${SHORT_COMMIT}.dmg"
if ! curl --ssl -u $OSX_FTP_USER:$OSX_FTP_PASSWORD "${OSX_FTP_URL}" --silent | grep $SHORT_COMMIT > /dev/null; then
curl --ssl --ftp-create-dirs -T *.dmg -u $OSX_FTP_USER:$OSX_FTP_PASSWORD "${OSX_FTP_URL}${TARGET_FILENAME}"
fi

@ -1,3 +1,35 @@
# Apps and tools
option(BUILD_OPENMW "build OpenMW" ON)
option(BUILD_OPENMW_MP "build OpenMW-MP" ON)
option(BUILD_MASTER "build tes3mp master server" OFF)
option(BUILD_BSATOOL "build BSA extractor" ON)
option(BUILD_ESMTOOL "build ESM inspector" ON)
option(BUILD_LAUNCHER "build Launcher" ON)
option(BUILD_BROWSER "build tes3mp Server Browser" ON)
option(BUILD_MWINIIMPORTER "build MWiniImporter" ON)
option(BUILD_ESSIMPORTER "build ESS (Morrowind save game) importer" ON)
option(BUILD_OPENCS "build OpenMW Construction Set" ON)
option(BUILD_WIZARD "build Installation Wizard" ON)
option(BUILD_WITH_CODE_COVERAGE "Enable code coverage with gconv" OFF)
option(BUILD_UNITTESTS "Enable Unittests with Google C++ Unittest" OFF)
option(BUILD_NIFTEST "build nif file tester" OFF)
option(BUILD_MYGUI_PLUGIN "build MyGUI plugin for OpenMW resources, to use with MyGUI tools" ON)
option(BUILD_DOCS "build documentation." OFF )
if (NOT BUILD_LAUNCHER AND NOT BUILD_BROWSER AND NOT BUILD_OPENCS AND NOT BUILD_WIZARD)
set(USE_QT FALSE)
else()
set(USE_QT TRUE)
endif()
if (USE_QT)
set(DESIRED_QT_VERSION 4 CACHE STRING "The QT version OpenMW should use (4 or 5)")
set_property(CACHE DESIRED_QT_VERSION PROPERTY STRINGS 4 5)
endif()
# set the minimum required version across the board
cmake_minimum_required(VERSION 3.1.0)
project(OpenMW)
# If the user doesn't supply a CMAKE_BUILD_TYPE via command line, choose one for them.
@ -25,7 +57,7 @@ endif()
message(STATUS "Configuring OpenMW...")
set(OPENMW_VERSION_MAJOR 0)
set(OPENMW_VERSION_MINOR 41)
set(OPENMW_VERSION_MINOR 44)
set(OPENMW_VERSION_RELEASE 0)
set(OPENMW_VERSION_COMMITHASH "")
@ -35,18 +67,14 @@ set(OPENMW_VERSION "${OPENMW_VERSION_MAJOR}.${OPENMW_VERSION_MINOR}.${OPENMW_VER
set(GIT_CHECKOUT FALSE)
if(EXISTS ${PROJECT_SOURCE_DIR}/.git)
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow)
find_package(Git)
if(GIT_FOUND)
set(GIT_CHECKOUT TRUE)
else(GIT_FOUND)
message(WARNING "Git executable not found")
endif(GIT_FOUND)
else(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow)
message(STATUS "Shallow Git clone detected, not attempting to retrieve version info")
endif(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/shallow)
endif(EXISTS ${PROJECT_SOURCE_DIR}/.git)
find_package(Git)
if(GIT_FOUND)
set(GIT_CHECKOUT TRUE)
else(GIT_FOUND)
message(WARNING "Git executable not found")
endif(GIT_FOUND)
endif(EXISTS ${PROJECT_SOURCE_DIR}/.git)
# Macros
include(OpenMWMacros)
@ -63,23 +91,6 @@ option(QT_STATIC "Link static build of QT into the binaries" FALSE)
option(OPENMW_UNITY_BUILD "Use fewer compilation units to speed up compile time" FALSE)
# Apps and tools
option(BUILD_OPENMW "build OpenMW" ON)
option(BUILD_OPENMW_MP "build OpenMW-MP" ON)
option(BUILD_BSATOOL "build BSA extractor" ON)
option(BUILD_ESMTOOL "build ESM inspector" ON)
option(BUILD_LAUNCHER "build Launcher" ON)
option(BUILD_BROWSER "build tes3mp Server Browser" ON)
option(BUILD_MWINIIMPORTER "build MWiniImporter" ON)
option(BUILD_ESSIMPORTER "build ESS (Morrowind save game) importer" ON)
option(BUILD_OPENCS "build OpenMW Construction Set" ON)
option(BUILD_WIZARD "build Installation Wizard" ON)
option(BUILD_WITH_CODE_COVERAGE "Enable code coverage with gconv" OFF)
option(BUILD_UNITTESTS "Enable Unittests with Google C++ Unittest" OFF)
option(BUILD_NIFTEST "build nif file tester" OFF)
option(BUILD_MYGUI_PLUGIN "build MyGUI plugin for OpenMW resources, to use with MyGUI tools" ON)
option(BUILD_DOCS "build documentation." OFF )
# what is necessary to build documentation
IF( BUILD_DOCS )
# Builds the documentation.
@ -129,16 +140,10 @@ endif()
find_package(RakNet REQUIRED)
include_directories(${RakNet_INCLUDES})
if (NOT BUILD_LAUNCHER AND NOT BUILD_BROWSER AND NOT BUILD_OPENCS AND NOT BUILD_WIZARD)
set(USE_QT FALSE)
else()
set(USE_QT TRUE)
endif()
# Dependencies
find_package(OpenGL REQUIRED)
if (USE_QT)
set(DESIRED_QT_VERSION 5 CACHE STRING "The QT version OpenMW should use (4 or 5)")
set_property(CACHE DESIRED_QT_VERSION PROPERTY STRINGS 4 5)
message(STATUS "Using Qt${DESIRED_QT_VERSION}")
if (DESIRED_QT_VERSION MATCHES 4)
@ -153,17 +158,6 @@ if (USE_QT)
endif()
endif()
if (APPLE)
# OS X build process relies on this fix: https://github.com/Kitware/CMake/commit/3df5147043d83aa09acd5c9ce31d5c602efb99db
cmake_minimum_required(VERSION 3.1.0)
elseif (USE_QT AND DESIRED_QT_VERSION MATCHES 5)
# 2.8.11+ is required to make Qt5 happy and allow linking QtMain on Windows.
cmake_minimum_required(VERSION 2.8.11)
else()
# We probably support older versions than this.
cmake_minimum_required(VERSION 2.6)
endif()
IF(BUILD_OPENMW OR BUILD_OPENCS)
# Sound setup
find_package(FFmpeg REQUIRED COMPONENTS AVCODEC AVFORMAT AVUTIL SWSCALE SWRESAMPLE)
@ -198,12 +192,6 @@ if (NOT WIN32 AND BUILD_WIZARD) # windows users can just run the morrowind insta
set(OPENMW_USE_UNSHIELD TRUE)
endif()
option(OPENGL_ES "enable opengl es support" FALSE )
if (OPENGL_ES)
add_definitions(-DOPENGL_ES)
endif(OPENGL_ES)
# Fix for not visible pthreads functions for linker with glibc 2.15
if (UNIX AND NOT APPLE)
find_package (Threads)
@ -220,7 +208,8 @@ endif()
IF(BUILD_OPENMW OR BUILD_OPENCS)
find_package(OpenSceneGraph 3.3.4 REQUIRED osgDB osgViewer osgText osgGA osgAnimation osgParticle osgUtil osgFX)
find_package(OpenSceneGraph 3.3.4 REQUIRED osgDB osgViewer osgText osgGA osgParticle osgUtil osgFX)
include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS})
set(USED_OSG_PLUGINS
osgdb_bmp
@ -261,11 +250,10 @@ IF(BUILD_OPENMW OR BUILD_OPENCS)
find_package(SDL2 REQUIRED)
find_package(OpenAL REQUIRED)
find_package(Bullet ${REQUIRED_BULLET_VERSION} REQUIRED COMPONENTS BulletCollision LinearMath)
ELSE()
include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS}) # HACK: DO NOT MOVE THIS. Used for server only build, kept here to avoid merge conflicts above.
ENDIF(BUILD_OPENMW OR BUILD_OPENCS)
include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS})
set(BOOST_COMPONENTS system filesystem program_options)
if(WIN32)
@ -327,46 +315,62 @@ endif (APPLE)
# Other files
configure_file(${OpenMW_SOURCE_DIR}/files/tes3mp/tes3mp-client-default.cfg
"${OpenMW_BINARY_DIR}/tes3mp-client-default.cfg")
configure_resource_file(${OpenMW_SOURCE_DIR}/files/tes3mp/tes3mp-client-default.cfg
"${OpenMW_BINARY_DIR}" "tes3mp-client-default.cfg")
configure_file(${OpenMW_SOURCE_DIR}/files/tes3mp/tes3mp-server-default.cfg
"${OpenMW_BINARY_DIR}/tes3mp-server-default.cfg")
configure_resource_file(${OpenMW_SOURCE_DIR}/files/tes3mp/tes3mp-server-default.cfg
"${OpenMW_BINARY_DIR}" "tes3mp-server-default.cfg")
configure_file(${OpenMW_SOURCE_DIR}/files/settings-default.cfg
"${OpenMW_BINARY_DIR}/settings-default.cfg")
configure_resource_file(${OpenMW_SOURCE_DIR}/files/settings-default.cfg
"${OpenMW_BINARY_DIR}" "settings-default.cfg")
if (NOT APPLE)
configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg.local
"${OpenMW_BINARY_DIR}/openmw.cfg")
configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg
"${OpenMW_BINARY_DIR}/openmw.cfg.install")
configure_resource_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg.local
"${OpenMW_BINARY_DIR}" "openmw.cfg")
configure_resource_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg
"${OpenMW_BINARY_DIR}" "openmw.cfg.install")
else ()
configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg
"${OpenMW_BINARY_DIR}/openmw.cfg")
endif ()
configure_file(${OpenMW_SOURCE_DIR}/files/openmw-cs.cfg
"${OpenMW_BINARY_DIR}/openmw-cs.cfg")
configure_resource_file(${OpenMW_SOURCE_DIR}/files/openmw-cs.cfg
"${OpenMW_BINARY_DIR}" "openmw-cs.cfg")
# Needs the copy version because the configure version assumes the end of the file has been reached when a null character is reached and there are no CMake expressions to evaluate.
copy_resource_file(${OpenMW_SOURCE_DIR}/files/opencs/defaultfilters
"${OpenMW_BINARY_DIR}" "resources/defaultfilters")
configure_resource_file(${OpenMW_SOURCE_DIR}/files/gamecontrollerdb.txt
"${OpenMW_BINARY_DIR}" "gamecontrollerdb.txt")
configure_file(${OpenMW_SOURCE_DIR}/files/opencs/defaultfilters
"${OpenMW_BINARY_DIR}/resources/defaultfilters" COPYONLY)
configure_resource_file(${OpenMW_SOURCE_DIR}/files/gamecontrollerdb_204.txt
"${OpenMW_BINARY_DIR}" "gamecontrollerdb_204.txt")
configure_file(${OpenMW_SOURCE_DIR}/files/gamecontrollerdb.txt
"${OpenMW_BINARY_DIR}/gamecontrollerdb.txt")
configure_resource_file(${OpenMW_SOURCE_DIR}/files/gamecontrollerdb_205.txt
"${OpenMW_BINARY_DIR}" "gamecontrollerdb_205.txt")
if (NOT WIN32 AND NOT APPLE)
configure_file(${OpenMW_SOURCE_DIR}/files/openmw.desktop
"${OpenMW_BINARY_DIR}/openmw.desktop")
configure_file(${OpenMW_SOURCE_DIR}/files/openmw.appdata.xml
"${OpenMW_BINARY_DIR}/openmw.appdata.xml")
configure_file(${OpenMW_SOURCE_DIR}/files/tes3mp-browser.desktop
"${OpenMW_BINARY_DIR}/tes3mp-browser.desktop")
configure_file(${OpenMW_SOURCE_DIR}/files/openmw-cs.desktop
"${OpenMW_BINARY_DIR}/openmw-cs.desktop")
endif()
# CXX Compiler settings
set(CMAKE_CXX_STANDARD 14)
if (CMAKE_CXX_COMPILER_ID STREQUAL GNU OR CMAKE_CXX_COMPILER_ID STREQUAL Clang)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wundef -Wno-unused-parameter -std=c++98 -pedantic -Wno-long-long -Wno-variadic-macros")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wundef -Wno-unused-parameter -pedantic -Wno-long-long")
add_definitions( -DBOOST_NO_CXX11_SCOPED_ENUMS=ON )
if (APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++")
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL Clang AND NOT APPLE)
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3.6 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 3.6)
@ -394,13 +398,16 @@ IF(NOT WIN32 AND NOT APPLE)
# Install binaries
IF(BUILD_OPENMW)
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/openmw" DESTINATION "${BINDIR}" )
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/tes3mp" DESTINATION "${BINDIR}" )
ENDIF(BUILD_OPENMW)
IF(BUILD_OPENMW_MP)
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/tes3mp-server" DESTINATION "${BINDIR}")
ENDIF(BUILD_OPENMW_MP)
IF(BUILD_LAUNCHER)
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/openmw-launcher" DESTINATION "${BINDIR}" )
ENDIF(BUILD_LAUNCHER)
IF(BUILD_BROWSER)
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/openmw-browser" DESTINATION "${BINDIR}" )
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/tes3mp-browser" DESTINATION "${BINDIR}" )
ENDIF(BUILD_BROWSER)
IF(BUILD_BSATOOL)
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/bsatool" DESTINATION "${BINDIR}" )
@ -428,12 +435,15 @@ IF(NOT WIN32 AND NOT APPLE)
#ENDIF(BUILD_MYGUI_PLUGIN)
# Install licenses
INSTALL(FILES "docs/license/DejaVu Font License.txt" DESTINATION "${LICDIR}" )
INSTALL(FILES "files/mygui/DejaVu Font License.txt" DESTINATION "${LICDIR}" )
# Install icon and desktop file
INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.desktop" DESTINATION "${DATAROOTDIR}/applications" COMPONENT "openmw")
INSTALL(FILES "${OpenMW_SOURCE_DIR}/files/launcher/images/openmw.png" DESTINATION "${ICONDIR}" COMPONENT "openmw")
INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.appdata.xml" DESTINATION "${DATAROOTDIR}/appdata" COMPONENT "openmw")
INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.appdata.xml" DESTINATION "${DATAROOTDIR}/metainfo" COMPONENT "openmw")
IF(BUILD_BROWSER)
INSTALL(FILES "${OpenMW_BINARY_DIR}/tes3mp-browser.desktop" DESTINATION "${DATAROOTDIR}/applications" COMPONENT "browser")
ENDIF(BUILD_BROWSER)
IF(BUILD_OPENCS)
INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw-cs.desktop" DESTINATION "${DATAROOTDIR}/applications" COMPONENT "opencs")
INSTALL(FILES "${OpenMW_SOURCE_DIR}/files/opencs/openmw-cs.png" DESTINATION "${ICONDIR}" COMPONENT "opencs")
@ -444,11 +454,14 @@ IF(NOT WIN32 AND NOT APPLE)
INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.cfg.install" DESTINATION "${SYSCONFDIR}" RENAME "openmw.cfg" COMPONENT "openmw")
INSTALL(FILES "${OpenMW_BINARY_DIR}/resources/version" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw")
INSTALL(FILES "${OpenMW_BINARY_DIR}/gamecontrollerdb.txt" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw")
INSTALL(FILES "${OpenMW_BINARY_DIR}/gamecontrollerdb_204.txt" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw")
INSTALL(FILES "${OpenMW_BINARY_DIR}/gamecontrollerdb_205.txt" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw")
INSTALL(FILES "${OpenMW_BINARY_DIR}/tes3mp-client-default" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw")
INSTALL(FILES "${OpenMW_BINARY_DIR}/tes3mp-client.install" DESTINATION "${SYSCONFDIR}" RENAME "tes3mp-client.cfg" COMPONENT "openmw")
INSTALL(FILES "${OpenMW_BINARY_DIR}/tes3mp-server-default" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw-mp")
INSTALL(FILES "${OpenMW_BINARY_DIR}/tes3mp-server.install" DESTINATION "${SYSCONFDIR}" RENAME "tes3mp-server.cfg" COMPONENT "openmw-mp")
INSTALL(FILES "${OpenMW_BINARY_DIR}/tes3mp-client-default.cfg" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw")
#INSTALL(FILES "${OpenMW_BINARY_DIR}/tes3mp-client.install" DESTINATION "${SYSCONFDIR}" RENAME "tes3mp-client.cfg" COMPONENT "openmw")
INSTALL(FILES "${OpenMW_BINARY_DIR}/tes3mp-server-default.cfg" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw-mp")
#INSTALL(FILES "${OpenMW_BINARY_DIR}/tes3mp-server.install" DESTINATION "${SYSCONFDIR}" RENAME "tes3mp-server.cfg" COMPONENT "openmw-mp")
#They both do not exist
IF(BUILD_OPENCS)
INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw-cs.cfg" DESTINATION "${SYSCONFDIR}" COMPONENT "opencs")
@ -464,16 +477,24 @@ if(WIN32)
FILE(GLOB dll_files_release "${OpenMW_BINARY_DIR}/Release/*.dll")
INSTALL(FILES ${dll_files_debug} DESTINATION "." CONFIGURATIONS Debug)
INSTALL(FILES ${dll_files_release} DESTINATION "." CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel)
INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.cfg.install" DESTINATION "." RENAME "openmw.cfg")
INSTALL(FILES "${OpenMW_BINARY_DIR}/Debug/openmw.cfg.install" DESTINATION "." RENAME "openmw.cfg" CONFIGURATIONS Debug)
INSTALL(FILES "${OpenMW_BINARY_DIR}/Release/openmw.cfg.install" DESTINATION "." RENAME "openmw.cfg" CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel)
INSTALL(FILES "${OpenMW_SOURCE_DIR}/CHANGELOG.md" DESTINATION "." RENAME "CHANGELOG.txt")
INSTALL(FILES "${OpenMW_SOURCE_DIR}/README.md" DESTINATION "." RENAME "README.txt")
INSTALL(FILES "${OpenMW_SOURCE_DIR}/LICENSE" DESTINATION "." RENAME "LICENSE.txt")
INSTALL(FILES
"${OpenMW_SOURCE_DIR}/Docs/license/GPL3.txt"
"${OpenMW_SOURCE_DIR}/Docs/license/DejaVu Font License.txt"
"${OpenMW_BINARY_DIR}/settings-default.cfg"
"${OpenMW_BINARY_DIR}/tes3mp-client-default.cfg"
"${OpenMW_BINARY_DIR}/gamecontrollerdb.txt"
"${OpenMW_SOURCE_DIR}/files/mygui/DejaVu Font License.txt"
DESTINATION ".")
INSTALL(FILES "${OpenMW_BINARY_DIR}/Debug/settings-default.cfg" DESTINATION "." CONFIGURATIONS Debug)
INSTALL(FILES "${OpenMW_BINARY_DIR}/Release/settings-default.cfg" DESTINATION "." CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel)
INSTALL(FILES "${OpenMW_BINARY_DIR}/Debug/tes3mp-client-default.cfg" DESTINATION "." CONFIGURATIONS Debug)
INSTALL(FILES "${OpenMW_BINARY_DIR}/Release/tes3mp-client-default.cfg" DESTINATION "." CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel)
INSTALL(FILES "${OpenMW_BINARY_DIR}/Debug/gamecontrollerdb.txt" DESTINATION "." CONFIGURATIONS Debug)
INSTALL(FILES "${OpenMW_BINARY_DIR}/Release/gamecontrollerdb.txt" DESTINATION "." CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel)
INSTALL(FILES "${OpenMW_BINARY_DIR}/Debug/gamecontrollerdb_204.txt" DESTINATION "." CONFIGURATIONS Debug)
INSTALL(FILES "${OpenMW_BINARY_DIR}/Release/gamecontrollerdb_204.txt" DESTINATION "." CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel)
INSTALL(FILES "${OpenMW_BINARY_DIR}/Debug/gamecontrollerdb_205.txt" DESTINATION "." CONFIGURATIONS Debug)
INSTALL(FILES "${OpenMW_BINARY_DIR}/Release/gamecontrollerdb_205.txt" DESTINATION "." CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel)
if(BUILD_MYGUI_PLUGIN)
INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/Debug/Plugin_MyGUI_OpenMW_Resources.dll" DESTINATION "." CONFIGURATIONS Debug)
@ -485,7 +506,9 @@ if(WIN32)
INSTALL(DIRECTORY "${OpenMW_BINARY_DIR}/Release/platforms" DESTINATION "." CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel)
ENDIF()
INSTALL(DIRECTORY "${OpenMW_BINARY_DIR}/resources" DESTINATION ".")
INSTALL(DIRECTORY "${OpenMW_BINARY_DIR}/Debug/resources" DESTINATION "." CONFIGURATIONS Debug)
INSTALL(DIRECTORY "${OpenMW_BINARY_DIR}/Release/resources" DESTINATION "." CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel)
FILE(GLOB plugin_dir_debug "${OpenMW_BINARY_DIR}/Debug/osgPlugins-*")
FILE(GLOB plugin_dir_release "${OpenMW_BINARY_DIR}/Release/osgPlugins-*")
INSTALL(DIRECTORY ${plugin_dir_debug} DESTINATION "." CONFIGURATIONS Debug)
@ -520,9 +543,10 @@ if(WIN32)
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${OpenMW_SOURCE_DIR}/README.md")
SET(CPACK_NSIS_EXECUTABLES_DIRECTORY ".")
SET(CPACK_NSIS_DISPLAY_NAME "OpenMW ${OPENMW_VERSION}")
SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.openmw.org")
SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.openmw.org")
SET(CPACK_NSIS_HELP_LINK "https:\\\\\\\\www.openmw.org")
SET(CPACK_NSIS_URL_INFO_ABOUT "https:\\\\\\\\www.openmw.org")
SET(CPACK_NSIS_INSTALLED_ICON_NAME "openmw-launcher.exe")
SET(CPACK_NSIS_MUI_FINISHPAGE_RUN "openmw-launcher.exe")
SET(CPACK_NSIS_MUI_ICON "${OpenMW_SOURCE_DIR}/files/tes3mp/tes3mp.ico")
SET(CPACK_NSIS_MUI_UNIICON "${OpenMW_SOURCE_DIR}/files/tes3mp/tes3mp.ico")
SET(CPACK_PACKAGE_ICON "${OpenMW_SOURCE_DIR}\\\\files\\\\openmw.bmp")
@ -565,16 +589,15 @@ ENDIF(BUILD_OPENMW OR BUILD_OPENCS)
# Components
add_subdirectory (components)
# Plugins
#if (BUILD_MYGUI_PLUGIN)
# add_subdirectory(plugins/mygui_resource_plugin)
#endif()
# Apps and tools
if (BUILD_OPENMW_MP)
add_subdirectory( apps/openmw-mp )
endif()
if (BUILD_MASTER)
add_subdirectory( apps/master )
endif()
if (BUILD_OPENMW)
add_subdirectory( apps/openmw )
endif()
@ -643,10 +666,10 @@ if (WIN32)
endif()
if (BUILD_OPENMW)
# Release builds use the debug console
set_target_properties(tes3mp PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:CONSOLE")
set_target_properties(tes3mp PROPERTIES COMPILE_DEFINITIONS_RELEASE "_CONSOLE")
set_target_properties(tes3mp PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:CONSOLE")
# Release builds don't use the debug console
set_target_properties(tes3mp PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
set_target_properties(tes3mp PROPERTIES COMPILE_DEFINITIONS_RELEASE "_WINDOWS")
set_target_properties(tes3mp PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS")
endif()
# Play a bit with the warning levels
@ -657,7 +680,8 @@ if (WIN32)
# Warnings that aren't enabled normally and don't need to be enabled
# They're unneeded and sometimes completely retarded warnings that /Wall enables
# Not going to bother commenting them as they tend to warn on every standard library file
4061 4263 4264 4266 4350 4371 4435 4514 4548 4571 4610 4619 4623 4625 4626 4628 4640 4668 4710 4711 4820 4826 4917 4946
4061 4263 4264 4266 4350 4371 4435 4514 4548 4571 4610 4619 4623 4625
4626 4628 4640 4668 4710 4711 4768 4820 4826 4917 4946 5032 5039 5045
# Warnings that are thrown on standard libraries and not OpenMW
4347 # Non-template function with same name and parameter count as template function
@ -665,6 +689,7 @@ if (WIN32)
4510 4512 # Unable to generate copy constructor/assignment operator as it's not public in the base
4706 # Assignment in conditional expression
4738 # Storing 32-bit float result in memory, possible loss of performance
4774 # Format string expected in argument is not a string literal
4986 # Undocumented warning that occurs in the crtdbg.h file
4987 # nonstandard extension used (triggered by setjmp.h)
4996 # Function was declared deprecated
@ -677,6 +702,7 @@ if (WIN32)
# caused by MyGUI
4275 # non dll-interface class 'std::exception' used as base for dll-interface class 'MyGUI::Exception'
4297 # function assumed not to throw an exception but does
# OpenMW specific warnings
4099 # Type mismatch, declared class or struct is defined with other type
@ -710,7 +736,10 @@ if (WIN32)
endforeach(d)
set_target_properties(components PROPERTIES COMPILE_FLAGS "${WARNINGS} ${MT_BUILD}")
set_target_properties(osg-ffmpeg-videoplayer PROPERTIES COMPILE_FLAGS "${WARNINGS} ${MT_BUILD}")
if (BUILD_OPENMW)
set_target_properties(osg-ffmpeg-videoplayer PROPERTIES COMPILE_FLAGS "${WARNINGS} ${MT_BUILD}")
endif()
if (BUILD_BSATOOL)
set_target_properties(bsatool PROPERTIES COMPILE_FLAGS "${WARNINGS} ${MT_BUILD}")
@ -741,8 +770,7 @@ if (WIN32)
endif()
if (BUILD_OPENMW)
# Very specific issue this, only needed on 32-bit VS2015 during unity builds.
if (MSVC_VERSION GREATER 1800 AND CMAKE_SIZEOF_VOID_P EQUAL 4 AND OPENMW_UNITY_BUILD)
if (OPENMW_UNITY_BUILD)
set_target_properties(tes3mp PROPERTIES COMPILE_FLAGS "${WARNINGS} ${MT_BUILD} /bigobj")
else()
set_target_properties(tes3mp PROPERTIES COMPILE_FLAGS "${WARNINGS} ${MT_BUILD}")
@ -760,17 +788,19 @@ if (WIN32)
endif()
# Apple bundling
if (APPLE)
if (OPENMW_OSX_DEPLOYMENT AND APPLE AND DESIRED_QT_VERSION MATCHES 5)
get_property(QT_COCOA_PLUGIN_PATH TARGET Qt5::QCocoaIntegrationPlugin PROPERTY LOCATION_RELEASE)
get_filename_component(QT_COCOA_PLUGIN_DIR "${QT_COCOA_PLUGIN_PATH}" DIRECTORY)
get_filename_component(QT_COCOA_PLUGIN_GROUP "${QT_COCOA_PLUGIN_DIR}" NAME)
get_filename_component(QT_COCOA_PLUGIN_NAME "${QT_COCOA_PLUGIN_PATH}" NAME)
configure_file("${QT_COCOA_PLUGIN_PATH}" "${APP_BUNDLE_DIR}/Contents/MacOS/${QT_COCOA_PLUGIN_GROUP}/${QT_COCOA_PLUGIN_NAME}" COPYONLY)
configure_file("${QT_COCOA_PLUGIN_PATH}" "${APP_BUNDLE_DIR}/Contents/PlugIns/${QT_COCOA_PLUGIN_GROUP}/${QT_COCOA_PLUGIN_NAME}" COPYONLY)
configure_file("${OpenMW_SOURCE_DIR}/files/mac/qt.conf" "${APP_BUNDLE_DIR}/Contents/Resources/qt.conf" COPYONLY)
if (BUILD_OPENCS)
get_property(OPENCS_BUNDLE_NAME_TMP TARGET openmw-cs PROPERTY OUTPUT_NAME)
set(OPENCS_BUNDLE_NAME "${OPENCS_BUNDLE_NAME_TMP}.app")
configure_file("${QT_COCOA_PLUGIN_PATH}" "${OPENCS_BUNDLE_NAME}/Contents/MacOS/${QT_COCOA_PLUGIN_GROUP}/${QT_COCOA_PLUGIN_NAME}" COPYONLY)
configure_file("${QT_COCOA_PLUGIN_PATH}" "${OPENCS_BUNDLE_NAME}/Contents/PlugIns/${QT_COCOA_PLUGIN_GROUP}/${QT_COCOA_PLUGIN_NAME}" COPYONLY)
configure_file("${OpenMW_SOURCE_DIR}/files/mac/qt.conf" "${OPENCS_BUNDLE_NAME}/Contents/Resources/qt.conf" COPYONLY)
endif ()
install(DIRECTORY "${APP_BUNDLE_DIR}" USE_SOURCE_PERMISSIONS DESTINATION "." COMPONENT Runtime)
@ -829,8 +859,8 @@ if (APPLE)
install_plugins_for_bundle("${APP_BUNDLE_NAME}" PLUGINS)
install_plugins_for_bundle("${OPENCS_BUNDLE_NAME}" OPENCS_PLUGINS)
set(PLUGINS ${PLUGINS} "${INSTALLED_OPENMW_APP}/Contents/MacOS/${QT_COCOA_PLUGIN_GROUP}/${QT_COCOA_PLUGIN_NAME}")
set(OPENCS_PLUGINS ${OPENCS_PLUGINS} "${INSTALLED_OPENCS_APP}/Contents/MacOS/${QT_COCOA_PLUGIN_GROUP}/${QT_COCOA_PLUGIN_NAME}")
set(PLUGINS ${PLUGINS} "${INSTALLED_OPENMW_APP}/Contents/PlugIns/${QT_COCOA_PLUGIN_GROUP}/${QT_COCOA_PLUGIN_NAME}")
set(OPENCS_PLUGINS ${OPENCS_PLUGINS} "${INSTALLED_OPENCS_APP}/Contents/PlugIns/${QT_COCOA_PLUGIN_GROUP}/${QT_COCOA_PLUGIN_NAME}")
install(CODE "
function(gp_item_default_embedded_path_override item default_embedded_path_var)
@ -840,12 +870,11 @@ if (APPLE)
endif()
endfunction()
cmake_policy(SET CMP0009 OLD)
fixup_bundle(\"${INSTALLED_OPENMW_APP}\" \"${PLUGINS}\" \"\")
fixup_bundle(\"${INSTALLED_OPENCS_APP}\" \"${OPENCS_PLUGINS}\" \"\")
" COMPONENT Runtime)
include(CPack)
endif (APPLE)
endif ()
# Doxygen Target -- simply run 'make doc' or 'make doc_pages'
# output directory for 'make doc' is "${OpenMW_BINARY_DIR}/docs/Doxygen"
@ -869,4 +898,3 @@ if (DOXYGEN_FOUND)
WORKING_DIRECTORY ${OpenMW_BINARY_DIR}
COMMENT "Generating documentation for the github-pages at ${DOXYGEN_PAGES_OUTPUT_DIR}" VERBATIM)
endif ()

@ -1,16 +1,115 @@
Description
===========
How to contribute to OpenMW
=======================
Not sure what to do with all your free time? Pick out a task from here:
https://gitlab.com/OpenMW/openmw/issues
Currently, we are focused on completing the MW game experience and general polishing. Features out of this scope may be approved in some cases, but you should probably start a discussion first.
Note:
* Tasks set to 'openmw-future' are usually out of the current scope of the project and can't be started yet.
* Bugs that are not 'Confirmed' should be confirmed first.
* Often, it's best to start a discussion about possible solutions before you jump into coding, especially for larger features.
Your pull request description should include (if applicable):
Aside from coding, you can also help by triaging the issues list. Check for bugs that are 'Unconfirmed' and try to confirm them on your end, working out any details that may be necessary. Check for bugs that do not conform to [Bug reporting guidelines](https://wiki.openmw.org/index.php?title=Bug_Reporting_Guidelines) and improve them to do so!
* A link back to the bug report or forum discussion that prompted the change
There are various [Tools](https://wiki.openmw.org/index.php?title=Tools) to facilitate testing/development.
Pull Request Guidelines
=======================
To facilitate the review process, your pull request description should include the following, if applicable:
* A link back to the bug report or forum discussion that prompted the change. Note: when linking bugs, use the syntax ```[Bug #xyz](https://bugs.openmw.org/issues/#xyz)``` to create a clickable link. Writing only 'Bug #xyz' will unfortunately create a link to the Github pull request with that number instead.
* Summary of the changes made
* Reasoning / motivation behind the change
* What testing you have carried out to verify the change
Other notes
===========
Furthermore, we advise to:
* Separate your work into multiple pull requests whenever possible. As a rule of thumb, each feature and each bugfix should go into a separate PR, unless they are closely related or dependent upon each other. Small pull requests are easier to review, and are less likely to require further changes before we can merge them. A "mega" pull request with lots of unrelated commits in it is likely to get held up in review for a long time.
* Avoid stuffing unrelated commits into one pull request. As a rule of thumb, each feature and each bugfix should go into a separate PR, unless they are closely related or dependent upon each other. Small pull requests are easier to review, and are less likely to require further changes before we can merge them. A "mega" pull request with lots of unrelated commits in it is likely to get held up in review for a long time.
* Feel free to submit incomplete pull requests. Even if the work can not be merged yet, pull requests are a great place to collect early feedback. Just make sure to mark it as *[Incomplete]* or *[Do not merge yet]* in the title.
* If you plan on contributing often, please read the [Developer Reference](https://wiki.openmw.org/index.php?title=Developer_Reference) on our wiki, especially the [Policies and Standards](https://wiki.openmw.org/index.php?title=Policies_and_Standards).
* Make sure each of your changes has a clear objective. Unnecessary changes may lead to merge conflicts, clutter the commit history and slow down review. Code formatting 'fixes' should be avoided, unless you were already changing that particular line anyway.
* Reference the bug / feature ticket(s) in your commit message (e.g. 'Bug #123') to make it easier to keep track of what we changed for what reason. Our bugtracker will show those commits next to the ticket. If your commit message includes 'Fixes #123', that bug/feature will automatically be set to 'Closed' when your commit is merged.
* When pulling changes from master, prefer rebase over merge. Consider using a merge if there are conflicts or for long-running PRs.
Guidelines for original engine "fixes"
=================================
From time to time you may be tempted to "fix" what you think was a "bug" in the original game engine.
Unfortunately, the definition of what is a "bug" is not so clear. Consider that your "bug" is actually a feature unless proven otherwise:
* We have no way of knowing what the original developers really intended (short of asking them, good luck with that).
* What may seem like an illogical mechanic can actually be part of an attempt to balance the game.
* Many people will actually <i>like</i> these "bugs" because that is what they remember the game for.
* Exploits may be part of the fun of an open-world game - they reward knowledge with power. There are too many of them to plug them all, anyway.
OpenMW, in its default configuration, is meant to be a faithful reimplementation of Morrowind, minus things like crash bugs, stability issues and severe design errors. However, we try to avoid touching anything that affects the core gameplay, the balancing of the game or introduces incompatibilities with existing mod content.
That said, we may sometimes evaluate such issues on an individual basis. Common exceptions to the above would be:
* Issues so glaring that they would severely limit the capabilities of the engine in the future (for example, the scripting engine not being allowed to access objects in remote cells)
* Bugs where the intent is very obvious, and that have little to no balancing impact (e.g. the bug were being tired made it easier to repair items, instead of harder)
* Bugs that were fixed in an official patch for Morrowind
Feature additions policy
=====================
We get it, you have waited so long for feature XYZ to be available in Morrowind and now that OpenMW is here you can not wait to implement your ingenious idea and share it with the world.
Unfortunately, since maintaining features comes at a cost and our resources are limited, we have to be a little selective in what features we allow into the main repository. Generally:
* Features should be as generic and non-redundant as possible.
* Any feature that is also possible with modding should be done as a mod instead.
* In the future, OpenMW plans to expand the scope of what is possible with modding, e.g. by moving certain game logic into editable scripts.
* Currently, modders can edit OpenMW's GUI skins and layout XML files, although there are still a few missing hooks (e.g. scripting support) in order to make this into a powerful way of modding.
* If a feature introduces new game UI strings, that reduces its chance of being accepted because we do not currently have any way of localizing these to the user's Morrowind installation language.
If you are in doubt of your feature being within our scope, it is probably best to start a forum discussion first. See the [settings documentation](https://openmw.readthedocs.io/en/stable/reference/modding/settings/index.html) and [Features list](https://wiki.openmw.org/index.php?title=Features) for some examples of features that were deemed acceptable.
Reviewing pull requests
=======================
We welcome any help in reviewing open PRs. You don't need to be a developer to comment on new features. We also encourage ["junior" developers to review senior's work](https://pagefault.blog/2018/04/08/why-junior-devs-should-review-seniors-commits/).
This review process is divided into two sections because complaining about code or style issues hardly makes sense until the functionality of the PR is deemed OK. Anyone can help with the Functionality Review while most parts of the Code Review require you to have programming experience.
In addition to the checklist below, make sure to check that the Pull Request Guidelines (first half of this document) were followed.
First review
============
1. Ask for missing information or clarifications. Compare against the project's design goals and roadmap.
2. Check if the automated tests are passing. If they are not, make the PR author aware of the issue and potentially link to the error line on Travis CI or Appveyor. If the error appears unrelated to the PR and/or the master branch is failing with the same error, our CI has broken and needs to be fixed independently of any open PRs. Raise this issue on the forums, bug tracker or with the relevant maintainer. The PR can be merged in this case as long as you've built it yourself to make sure it does build.
3. Make sure that the new code has been tested thoroughly, either by asking the author or, preferably, testing yourself. In a complex project like OpenMW, it is easy to make mistakes, typos, etc. Therefore, prefer testing all code changes, no matter how trivial they look. When you have tested a PR that no one has tested so far, post a comment letting us know.
4. On long running PRs, request the author to update its description with the current state or a checklist of things left to do.
Code Review
===========
1. Carefully review each line for issues the author may not have thought of, paying special attention to 'special' cases. Often, people build their code with a particular mindset and forget about other configurations or unexpected interactions.
2. If any changes are workarounds for an issue in an upstream library, make sure the issue was reported upstream so we can eventually drop the workaround when the issue is fixed and the new version of that library is a build dependency.
3. Make sure PRs do not turn into arguments about hardly related issues. If the PR author disagrees with an established part of the project (e.g. supported build environments), they should open a forum discussion or bug report and in the meantime adjust the PR to adhere to the established way, rather than leaving the PR hanging on a dispute.
4. Check if the code matches our style guidelines.
5. Check to make sure the commit history is clean. Squashing should be considered if the review process has made the commit history particularly long. Commits that don't build should be avoided because they are a nuisance for ```git bisect```.
Merging
=======
To be able to merge PRs, commit priviledges are required. If you do not have the priviledges, just ping someone that does have them with a short comment like "Looks good to me @user".
The person to merge the PR may either use github's Merge button or if using the command line, use the ```--no-ff``` flag (so a merge commit is created, just like with Github's merge button) and include the pull request number in the commit description.
Dealing with regressions
========================
The master branch should always be in a working state that is not worse than the previous release in any way. If a regression is found, the first and foremost priority should be to get the regression fixed quickly, either by reverting the change that caused it or finding a better solution. Please avoid leaving the project in the 'broken' state for an extensive period of time while proper solutions are found. If the solution takes more than a day or so then it is usually better to revert the offending change first and reapply it later when fixed.
Other resources
===============
[GitHub blog - how to write the perfect pull request](https://blog.github.com/2015-01-21-how-to-write-the-perfect-pull-request/)

@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -631,8 +631,8 @@ to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
{one line to give the program's name and a brief idea of what it does.}
Copyright (C) {year} {name of author}
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -645,14 +645,14 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
{project} Copyright (C) {year} {fullname}
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
<https://www.gnu.org/philosophy/why-not-lgpl.html>.

@ -1,41 +1,49 @@
TES3MP
======
[![Build Status](https://travis-ci.org/TES3MP/openmw-tes3mp.svg?branch=master)](https://travis-ci.org/TES3MP/openmw-tes3mp)
Copyright (c) 2008-2015, OpenMW Team
Copyright (c) 2016-2019, Stanislav Zhukov & David Cernat
TES3MP is a project aiming to add multiplayer functionality to [OpenMW](https://github.com/OpenMW/openmw), a free and open source recreation of the popular Bethesda Softworks game "The Elder Scrolls III: Morrowind".
[![Build Status](https://travis-ci.org/TES3MP/openmw-tes3mp.svg?branch=0.7.0)](https://travis-ci.org/TES3MP/openmw-tes3mp)
* Version: 0.5.1
* License: GPLv3 (see docs/license/GPL3.txt for more information)
* Website: https://steamcommunity.com/groups/mwmulti
TES3MP is a project adding multiplayer functionality to [OpenMW](https://github.com/OpenMW/openmw), an open-source game engine that supports playing "The Elder Scrolls III: Morrowind" by Bethesda Softworks.
* TES3MP version: 0.7.0-alpha
* OpenMW version: 0.44.0
* License: GPLv3 (see [LICENSE](https://github.com/TES3MP/openmw-tes3mp/blob/master/LICENSE) for more information)
Font Licenses:
* DejaVuLGCSansMono.ttf: custom (see docs/license/DejaVu Font License.txt for more information)
* DejaVuLGCSansMono.ttf: custom (see [files/mygui/DejaVu Font License.txt](https://github.com/TES3MP/openmw-tes3mp/blob/master/files/mygui/DejaVu%20Font%20License.txt) for more information)
Project Status
Project status
--------------
[Version changelog](https://github.com/TES3MP/openmw-tes3mp/blob/master/tes3mp-changelog.md)
Our project is not yet in a playable state, though we are getting close. At the moment we have synchronization of character appearance, character skills, stats, attributes and death, movement in interiors and exteriors, melee and ranged combat, spell casting, picking up and dropping items in the world, using doors and levers, and adding and removing items from containers, as well as [serverside Lua scripts](https://github.com/TES3MP/PluginExamples) used to save and load the state of most of the aforementioned.
As of version 0.7.0, TES3MP is fully playable, providing very extensive player, NPC, world and quest synchronization, as well as state saving and loading, all of which are highly customizable via [serverside Lua scripts](https://github.com/TES3MP/CoreScripts).
Remaining gameplay problems mostly relate to AI and the synchronization of clientside script variables.
Donations
---------------
You can benefit the project by donating on Patreon to our two developers, [David Cernat](https://www.patreon.com/davidcernat) and [Koncord](https://www.patreon.com/Koncord), as well as by supporting [OpenMW](https://openmw.org).
Contributing
--------------
---------------
Development has been relatively fast, but any contribution regarding [code](https://github.com/TES3MP/openmw-tes3mp/blob/master/CONTRIBUTING.md), documentation, bug hunting or video showcases is greatly appreciated.
Helping us with documentation, bug hunting and video showcases is always greatly appreciated.
Test sessions are often advertised in [our Steam group](https://steamcommunity.com/groups/mwmulti) or [our Discord server](https://discord.gg/H8zhhuk).
For code contributions, it's best to start out with modestly sized fixes and features and work your way up. There are so many different possible implementations of more major features many of which would cause undesirable code or vision conflicts with OpenMW that those should be talked over in advance with the existing developers before effort is spent on them.
Feel free to contact the [team members](https://github.com/TES3MP/openmw-tes3mp/blob/master/tes3mp-credits.md) for any questions you might have.
Getting Started
Getting started
---------------
* [Community forums](https://steamcommunity.com/groups/mwmulti)
* [Installation and build instructions](https://github.com/TES3MP/openmw-tes3mp/wiki/Installation-and-build-instructions)
* [Quickstart guide](https://github.com/TES3MP/openmw-tes3mp/wiki/Quickstart-guide)
* [Steam group](https://steamcommunity.com/groups/mwmulti) and its [detailed FAQ](https://steamcommunity.com/groups/mwmulti/discussions/1/353916184342480541/)
* [TES3MP section on OpenMW forums](https://forum.openmw.org/viewforum.php?f=45)
* [Discord server](https://discord.gg/ECJk293)
* [Subreddit](https://www.reddit.com/r/tes3mp)
* [Known issues and bug reports](https://github.com/TES3MP/openmw-tes3mp/issues)
Donations
---------------
You can benefit the project by supporting OpenMW and/or by [becoming Koncord's patron](https://www.patreon.com/Koncord).

@ -1,5 +1,5 @@
set (CMAKE_CXX_STANDARD 11)
set (CMAKE_CXX_STANDARD 14)
set(BROWSER_UI
${CMAKE_SOURCE_DIR}/files/tes3mp/ui/Main.ui
@ -9,11 +9,14 @@ set(BROWSER
main.cpp
MainWindow.cpp
ServerModel.cpp
NetController.cpp
ServerInfoDialog.cpp
MySortFilterProxyModel.cpp
netutils/HTTPNetwork.cpp
netutils/Utils.cpp
netutils/QueryClient.cpp
PingUpdater.cpp
PingHelper.cpp
QueryHelper.cpp
${CMAKE_SOURCE_DIR}/files/tes3mp/browser.rc
)
@ -22,13 +25,17 @@ set(BROWSER_HEADER_MOC
ServerModel.hpp
ServerInfoDialog.hpp
MySortFilterProxyModel.hpp
PingUpdater.hpp
PingHelper.hpp
QueryHelper.hpp
)
set(BROWSER_HEADER
${BROWSER_HEADER_MOC}
NetController.hpp
netutils/HTTPNetwork.hpp
netutils/Utils.hpp
netutils/QueryClient.hpp
Types.hpp
)
source_group(browser FILES ${BROWSER} ${BROWSER_HEADER})
@ -90,4 +97,4 @@ endif()
if (BUILD_WITH_CODE_COVERAGE)
add_definitions (--coverage)
target_link_libraries(tes3mp-browser gcov)
endif()
endif()

@ -3,7 +3,8 @@
//
#include "MainWindow.hpp"
#include "NetController.hpp"
#include "QueryHelper.hpp"
#include "PingHelper.hpp"
#include "ServerInfoDialog.hpp"
#include "components/files/configurationmanager.hpp"
#include <qdebug.h>
@ -13,7 +14,9 @@
#include <QFile>
#include <QJsonDocument>
using namespace Process;
using namespace std;
MainWindow::MainWindow(QWidget *parent)
{
@ -28,14 +31,22 @@ MainWindow::MainWindow(QWidget *parent)
tblServerBrowser->setModel(proxyModel);
tblFavorites->setModel(proxyModel);
// Remove Favorites tab while it remains broken
tabWidget->removeTab(1);
tblServerBrowser->hideColumn(ServerData::ADDR);
tblFavorites->hideColumn(ServerData::ADDR);
PingHelper::Get().SetModel((ServerModel*)proxyModel->sourceModel());
queryHelper = new QueryHelper(proxyModel->sourceModel());
connect(queryHelper, &QueryHelper::started, [this](){actionRefresh->setEnabled(false);});
connect(queryHelper, &QueryHelper::finished, [this](){actionRefresh->setEnabled(true);});
connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(tabSwitched(int)));
connect(actionAdd, SIGNAL(triggered(bool)), this, SLOT(addServer()));
connect(actionAdd_by_IP, SIGNAL(triggered(bool)), this, SLOT(addServerByIP()));
connect(actionDelete, SIGNAL(triggered(bool)), this, SLOT(deleteServer()));
connect(actionRefresh, SIGNAL(triggered(bool)), this, SLOT(refresh()));
connect(actionRefresh, SIGNAL(triggered(bool)), queryHelper, SLOT(refresh()));
connect(actionPlay, SIGNAL(triggered(bool)), this, SLOT(play()));
connect(tblServerBrowser, SIGNAL(clicked(QModelIndex)), this, SLOT(serverSelected()));
connect(tblFavorites, SIGNAL(clicked(QModelIndex)), this, SLOT(serverSelected()));
@ -43,9 +54,11 @@ MainWindow::MainWindow(QWidget *parent)
connect(tblServerBrowser, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(play()));
connect(cBoxNotFull, SIGNAL(toggled(bool)), this, SLOT(notFullSwitch(bool)));
connect(cBoxWithPlayers, SIGNAL(toggled(bool)), this, SLOT(havePlayersSwitch(bool)));
connect(cBBoxWOPass, SIGNAL(toggled(bool)), this, SLOT(noPasswordSwitch(bool)));
connect(comboLatency, SIGNAL(currentIndexChanged(int)), this, SLOT(maxLatencyChanged(int)));
connect(leGamemode, SIGNAL(textChanged(const QString &)), this, SLOT(gamemodeChanged(const QString &)));
loadFavorites();
queryHelper->refresh();
}
MainWindow::~MainWindow()
@ -53,19 +66,24 @@ MainWindow::~MainWindow()
delete mGameInvoker;
}
void MainWindow::addServerAndUpdate(QString addr)
void MainWindow::addServerAndUpdate(const QString &addr)
{
favorites->insertRow(0);
QModelIndex mi = favorites->index(0, ServerData::ADDR);
favorites->setData(mi, addr, Qt::EditRole);
NetController::get()->updateInfo(favorites, mi);
//NetController::get()->updateInfo(favorites, mi);
//QueryClient::Update(RakNet::SystemAddress())
/*auto data = QueryClient::Get().Query();
if (data.empty())
return;
transform(data.begin(), data.end(), back_inserter());*/
}
void MainWindow::addServer()
{
int id = tblServerBrowser->selectionModel()->currentIndex().row();
if(id >= 0)
if (id >= 0)
{
int sourceId = proxyModel->mapToSource(proxyModel->index(id, ServerData::ADDR)).row();
favorites->myData.push_back(browser->myData[sourceId]);
@ -76,20 +94,20 @@ void MainWindow::addServerByIP()
{
bool ok;
QString text = QInputDialog::getText(this, tr("Add Server by address"), tr("Address:"), QLineEdit::Normal, "", &ok);
if(ok && !text.isEmpty())
if (ok && !text.isEmpty())
addServerAndUpdate(text);
}
void MainWindow::deleteServer()
{
if(tabWidget->currentIndex() != 1)
if (tabWidget->currentIndex() != 1)
return;
int id = tblFavorites->selectionModel()->currentIndex().row();
if(id >= 0)
if (id >= 0)
{
int sourceId = proxyModel->mapToSource(proxyModel->index(id, ServerData::ADDR)).row();
favorites->removeRow(sourceId);
if(favorites->myData.isEmpty())
if (favorites->myData.isEmpty())
{
actionPlay->setEnabled(false);
actionDelete->setEnabled(false);
@ -97,39 +115,34 @@ void MainWindow::deleteServer()
}
}
bool MainWindow::refresh()
{
return NetController::get()->updateInfo(proxyModel->sourceModel());
/*tblServerBrowser->resizeColumnToContents(ServerData::HOSTNAME);
tblServerBrowser->resizeColumnToContents(ServerData::MODNAME);
tblFavorites->resizeColumnToContents(ServerData::HOSTNAME);
tblFavorites->resizeColumnToContents(ServerData::MODNAME);*/
}
void MainWindow::play()
{
QTableView *curTable = tabWidget->currentIndex() ? tblFavorites : tblServerBrowser;
int id = curTable->selectionModel()->currentIndex().row();
if(id < 0)
if (id < 0)
return;
ServerInfoDialog infoDialog(this);
ServerModel *sm = ((ServerModel*)proxyModel->sourceModel());
int sourceId = proxyModel->mapToSource(proxyModel->index(id, ServerData::ADDR)).row();
NetController::get()->selectServer(&sm->myData[sourceId]);
infoDialog.refresh();
if(!infoDialog.exec())
ServerInfoDialog infoDialog(sm->myData[sourceId].addr, this);
if (!infoDialog.exec())
return;
if (!infoDialog.isUpdated())
return;
QStringList arguments;
arguments.append(QLatin1String("--connect=") + sm->myData[sourceId].addr.toLatin1());
if(sm->myData[sourceId].needPassw)
if (sm->myData[sourceId].GetPassword() == 1)
{
bool ok;
QString passw = QInputDialog::getText(this, "Connecting to: " + sm->myData[sourceId].addr, "Password: ", QLineEdit::Password, "", &ok);
if(!ok)
QString passw = QInputDialog::getText(this, tr("Connecting to: ") + sm->myData[sourceId].addr, tr("Password: "),
QLineEdit::Password, "", &ok);
if (!ok)
return;
arguments.append(QLatin1String("--password=") + passw.toLatin1());
}
@ -140,7 +153,7 @@ void MainWindow::play()
void MainWindow::tabSwitched(int index)
{
if(index == 0)
if (index == 0)
{
proxyModel->setSourceModel(browser);
actionDelete->setEnabled(false);
@ -156,9 +169,9 @@ void MainWindow::tabSwitched(int index)
void MainWindow::serverSelected()
{
actionPlay->setEnabled(true);
if(tabWidget->currentIndex() == 0)
if (tabWidget->currentIndex() == 0)
actionAdd->setEnabled(true);
if(tabWidget->currentIndex() == 1)
if (tabWidget->currentIndex() == 1)
actionDelete->setEnabled(true);
}
@ -168,12 +181,12 @@ void MainWindow::closeEvent(QCloseEvent *event)
QString cfgPath = QString::fromStdString((cfgMgr.getUserConfigPath() / "favorites.dat").string());
QJsonArray saveData;
for(auto server : favorites->myData)
for (auto server : favorites->myData)
saveData.push_back(server.addr);
QFile file(cfgPath);
if(!file.open(QIODevice::WriteOnly))
if (!file.open(QIODevice::WriteOnly))
{
qDebug() << "Cannot save " << cfgPath;
return;
@ -190,7 +203,7 @@ void MainWindow::loadFavorites()
QString cfgPath = QString::fromStdString((cfgMgr.getUserConfigPath() / "favorites.dat").string());
QFile file(cfgPath);
if(!file.open(QIODevice::ReadOnly))
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "Cannot open " << cfgPath;
return;
@ -198,7 +211,7 @@ void MainWindow::loadFavorites()
QJsonDocument jsonDoc(QJsonDocument::fromJson(file.readAll()));
for(auto server : jsonDoc.array())
for (auto server : jsonDoc.array())
addServerAndUpdate(server.toString());
file.close();
@ -214,6 +227,11 @@ void MainWindow::havePlayersSwitch(bool state)
proxyModel->filterEmptyServers(state);
}
void MainWindow::noPasswordSwitch(bool state)
{
proxyModel->filterPassworded(state);
}
void MainWindow::maxLatencyChanged(int index)
{
int maxLatency = index * 50;

@ -11,17 +11,17 @@
#include "MySortFilterProxyModel.hpp"
#include <components/process/processinvoker.hpp>
class QueryHelper;
class MainWindow : public QMainWindow, private Ui::MainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
virtual ~MainWindow();
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow() override;
protected:
void closeEvent(QCloseEvent * event) Q_DECL_OVERRIDE;
void addServerAndUpdate(QString addr);
public slots:
bool refresh();
void addServerAndUpdate(const QString &addr);
protected slots:
void tabSwitched(int index);
void addServer();
@ -31,9 +31,11 @@ protected slots:
void serverSelected();
void notFullSwitch(bool state);
void havePlayersSwitch(bool state);
void noPasswordSwitch(bool state);
void maxLatencyChanged(int index);
void gamemodeChanged(const QString &text);
private:
QueryHelper *queryHelper;
Process::ProcessInvoker *mGameInvoker;
ServerModel *browser, *favorites;
MySortFilterProxyModel *proxyModel;

@ -6,6 +6,7 @@
#include "ServerModel.hpp"
#include <qdebug.h>
#include <apps/browser/netutils/Utils.hpp>
bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
@ -13,26 +14,49 @@ bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &
QModelIndex pingIndex = sourceModel()->index(sourceRow, ServerData::PING, sourceParent);
QModelIndex plIndex = sourceModel()->index(sourceRow, ServerData::PLAYERS, sourceParent);
QModelIndex maxPlIndex = sourceModel()->index(sourceRow, ServerData::MAX_PLAYERS, sourceParent);
QModelIndex passwordIndex = sourceModel()->index(sourceRow, ServerData::PASSW, sourceParent);
int ping = sourceModel()->data(pingIndex).toInt();
bool pingOk;
int ping = sourceModel()->data(pingIndex).toInt(&pingOk);
int players = sourceModel()->data(plIndex).toInt();
int maxPlayers = sourceModel()->data(maxPlIndex).toInt();
if(maxPing > 0 && (ping == -1 || ping > maxPing))
if (maxPing > 0 && (ping == -1 || ping > maxPing || !pingOk))
return false;
if(filterEmpty && players == 0)
if (filterEmpty && players == 0)
return false;
if(filterFull && players >= maxPlayers)
if (filterFull && players >= maxPlayers)
return false;
if(filterPasswEnabled && sourceModel()->data(passwordIndex).toString() == "Yes")
return false;
return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent);
}
bool MySortFilterProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
{
if(sortColumn() == ServerData::PING)
{
bool valid;
int pingright = sourceModel()->data(source_right).toInt(&valid);
pingright = valid ? pingright : PING_UNREACHABLE;
int pingleft = sourceModel()->data(source_left).toInt(&valid);
pingleft = valid ? pingleft : PING_UNREACHABLE;
return pingleft < pingright;
}
else
return QSortFilterProxyModel::lessThan(source_left, source_right);
}
MySortFilterProxyModel::MySortFilterProxyModel(QObject *parent) : QSortFilterProxyModel(parent)
{
filterEmpty = false;
filterFull = false;
filterPasswEnabled = false;
maxPing = 0;
setSortCaseSensitivity(Qt::CaseSensitivity::CaseInsensitive);
}
void MySortFilterProxyModel::filterEmptyServers(bool state)
@ -52,3 +76,9 @@ void MySortFilterProxyModel::pingLessThan(int maxPing)
this->maxPing = maxPing;
invalidateFilter();
}
void MySortFilterProxyModel::filterPassworded(bool state)
{
filterPasswEnabled = state;
invalidateFilter();
}

@ -13,13 +13,15 @@ class MySortFilterProxyModel : public QSortFilterProxyModel
Q_OBJECT
protected:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const Q_DECL_FINAL;
bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const Q_DECL_FINAL;
public:
MySortFilterProxyModel(QObject *parent);
explicit MySortFilterProxyModel(QObject *parent);
void filterFullServer(bool state);
void filterEmptyServers(bool state);
void filterPassworded(bool state);
void pingLessThan(int maxPing);
private:
bool filterEmpty, filterFull;
bool filterEmpty, filterFull, filterPasswEnabled;
int maxPing;
};

@ -1,266 +0,0 @@
//
// Created by koncord on 07.01.17.
//
#include <cassert>
#include <QtCore/QTime>
#include "NetController.hpp"
#include "qdebug.h"
#include <RakPeer.h>
#include <RakSleep.h>
#include <sstream>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <memory>
#include <QtWidgets/QMessageBox>
using namespace std;
NetController *NetController::mThis = nullptr;
NetController *NetController::get()
{
assert(mThis);
return mThis;
}
void NetController::Create(std::string addr, unsigned short port)
{
assert(!mThis);
mThis = new NetController(addr, port);
}
void NetController::Destroy()
{
assert(mThis);
delete mThis;
mThis = nullptr;
}
NetController::NetController(std::string addr, unsigned short port) : httpNetwork(addr, port)
{
}
NetController::~NetController()
{
}
struct pattern
{
pattern(QString value): value(value) {}
bool operator()(const ServerData &data)
{
return value == data.addr;
}
QString value;
};
void NetController::setData(QString address, QJsonObject server, ServerModel *model)
{
QModelIndex mi = model->index(0, ServerData::ADDR);
model->setData(mi, address);
mi = model->index(0, ServerData::PLAYERS);
model->setData(mi, server["players"].toInt());
mi = model->index(0, ServerData::MAX_PLAYERS);
model->setData(mi, server["max_players"].toInt());
mi = model->index(0, ServerData::HOSTNAME);
model->setData(mi, server["hostname"].toString());
mi = model->index(0, ServerData::MODNAME);
model->setData(mi, server["modname"].toString());
mi = model->index(0, ServerData::VERSION);
model->setData(mi, server["version"].toString());
mi = model->index(0, ServerData::PASSW);
model->setData(mi, server["passw"].toBool());
mi = model->index(0, ServerData::PING);
// This *should* fix a crash when a port isn't returned by data.
if(!address.contains(":"))
address.append(":25565");
QStringList addr = address.split(":");
model->setData(mi, PingRakNetServer(addr[0].toLatin1().data(), addr[1].toUShort()));
}
bool NetController::downloadInfo(QAbstractItemModel *pModel, QModelIndex index)
{
ServerModel *model = ((ServerModel *) pModel);
/*
* download stuff
*/
QString data;
QJsonParseError err;
if(index.isValid() && index.row() >= 0)
{
const ServerData &sd = model->myData[index.row()];
while(true)
{
data = QString::fromStdString(httpNetwork.getData((QString("/api/servers/") + sd.addr).toLatin1()));
if (!data.isEmpty() && data != "NO_CONTENT" && data != "LOST_CONNECTION")
break;
RakSleep(30);
}
qDebug() << "Content for \"" << sd.addr << "\": " << data;
if(data == "bad request" || data == "not found") // TODO: if server is not registered we should download info directly from the server
{
qDebug() << "Server is not registered";
return false;
}
QJsonDocument jsonDocument = QJsonDocument::fromJson(data.toLatin1(), &err);
QJsonObject server = jsonDocument.object()["server"].toObject();
setData(sd.addr, server, model);
return true;
}
while (true)
{
data = QString::fromStdString(httpNetwork.getData("/api/servers"));
if (!data.isEmpty() && data != "NO_CONTENT" && data != "LOST_CONNECTION")
break;
RakSleep(30);
}
if(data == "UNKNOWN_ADDRESS")
{
QMessageBox::critical(0, "Error", "Cannot connect to the master server!");
return false;
}
qDebug() << "Content: " << data;
QJsonDocument jsonDocument = QJsonDocument::fromJson(data.toLatin1(), &err);
QJsonObject listServers = jsonDocument.object()["list servers"].toObject();
for(auto iter = listServers.begin(); iter != listServers.end(); iter++)
{
QJsonObject server = iter->toObject();
qDebug() << iter.key();
qDebug() << server["hostname"].toString();
qDebug() << server["modname"].toString();
qDebug() << server["players"].toInt();
qDebug() << server["max_players"].toInt();
qDebug() << server["version"].toString();
qDebug() << server["passw"].toBool();
QVector<ServerData>::Iterator value = std::find_if(model->myData.begin(), model->myData.end(), pattern(iter.key()));
if(value == model->myData.end())
model->insertRow(0);
setData(iter.key(), server, model);
}
return true;
}
bool NetController::updateInfo(QAbstractItemModel *pModel, QModelIndex index)
{
ServerModel *model = ((ServerModel*)pModel);
bool result;
if (index.isValid() && index.row() >= 0)
result = downloadInfo(pModel, index);
else
{
for (auto iter = model->myData.begin(); iter != model->myData.end(); iter++)
{
qDebug() << iter->addr;
}
model->removeRows(0, model->rowCount(index));
result = downloadInfo(pModel, index);
}
return result;
}
void NetController::updateInfo()
{
QString data;
QString uri = "/api/servers/" + sd->addr;
while (true)
{
data = QString::fromStdString(httpNetwork.getData(uri.toLatin1()));
if (!data.isEmpty() && data != "NO_CONTENT" && data != "LOST_CONNECTION")
break;
RakSleep(30);
}
if(data == "UNKNOWN_ADDRESS")
{
QMessageBox::critical(0, "Error", "Cannot connect to the master server!");
return;
}
qDebug() << "Content: " << data;
QJsonParseError err;
QJsonDocument jsonDocument = QJsonDocument::fromJson(data.toLatin1(), &err);
QMap<QString, QVariant> map = jsonDocument.toVariant().toMap()["server"].toMap();
qDebug() << sd->addr;
qDebug() << map["hostname"].toString();
qDebug() << map["modname"].toString();
qDebug() << map["players"].toInt();
qDebug() << map["max_players"].toInt();
qDebug() << map["version"].toString();
qDebug() << map["passw"].toBool();
sd->hostName = map["hostname"].toString();
sd->modName = map["modname"].toString();
sd->players = map["players"].toInt();
sd->maxPlayers = map["max_players"].toInt();
if(!sd->addr.contains(":"))
sd->addr.append(":25565");
QStringList addr = sd->addr.split(":");
sd->ping = PingRakNetServer(addr[0].toLatin1(), addr[1].toUShort());
if(sd->ping != PING_UNREACHABLE)
sed = getExtendedData(addr[0].toLatin1(), addr[1].toUShort());
else
qDebug() << "Server is unreachable";
}
QStringList NetController::players()
{
QStringList listPlayers;
for(auto player = sed.players.begin(); player != sed.players.end(); player++)
listPlayers.push_back(player->c_str());
return listPlayers;
}
QStringList NetController::plugins()
{
QStringList listPlugins;
for(auto plugin = sed.plugins.begin(); plugin != sed.plugins.end(); plugin++)
listPlugins.push_back(plugin->c_str());
return listPlugins;
}
void NetController::selectServer(ServerData *pServerData)
{
sd = pServerData;
}
ServerData *NetController::selectedServer()
{
return sd;
}

@ -1,42 +0,0 @@
//
// Created by koncord on 07.01.17.
//
#ifndef NEWLAUNCHER_NETCONTROLLER_HPP
#define NEWLAUNCHER_NETCONTROLLER_HPP
#include "ServerModel.hpp"
#include "netutils/HTTPNetwork.hpp"
#include "netutils/Utils.hpp"
struct ServerModel;
class NetController
{
public:
static NetController *get();
static void Create(std::string addr, unsigned short port);
static void Destroy();
bool updateInfo(QAbstractItemModel *pModel, QModelIndex index= QModelIndex());
void updateInfo();
QStringList players();
QStringList plugins();
void selectServer(ServerData *pServerData);
ServerData *selectedServer();
protected:
NetController(std::string addr, unsigned short port);
~NetController();
private:
NetController(const NetController &controller);
bool downloadInfo(QAbstractItemModel *pModel, QModelIndex index);
void setData(QString addr, QJsonObject server, ServerModel *model);
static NetController *mThis;
ServerData *sd;
HTTPNetwork httpNetwork;
ServerExtendedData sed;
};
#endif //NEWLAUNCHER_NETCONTROLLER_HPP

@ -0,0 +1,56 @@
//
// Created by koncord on 03.05.17.
//
#include "PingHelper.hpp"
#include "ServerModel.hpp"
#include <QDebug>
#include "PingUpdater.hpp"
void PingHelper::Add(int row, const AddrPair &addrPair)
{
pingUpdater->addServer(row, addrPair);
if (!pingThread->isRunning())
pingThread->start();
}
void PingHelper::Reset()
{
//if (pingThread->isRunning())
Stop();
}
void PingHelper::Stop()
{
emit pingUpdater->stop();
}
void PingHelper::SetModel(QAbstractTableModel *model)
{
this->model = model;
}
void PingHelper::update(int row, unsigned ping)
{
model->setData(model->index(row, ServerData::PING), ping);
}
PingHelper &PingHelper::Get()
{
static PingHelper helper;
return helper;
}
PingHelper::PingHelper() : QObject()
{
pingThread = new QThread;
pingUpdater = new PingUpdater;
pingUpdater->moveToThread(pingThread);
connect(pingThread, SIGNAL(started()), pingUpdater, SLOT(process()));
connect(pingUpdater, SIGNAL(start()), pingThread, SLOT(start()));
connect(pingUpdater, SIGNAL(finished()), pingThread, SLOT(quit()));
connect(this, SIGNAL(stop()), pingUpdater, SLOT(stop()));
//connect(pingUpdater, SIGNAL(finished()), pingUpdater, SLOT(deleteLater()));
connect(pingUpdater, SIGNAL(updateModel(int, unsigned)), this, SLOT(update(int, unsigned)));
}

@ -0,0 +1,42 @@
//
// Created by koncord on 03.05.17.
//
#ifndef OPENMW_PINGHELPER_HPP
#define OPENMW_PINGHELPER_HPP
#include <QObject>
#include <QAbstractTableModel>
#include <QThread>
#include "Types.hpp"
class PingUpdater;
class PingHelper : public QObject
{
Q_OBJECT
public:
void Reset();
void Add(int row, const AddrPair &addrPair);
void Stop();
void SetModel(QAbstractTableModel *model);
//void UpdateImmedialy(PingUpdater::AddrPair addrPair);
static PingHelper &Get();
PingHelper(const PingHelper&) = delete;
PingHelper& operator=(const PingHelper&) = delete;
private:
PingHelper();
signals:
void stop();
public slots:
void update(int row, unsigned ping);
private:
QThread *pingThread;
PingUpdater *pingUpdater;
QAbstractTableModel *model;
};
#endif //OPENMW_PINGHELPER_HPP

@ -0,0 +1,50 @@
//
// Created by koncord on 02.05.17.
//
#include "PingUpdater.hpp"
#include "netutils/Utils.hpp"
#include <QDebug>
#include <QModelIndex>
#include <QThread>
void PingUpdater::stop()
{
servers.clear();
run = false;
}
void PingUpdater::addServer(int row, const AddrPair &addr)
{
servers.push_back({row, addr});
run = true;
emit start();
}
void PingUpdater::process()
{
while (run)
{
if (servers.count() == 0)
{
QThread::msleep(1000);
if (servers.count() == 0)
{
qDebug() << "PingUpdater stopped due to inactivity";
run = false;
continue;
}
}
ServerRow server = servers.back();
servers.pop_back();
unsigned ping = PingRakNetServer(server.second.first.toLatin1(), server.second.second);
qDebug() << "Pong from" << server.second.first + "|" + QString::number(server.second.second)
<< ":" << ping << "ms" << "Sizeof servers: " << servers.size();
emit updateModel(server.first, ping);
}
emit finished();
}

@ -0,0 +1,31 @@
//
// Created by koncord on 02.05.17.
//
#ifndef OPENMW_PINGUPDATER_HPP
#define OPENMW_PINGUPDATER_HPP
#include <QObject>
#include <QVector>
#include "Types.hpp"
class PingUpdater : public QObject
{
Q_OBJECT
public:
void addServer(int row, const AddrPair &addrPair);
public slots:
void stop();
void process();
signals:
void start();
void updateModel(int row, unsigned ping);
void finished();
private:
QVector<ServerRow> servers;
bool run;
};
#endif //OPENMW_PINGUPDATER_HPP

@ -0,0 +1,87 @@
//
// Created by koncord on 27.05.17.
//
#include "netutils/QueryClient.hpp"
#include "netutils/Utils.hpp"
#include "QueryHelper.hpp"
#include "PingHelper.hpp"
QueryUpdate *queryUpdate;
QueryHelper::QueryHelper(QAbstractItemModel *model)
{
qRegisterMetaType<QueryData>("QueryData");
queryThread = new QThread;
queryUpdate = new QueryUpdate;
_model = model;
connect(queryThread, SIGNAL(started()), queryUpdate, SLOT(process()));
connect(queryUpdate, SIGNAL(finished()), queryThread, SLOT(quit()));
connect(queryUpdate, &QueryUpdate::finished, [this](){emit finished();});
connect(queryUpdate, SIGNAL(updateModel(const QString&, unsigned short, const QueryData&)),
this, SLOT(update(const QString&, unsigned short, const QueryData&)));
queryUpdate->moveToThread(queryThread);
}
void QueryHelper::refresh()
{
if (!queryThread->isRunning())
{
_model->removeRows(0, _model->rowCount());
PingHelper::Get().Stop();
queryThread->start();
emit started();
}
}
void QueryHelper::terminate()
{
queryThread->terminate();
}
void QueryHelper::update(const QString &addr, unsigned short port, const QueryData& data)
{
ServerModel *model = ((ServerModel*)_model);
model->insertRow(model->rowCount());
int row = model->rowCount() - 1;
QModelIndex mi = model->index(row, ServerData::ADDR);
model->setData(mi, addr + ":" + QString::number(port));
mi = model->index(row, ServerData::PLAYERS);
model->setData(mi, (int)data.players.size());
mi = model->index(row, ServerData::MAX_PLAYERS);
model->setData(mi, data.GetMaxPlayers());
mi = model->index(row, ServerData::HOSTNAME);
model->setData(mi, data.GetName());
mi = model->index(row, ServerData::MODNAME);
model->setData(mi, data.GetGameMode());
mi = model->index(row, ServerData::VERSION);
model->setData(mi, data.GetVersion());
mi = model->index(row, ServerData::PASSW);
model->setData(mi, data.GetPassword() == 1);
mi = model->index(row, ServerData::PING);
model->setData(mi, PING_UNREACHABLE);
PingHelper::Get().Add(row, {addr, port});
}
void QueryUpdate::process()
{
auto data = QueryClient::Get().Query();
if (QueryClient::Get().Status() != ID_MASTER_QUERY)
{
emit finished();
return;
}
for (const auto &server : data)
emit updateModel(server.first.ToString(false), server.first.GetPort(), server.second);
emit finished();
}

@ -0,0 +1,46 @@
//
// Created by koncord on 27.05.17.
//
#ifndef OPENMW_QUERYHELPER_HPP
#define OPENMW_QUERYHELPER_HPP
#include <QObject>
#include <vector>
#include <QAbstractItemModel>
#include <components/openmw-mp/Master/MasterData.hpp>
Q_DECLARE_METATYPE(QueryData)
class QueryHelper : public QObject
{
Q_OBJECT
public:
explicit QueryHelper(QAbstractItemModel *model);
public slots:
void refresh();
void terminate();
private slots:
void update(const QString &addr, unsigned short port, const QueryData& data);
signals:
void finished();
void started();
private:
QThread *queryThread;
QAbstractItemModel *_model;
};
class QueryUpdate : public QObject
{
friend class QueryHelper;
Q_OBJECT
signals:
void finished();
void updateModel(const QString &addr, unsigned short port, const QueryData& data);
public slots:
void process();
};
#endif //OPENMW_QUERYHELPER_HPP

@ -2,38 +2,106 @@
// Created by koncord on 07.01.17.
//
#include <apps/browser/netutils/QueryClient.hpp>
#include "qdebug.h"
#include "NetController.hpp"
#include "ServerInfoDialog.hpp"
#include <algorithm>
#include <utility>
#include <QThread>
ServerInfoDialog::ServerInfoDialog(QWidget *parent): QDialog(parent)
using namespace std;
using namespace RakNet;
ThrWorker::ThrWorker(ServerInfoDialog *dialog, QString addr, unsigned short port): addr(std::move(addr)), port(port), stopped(false)
{
this->dialog = dialog;
}
void ThrWorker::process()
{
stopped = false;
auto newSD = QueryClient::Get().Update(SystemAddress(addr.toUtf8(), port));
if (dialog != nullptr)
dialog->setData(newSD);
stopped = true;
emit finished();
}
ServerInfoDialog::ServerInfoDialog(const QString &addr, QWidget *parent): QDialog(parent)
{
setupUi(this);
connect(btnRefresh, SIGNAL(clicked()), this, SLOT(refresh()));
refreshThread = new QThread;
QStringList list = addr.split(':');
worker = new ThrWorker(this, list[0].toLatin1(), list[1].toUShort());
worker->moveToThread(refreshThread);
connect(refreshThread, SIGNAL(started()), worker, SLOT(process()));
connect(worker, SIGNAL(finished()), refreshThread, SLOT(quit()));
connect(refreshThread, SIGNAL(finished()), this, SLOT(refresh()));
connect(btnRefresh, &QPushButton::clicked, [this]{
if (!refreshThread->isRunning())
refreshThread->start();
});
}
ServerInfoDialog::~ServerInfoDialog()
{
worker->dialog = nullptr;
if (!refreshThread->isRunning())
refreshThread->terminate();
}
bool ServerInfoDialog::isUpdated()
{
return sd.first != UNASSIGNED_SYSTEM_ADDRESS;
}
void ServerInfoDialog::setData(std::pair<RakNet::SystemAddress, QueryData> &newSD)
{
sd = newSD;
}
void ServerInfoDialog::refresh()
{
NetController::get()->updateInfo();
ServerData *sd = NetController::get()->selectedServer();
if (sd)
if (sd.first != UNASSIGNED_SYSTEM_ADDRESS)
{
leAddr->setText(sd->addr);
lblName->setText(sd->hostName);
lblPing->setNum(sd->ping);
leAddr->setText(sd.first.ToString(true, ':'));
lblName->setText(sd.second.GetName());
int ping = PingRakNetServer(sd.first.ToString(false), sd.first.GetPort());
lblPing->setNum(ping);
btnConnect->setDisabled(ping == PING_UNREACHABLE);
listPlayers->clear();
QStringList players = NetController::get()->players();
listPlayers->addItems(players);
for (const auto &player : sd.second.players)
listPlayers->addItem(QString::fromStdString(player));
listPlugins->clear();
listPlugins->addItems(NetController::get()->plugins());
for (const auto &plugin : sd.second.plugins)
listPlugins->addItem(QString::fromStdString(plugin.name));
lblPlayers->setText(QString::number(players.size()) + " / " + QString::number(sd->maxPlayers));
listRules->clear();
const static vector<std::string> defaultRules {"gamemode", "maxPlayers", "name", "passw", "players", "version"};
for (auto &rule : sd.second.rules)
{
if (::find(defaultRules.begin(), defaultRules.end(), rule.first) != defaultRules.end())
continue;
QString ruleStr = QString::fromStdString(rule.first) + " : ";
if (rule.second.type == 's')
ruleStr += QString::fromStdString(rule.second.str);
else
ruleStr += QString::number(rule.second.val);
listRules->addItem(ruleStr);
}
lblPlayers->setText(QString::number(sd.second.players.size()) + " / " + QString::number(sd.second.GetMaxPlayers()));
}
}
int ServerInfoDialog::exec()
{
if (!refreshThread->isRunning())
refreshThread->start();
return QDialog::exec();
}

@ -6,15 +6,45 @@
#define NEWLAUNCHER_SERVERINFODIALOG_HPP
#include "ui_ServerInfo.h"
#include <apps/browser/netutils/Utils.hpp>
#include <RakNetTypes.h>
#include <components/openmw-mp/Master/MasterData.hpp>
class ThrWorker;
class ServerInfoDialog : public QDialog, public Ui::Dialog
{
Q_OBJECT
public:
explicit ServerInfoDialog(QWidget *parent = 0);
virtual ~ServerInfoDialog();
explicit ServerInfoDialog(const QString &addr, QWidget *parent = nullptr);
~ServerInfoDialog() override;
bool isUpdated();
void setData(std::pair<RakNet::SystemAddress, QueryData> &newSD);
public slots:
void refresh();
int exec() Q_DECL_OVERRIDE;
private:
QThread *refreshThread;
ThrWorker* worker;
std::pair<RakNet::SystemAddress, QueryData> sd;
};
class ThrWorker: public QObject
{
friend class ServerInfoDialog;
Q_OBJECT
public:
ThrWorker(ServerInfoDialog *dialog, QString addr, unsigned short port);
public slots:
void process();
signals:
void finished();
private:
QString addr;
unsigned short port;
bool stopped;
ServerInfoDialog *dialog;
};

@ -1,16 +1,11 @@
#include <qmessagebox.h>
#include "ServerModel.hpp"
#include <qdebug.h>
#include <apps/browser/netutils/Utils.hpp>
ServerModel::ServerModel(QObject *parent) : QAbstractTableModel(parent)
{
}
ServerModel::~ServerModel()
{
}
/*QHash<int, QByteArray> ServerModel::roleNames() const
{
return roles;
@ -25,7 +20,7 @@ QVariant ServerModel::data(const QModelIndex &index, int role) const
const ServerData &sd = myData.at(index.row());
if(role == Qt::DisplayRole)
if (role == Qt::DisplayRole)
{
QVariant var;
switch (index.column())
@ -34,28 +29,28 @@ QVariant ServerModel::data(const QModelIndex &index, int role) const
var = sd.addr;
break;
case ServerData::PASSW:
var = sd.needPassw ? "Yes" : "No";
var = (int)(sd.rules.at("passw").val) == 1 ? "Yes" : "No";
break;
case ServerData::VERSION:
var = sd.version;
var = QString(sd.rules.at("version").str.c_str());
break;
case ServerData::PLAYERS:
var = sd.players;
var = (int) sd.rules.at("players").val;
break;
case ServerData::MAX_PLAYERS:
var = sd.maxPlayers;
var = (int) sd.rules.at("maxPlayers").val;
break;
case ServerData::HOSTNAME:
var = sd.hostName;
var = QString(sd.rules.at("name").str.c_str());
break;
case ServerData::PING:
var = sd.ping;
var = sd.ping == PING_UNREACHABLE ? QVariant("Unreachable") : sd.ping;
break;
case ServerData::MODNAME:
if(sd.modName.isEmpty())
if (sd.rules.at("gamemode").str == "")
var = "default";
else
var = sd.modName;
var = QString(sd.rules.at("gamemode").str.c_str());
break;
}
return var;
@ -70,7 +65,7 @@ QVariant ServerModel::headerData(int section, Qt::Orientation orientation, int r
{
if (role == Qt::SizeHintRole)
{
/*if(section == ServerData::HOSTNAME)
/*if (section == ServerData::HOSTNAME)
var = QSize(200, 25);*/
}
else if (role == Qt::DisplayRole)
@ -133,32 +128,32 @@ bool ServerModel::setData(const QModelIndex &index, const QVariant &value, int r
ok = !sd.addr.isEmpty();
break;
case ServerData::PASSW:
sd.needPassw = value.toBool();
sd.SetPassword(value.toBool());
break;
case ServerData::VERSION:
sd.version = value.toString();
sd.SetVersion(value.toString().toUtf8());
ok = !sd.addr.isEmpty();
break;
case ServerData::PLAYERS:
sd.players = value.toInt(&ok);
sd.SetPlayers(value.toInt(&ok));
break;
case ServerData::MAX_PLAYERS:
sd.maxPlayers = value.toInt(&ok);
sd.SetMaxPlayers(value.toInt(&ok));
break;
case ServerData::HOSTNAME:
sd.hostName = value.toString();
sd.SetName(value.toString().toUtf8());
ok = !sd.addr.isEmpty();
break;
case ServerData::PING:
sd.ping = value.toInt(&ok);
break;
case ServerData::MODNAME:
sd.modName = value.toString();
sd.SetGameMode(value.toString().toUtf8());
break;
default:
return false;
}
if(ok)
if (ok)
emit(dataChanged(index, index));
return true;
}
@ -170,10 +165,7 @@ bool ServerModel::insertRows(int position, int count, const QModelIndex &index)
Q_UNUSED(index);
beginInsertRows(QModelIndex(), position, position + count - 1);
for (int row = 0; row < count; ++row) {
ServerData sd {"", -1, -1, -1, "", "", false, 0};
myData.insert(position, sd);
}
myData.insert(position, count, {});
endInsertRows();
return true;
@ -195,6 +187,5 @@ QModelIndex ServerModel::index(int row, int column, const QModelIndex &parent) c
{
QModelIndex index = QAbstractTableModel::index(row, column, parent);
//qDebug() << "Valid index? " << index.isValid() << " " << row << " " << column;
return index;
}

@ -5,16 +5,12 @@
#include <vector>
#include <QString>
#include <QAbstractTableModel>
#include <components/openmw-mp/Master/MasterData.hpp>
struct ServerData
struct ServerData : public QueryData
{
QString addr;
int players, maxPlayers;
int ping;
QString hostName;
QString modName;
bool needPassw;
QString version;
enum IDS
{
ADDR,
@ -33,8 +29,7 @@ class ServerModel: public QAbstractTableModel
{
Q_OBJECT
public:
explicit ServerModel(QObject *parent = 0);
~ServerModel();
explicit ServerModel(QObject *parent = nullptr);
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_FINAL;
int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_FINAL;
int columnCount(const QModelIndex &parent) const Q_DECL_FINAL;

@ -0,0 +1,15 @@
//
// Created by koncord on 07.05.17.
//
#ifndef OPENMW_TYPES_HPP
#define OPENMW_TYPES_HPP
#include <QPair>
#include <QString>
typedef QPair <QString, unsigned short> AddrPair;
typedef QPair <int, AddrPair> ServerRow;
#endif //OPENMW_TYPES_HPP

@ -1,8 +1,8 @@
#include <QApplication>
#include <components/settings/settings.hpp>
#include <components/files/configurationmanager.hpp>
#include <apps/browser/netutils/QueryClient.hpp>
#include "MainWindow.hpp"
#include "NetController.hpp"
std::string loadSettings (Settings::Manager & settings)
{
@ -36,22 +36,18 @@ int main(int argc, char *argv[])
std::string addr = mgr.getString("address", "Master");
int port = mgr.getInt("port", "Master");
// Is this an attempt to connect to the official master server at the old port? If so,
// redirect it to the correct port for the currently used fork of RakNet
if (Misc::StringUtils::ciEqual(addr, "master.tes3mp.com") && port == 25560)
port = 25561;
// initialize resources, if needed
// Q_INIT_RESOURCE(resfile);
NetController::Create(addr, port);
atexit(NetController::Destroy);
QueryClient::Get().SetServer(addr, port);
QApplication app(argc, argv);
MainWindow d;
if (d.refresh())
{
d.show();
return app.exec();
}
else
{
app.exit();
return 0;
}
}
d.show();
return app.exec();
}

@ -0,0 +1,212 @@
//
// Created by koncord on 24.04.17.
//
#include "QueryClient.hpp"
#include <RakSleep.h>
#include <components/openmw-mp/NetworkMessages.hpp>
#include <iostream>
#include <components/openmw-mp/Version.hpp>
#include <qdebug.h>
using namespace RakNet;
using namespace std;
using namespace mwmp;
QueryClient::QueryClient()
{
peer = RakPeerInterface::GetInstance();
pmq = new PacketMasterQuery(peer);
pmu = new PacketMasterUpdate(peer);
RakNet::SocketDescriptor sd;
peer->Startup(8, &sd, 1);
status = -1;
}
QueryClient::~QueryClient()
{
delete pmq;
delete pmu;
RakPeerInterface::DestroyInstance(peer);
}
void QueryClient::SetServer(const string &addr, unsigned short port)
{
masterAddr = SystemAddress(addr.c_str(), port);
}
QueryClient &QueryClient::Get()
{
static QueryClient myInstance;
return myInstance;
}
map<SystemAddress, QueryData> QueryClient::Query()
{
map<SystemAddress, QueryData> query;
BitStream bs;
bs.Write((unsigned char) (ID_MASTER_QUERY));
qDebug() << "Locking mutex in QueryClient::Query()";
mxServers.lock();
status = -1;
int attempts = 3;
do
{
if (Connect() == IS_NOT_CONNECTED)
{
qDebug() << "Unlocking mutex in QueryClient::Query()";
mxServers.unlock();
return query;
}
int code = peer->Send(&bs, HIGH_PRIORITY, RELIABLE_ORDERED, CHANNEL_MASTER, masterAddr, false);
if (code == 0)
{
qDebug() << "Unlocking mutex in QueryClient::Query()";
mxServers.unlock();
return query;
}
pmq->SetServers(&query);
status = GetAnswer(ID_MASTER_QUERY);
RakSleep(100);
}
while(status != ID_MASTER_QUERY && attempts-- > 0);
if(status != ID_MASTER_QUERY)
qDebug() << "Getting query was failed";
qDebug() << "Unlocking mutex in QueryClient::Query()";
peer->CloseConnection(masterAddr, true);
mxServers.unlock();
qDebug() <<"Answer" << (status == ID_MASTER_QUERY ? "ok." : "wrong.");
return query;
}
pair<SystemAddress, QueryData> QueryClient::Update(const RakNet::SystemAddress &addr)
{
qDebug() << "Locking mutex in QueryClient::Update(RakNet::SystemAddress addr)";
pair<SystemAddress, QueryData> server;
BitStream bs;
bs.Write((unsigned char) (ID_MASTER_UPDATE));
bs.Write(addr);
mxServers.lock();
status = -1;
int attempts = 3;
pmu->SetServer(&server);
do
{
if (Connect() == IS_NOT_CONNECTED)
{
qDebug() << IS_NOT_CONNECTED;
qDebug() << "Unlocking mutex in QueryClient::Update(RakNet::SystemAddress addr)";
mxServers.unlock();
return server;
}
peer->Send(&bs, HIGH_PRIORITY, RELIABLE_ORDERED, CHANNEL_MASTER, masterAddr, false);
status = GetAnswer(ID_MASTER_UPDATE);
RakSleep(100);
}
while(status != ID_MASTER_UPDATE && attempts-- > 0);
if(status != ID_MASTER_UPDATE)
qDebug() << "Getting update was failed";
peer->CloseConnection(masterAddr, true);
qDebug() << "Unlocking mutex in QueryClient::Update(RakNet::SystemAddress addr)";
mxServers.unlock();
return server;
}
MASTER_PACKETS QueryClient::GetAnswer(MASTER_PACKETS waitingPacket)
{
RakNet::Packet *packet;
bool update = true;
unsigned char pid = 0;
int id = -1;
while (update)
{
for (packet = peer->Receive(); packet; peer->DeallocatePacket(packet), packet = peer->Receive())
{
BitStream data(packet->data, packet->length, false);
pmq->SetReadStream(&data);
pmu->SetReadStream(&data);
data.Read(pid);
switch(pid)
{
case ID_CONNECTION_LOST:
qDebug() << "ID_CONNECTION_LOST";
case ID_DISCONNECTION_NOTIFICATION:
qDebug() << "Disconnected";
update = false;
break;
case ID_MASTER_QUERY:
qDebug() << "ID_MASTER_QUERY";
if (waitingPacket == ID_MASTER_QUERY)
pmq->Read();
else
qDebug() << "Got wrong packet";
update = false;
id = pid;
break;
case ID_MASTER_UPDATE:
qDebug() << "ID_MASTER_UPDATE";
if (waitingPacket == ID_MASTER_UPDATE)
pmu->Read();
else
qDebug() << "Got wrong packet";
update = false;
id = pid;
break;
case ID_MASTER_ANNOUNCE:
qDebug() << "ID_MASTER_ANNOUNCE";
update = false;
id = pid;
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
qDebug() << "ID_CONNECTION_REQUEST_ACCEPTED";
break;
default:
break;
}
}
RakSleep(500);
}
return (MASTER_PACKETS)(id);
}
ConnectionState QueryClient::Connect()
{
ConnectionAttemptResult car = peer->Connect(masterAddr.ToString(false), masterAddr.GetPort(), TES3MP_MASTERSERVER_PASSW,
strlen(TES3MP_MASTERSERVER_PASSW), nullptr, 0, 5, 500);
while (true)
{
ConnectionState state = peer->GetConnectionState(masterAddr);
switch (state)
{
case IS_CONNECTED:
qDebug() << "Connected";
return IS_CONNECTED;
case IS_NOT_CONNECTED:
case IS_DISCONNECTED:
case IS_SILENTLY_DISCONNECTING:
case IS_DISCONNECTING:
{
qDebug() << "Cannot connect to the master server. Code:"<< state;
return IS_NOT_CONNECTED;
}
case IS_PENDING:
case IS_CONNECTING:
qDebug() << "Pending";
break;
}
RakSleep(500);
}
}
int QueryClient::Status()
{
return status;
}

@ -0,0 +1,46 @@
//
// Created by koncord on 24.04.17.
//
#ifndef OPENMW_QUERYCLIENT_HPP
#define OPENMW_QUERYCLIENT_HPP
#include <string>
#include <RakPeerInterface.h>
#include <components/openmw-mp/Master/PacketMasterQuery.hpp>
#include <components/openmw-mp/Master/PacketMasterUpdate.hpp>
#include <apps/browser/ServerModel.hpp>
#include <mutex>
class QueryClient
{
public:
QueryClient(QueryClient const &) = delete;
QueryClient(QueryClient &&) = delete;
QueryClient &operator=(QueryClient const &) = delete;
QueryClient &operator=(QueryClient &&) = delete;
static QueryClient &Get();
void SetServer(const std::string &addr, unsigned short port);
std::map<RakNet::SystemAddress, QueryData> Query();
std::pair<RakNet::SystemAddress, QueryData> Update(const RakNet::SystemAddress &addr);
int Status();
private:
RakNet::ConnectionState Connect();
MASTER_PACKETS GetAnswer(MASTER_PACKETS packet);
protected:
QueryClient();
~QueryClient();
private:
int status;
RakNet::RakPeerInterface *peer;
RakNet::SystemAddress masterAddr;
mwmp::PacketMasterQuery *pmq;
mwmp::PacketMasterUpdate *pmu;
std::pair<RakNet::SystemAddress, ServerData> server;
std::mutex mxServers;
};
#endif //OPENMW_QUERYCLIENT_HPP

@ -7,7 +7,6 @@
#include <RakSleep.h>
#include <GetTime.h>
#include <iostream>
#include <sstream>
#include <components/openmw-mp/Version.hpp>
@ -19,37 +18,48 @@ unsigned int PingRakNetServer(const char *addr, unsigned short port)
{
RakNet::Packet *packet;
bool done = false;
int attempts = 0;
RakNet::TimeMS time = PING_UNREACHABLE;
RakNet::SocketDescriptor socketDescriptor {0, ""};
RakNet::RakPeerInterface *peer = RakNet::RakPeerInterface::GetInstance();
peer->Startup(1,&socketDescriptor, 1);
peer->Ping(addr, port, false);
RakNet::SocketDescriptor socketDescriptor{0, ""};
RakNet::RakPeerInterface *peer = RakNet::RakPeerInterface::GetInstance();
peer->Startup(1, &socketDescriptor, 1);
if (!peer->Ping(addr, port, false))
return time;
RakNet::TimeMS start = RakNet::GetTimeMS();
while (!done)
{
for (packet=peer->Receive(); packet; peer->DeallocatePacket(packet), packet=peer->Receive())
RakNet::TimeMS now = RakNet::GetTimeMS();
if (now - start >= PING_UNREACHABLE)
break;
packet = peer->Receive();
if (!packet)
continue;
switch (packet->data[0])
{
if(packet->data[0] == ID_UNCONNECTED_PONG)
case ID_DISCONNECTION_NOTIFICATION:
case ID_CONNECTION_LOST:
done = true;
break;
case ID_CONNECTED_PING:
case ID_UNCONNECTED_PONG:
{
RakNet::BitStream bsIn(&packet->data[1], packet->length, false);
bsIn.Read(time);
time = RakNet::GetTimeMS() - time - 5;
done = true;
break;
RakNet::BitStream bsIn(&packet->data[1], packet->length, false);
bsIn.Read(time);
time = now - time;
done = true;
break;
}
default:
break;
}
if (attempts >= 60) // wait 300 msec
done = true;
attempts++;
RakSleep(5);
peer->DeallocatePacket(packet);
}
peer->Shutdown(0);
RakNet::RakPeerInterface::DestroyInstance(peer);
return time;
return time > PING_UNREACHABLE ? PING_UNREACHABLE : time;
}
ServerExtendedData getExtendedData(const char *addr, unsigned short port)
@ -59,12 +69,13 @@ ServerExtendedData getExtendedData(const char *addr, unsigned short port)
RakNet::RakPeerInterface *peer = RakNet::RakPeerInterface::GetInstance();
peer->Startup(1, &socketDescriptor, 1);
stringstream sstr(TES3MP_VERSION);
stringstream sstr;
sstr << TES3MP_VERSION;
sstr << TES3MP_PROTO_VERSION;
std::string msg = "";
std::string msg;
if (peer->Connect(addr, port, sstr.str().c_str(), (int)(sstr.str().size()), 0, 0, 3, 500, 0) != RakNet::CONNECTION_ATTEMPT_STARTED)
if (peer->Connect(addr, port, sstr.str().c_str(), (int)(sstr.str().size()), nullptr, 0, 3, 500, 0) != RakNet::CONNECTION_ATTEMPT_STARTED)
msg = "Connection attempt failed.\n";
@ -110,7 +121,7 @@ ServerExtendedData getExtendedData(const char *addr, unsigned short port)
}
puts(msg.c_str());
if(queue == -1) // connection is failed
if (queue == -1) // connection is failed
return data;
{
@ -125,24 +136,24 @@ ServerExtendedData getExtendedData(const char *addr, unsigned short port)
{
for (packet = peer->Receive(); packet; peer->DeallocatePacket(packet), packet = peer->Receive())
{
if(packet->data[0] == (ID_USER_PACKET_ENUM+1))
if (packet->data[0] == (ID_USER_PACKET_ENUM + 1))
{
RakNet::BitStream bs(packet->data, packet->length, false);
bs.IgnoreBytes(1);
size_t length = 0;
bs.Read(length);
for(int i = 0; i < length; i++)
for (size_t i = 0; i < length; i++)
{
RakNet::RakString str;
bs.Read(str);
data.players.push_back(str.C_String());
data.players.emplace_back(str.C_String());
}
bs.Read(length);
for(int i = 0; i < length; i++)
for (size_t i = 0; i < length; i++)
{
RakNet::RakString str;
bs.Read(str);
data.plugins.push_back(str.C_String());
data.plugins.emplace_back(str.C_String());
}
done = true;
}

@ -4,7 +4,7 @@ set(BSATOOL
source_group(apps\\bsatool FILES ${BSATOOL})
# Main executable
add_executable(bsatool
openmw_add_executable(bsatool
${BSATOOL}
)

@ -1,7 +1,6 @@
#include <iostream>
#include <iomanip>
#include <vector>
#include <exception>
#include <boost/program_options.hpp>
#include <boost/filesystem.hpp>

@ -8,7 +8,7 @@ set(ESMTOOL
source_group(apps\\esmtool FILES ${ESMTOOL})
# Main executable
add_executable(esmtool
openmw_add_executable(esmtool
${ESMTOOL}
)

@ -11,7 +11,6 @@
#include <components/esm/loadrace.hpp>
#include <components/esm/loadspel.hpp>
#include <components/esm/loadweap.hpp>
#include <components/esm/aipackage.hpp>
#include <boost/format.hpp>

@ -694,7 +694,7 @@ void Record<ESM::Dialogue>::print()
// loads, rather than loading and then dumping. :-( Anyone mind if
// I change this?
ESM::Dialogue::InfoContainer::iterator iit;
for (iit = mData.mInfo.begin(); iit != mData.mInfo.end(); iit++)
for (iit = mData.mInfo.begin(); iit != mData.mInfo.end(); ++iit)
std::cout << "INFO!" << iit->mId << std::endl;
}
@ -1040,45 +1040,47 @@ void Record<ESM::NPC>::print()
if (mData.mNpdtType == ESM::NPC::NPC_WITH_AUTOCALCULATED_STATS)
{
std::cout << " Level: " << mData.mNpdt12.mLevel << std::endl;
std::cout << " Reputation: " << (int)mData.mNpdt12.mReputation << std::endl;
std::cout << " Disposition: " << (int)mData.mNpdt12.mDisposition << std::endl;
std::cout << " Rank: " << (int)mData.mNpdt12.mRank << std::endl;
std::cout << " Unknown1: "
<< (unsigned int)((unsigned char)mData.mNpdt12.mUnknown1) << std::endl;
std::cout << " Unknown2: "
<< (unsigned int)((unsigned char)mData.mNpdt12.mUnknown2) << std::endl;
std::cout << " Unknown3: "
<< (unsigned int)((unsigned char)mData.mNpdt12.mUnknown3) << std::endl;
std::cout << " Gold: " << mData.mNpdt12.mGold << std::endl;
std::cout << " Level: " << mData.mNpdt.mLevel << std::endl;
std::cout << " Reputation: " << (int)mData.mNpdt.mReputation << std::endl;
std::cout << " Disposition: " << (int)mData.mNpdt.mDisposition << std::endl;
std::cout << " Rank: " << (int)mData.mNpdt.mRank << std::endl;
//Why do we want to print these fields? They are padding in the struct and contain
// nothing of real value. Now we don't deal with NPDTstruct12 in runtime either...
//std::cout << " Unknown1: "
// << (unsigned int)((unsigned char)mData.mNpdt12.mUnknown1) << std::endl;
//std::cout << " Unknown2: "
// << (unsigned int)((unsigned char)mData.mNpdt12.mUnknown2) << std::endl;
//std::cout << " Unknown3: "
// << (unsigned int)((unsigned char)mData.mNpdt12.mUnknown3) << std::endl;
std::cout << " Gold: " << mData.mNpdt.mGold << std::endl;
}
else {
std::cout << " Level: " << mData.mNpdt52.mLevel << std::endl;
std::cout << " Reputation: " << (int)mData.mNpdt52.mReputation << std::endl;
std::cout << " Disposition: " << (int)mData.mNpdt52.mDisposition << std::endl;
std::cout << " Rank: " << (int)mData.mNpdt52.mRank << std::endl;
std::cout << " FactionID: " << (int)mData.mNpdt52.mFactionID << std::endl;
std::cout << " Level: " << mData.mNpdt.mLevel << std::endl;
std::cout << " Reputation: " << (int)mData.mNpdt.mReputation << std::endl;
std::cout << " Disposition: " << (int)mData.mNpdt.mDisposition << std::endl;
std::cout << " Rank: " << (int)mData.mNpdt.mRank << std::endl;
std::cout << " FactionID: " << (int)mData.mNpdt.mFactionID << std::endl;
std::cout << " Attributes:" << std::endl;
std::cout << " Strength: " << (int)mData.mNpdt52.mStrength << std::endl;
std::cout << " Intelligence: " << (int)mData.mNpdt52.mIntelligence << std::endl;
std::cout << " Willpower: " << (int)mData.mNpdt52.mWillpower << std::endl;
std::cout << " Agility: " << (int)mData.mNpdt52.mAgility << std::endl;
std::cout << " Speed: " << (int)mData.mNpdt52.mSpeed << std::endl;
std::cout << " Endurance: " << (int)mData.mNpdt52.mEndurance << std::endl;
std::cout << " Personality: " << (int)mData.mNpdt52.mPersonality << std::endl;
std::cout << " Luck: " << (int)mData.mNpdt52.mLuck << std::endl;
std::cout << " Strength: " << (int)mData.mNpdt.mStrength << std::endl;
std::cout << " Intelligence: " << (int)mData.mNpdt.mIntelligence << std::endl;
std::cout << " Willpower: " << (int)mData.mNpdt.mWillpower << std::endl;
std::cout << " Agility: " << (int)mData.mNpdt.mAgility << std::endl;
std::cout << " Speed: " << (int)mData.mNpdt.mSpeed << std::endl;
std::cout << " Endurance: " << (int)mData.mNpdt.mEndurance << std::endl;
std::cout << " Personality: " << (int)mData.mNpdt.mPersonality << std::endl;
std::cout << " Luck: " << (int)mData.mNpdt.mLuck << std::endl;
std::cout << " Skills:" << std::endl;
for (int i = 0; i != ESM::Skill::Length; i++)
std::cout << " " << skillLabel(i) << ": "
<< (int)(mData.mNpdt52.mSkills[i]) << std::endl;
<< (int)(mData.mNpdt.mSkills[i]) << std::endl;
std::cout << " Health: " << mData.mNpdt52.mHealth << std::endl;
std::cout << " Magicka: " << mData.mNpdt52.mMana << std::endl;
std::cout << " Fatigue: " << mData.mNpdt52.mFatigue << std::endl;
std::cout << " Unknown: " << (int)mData.mNpdt52.mUnknown << std::endl;
std::cout << " Gold: " << mData.mNpdt52.mGold << std::endl;
std::cout << " Health: " << mData.mNpdt.mHealth << std::endl;
std::cout << " Magicka: " << mData.mNpdt.mMana << std::endl;
std::cout << " Fatigue: " << mData.mNpdt.mFatigue << std::endl;
std::cout << " Unknown: " << (int)mData.mNpdt.mUnknown << std::endl;
std::cout << " Gold: " << mData.mNpdt.mGold << std::endl;
}
std::vector<ESM::ContItem>::iterator cit;
@ -1123,7 +1125,7 @@ void Record<ESM::Pathgrid>::print()
int i = 0;
ESM::Pathgrid::PointList::iterator pit;
for (pit = mData.mPoints.begin(); pit != mData.mPoints.end(); pit++)
for (pit = mData.mPoints.begin(); pit != mData.mPoints.end(); ++pit)
{
std::cout << " Point[" << i << "]:" << std::endl;
std::cout << " Coordinates: (" << pit->mX << ","
@ -1135,7 +1137,7 @@ void Record<ESM::Pathgrid>::print()
}
i = 0;
ESM::Pathgrid::EdgeList::iterator eit;
for (eit = mData.mEdges.begin(); eit != mData.mEdges.end(); eit++)
for (eit = mData.mEdges.begin(); eit != mData.mEdges.end(); ++eit)
{
std::cout << " Edge[" << i << "]: " << eit->mV0 << " -> " << eit->mV1 << std::endl;
if (eit->mV0 >= mData.mData.mS2 || eit->mV1 >= mData.mData.mS2)

@ -16,6 +16,8 @@ set(ESSIMPORTER_FILES
importjour.cpp
importscri.cpp
importscpt.cpp
importproj.cpp
importsplm.cpp
importercontext.cpp
converter.cpp
convertacdt.cpp
@ -28,7 +30,7 @@ set(ESSIMPORTER_FILES
convertplayer.cpp
)
add_executable(openmw-essimporter
openmw_add_executable(openmw-essimporter
${ESSIMPORTER_FILES}
)

@ -1,6 +1,7 @@
#include "converter.hpp"
#include <stdexcept>
#include <algorithm>
#include <osgDB/WriteFile>
@ -53,6 +54,36 @@ namespace
return true;
return false;
}
void splitIndexedRefId(const std::string& indexedRefId, int& refIndex, std::string& refId)
{
std::stringstream stream;
stream << std::hex << indexedRefId.substr(indexedRefId.size()-8,8);
stream >> refIndex;
refId = indexedRefId.substr(0,indexedRefId.size()-8);
}
int convertActorId(const std::string& indexedRefId, ESSImport::Context& context)
{
if (isIndexedRefId(indexedRefId))
{
int refIndex;
std::string refId;
splitIndexedRefId(indexedRefId, refIndex, refId);
auto it = context.mActorIdMap.find(std::make_pair(refIndex, refId));
if (it == context.mActorIdMap.end())
return -1;
return it->second;
}
else if (indexedRefId == "PlayerSaveGame")
{
return context.mPlayer.mObject.mCreatureStats.mActorId;
}
return -1;
}
}
namespace ESSImport
@ -137,7 +168,7 @@ namespace ESSImport
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("png");
if (!readerwriter)
{
std::cerr << "can't write global map image, no png readerwriter found" << std::endl;
std::cerr << "Error: can't write global map image, no png readerwriter found" << std::endl;
return;
}
@ -146,7 +177,7 @@ namespace ESSImport
osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*image2, ostream);
if (!result.success())
{
std::cerr << "can't write global map image: " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: can't write global map image: " << result.message() << " code " << result.status() << std::endl;
return;
}
@ -322,12 +353,9 @@ namespace ESSImport
}
else
{
std::stringstream stream;
stream << std::hex << cellref.mIndexedRefId.substr(cellref.mIndexedRefId.size()-8,8);
int refIndex;
stream >> refIndex;
splitIndexedRefId(cellref.mIndexedRefId, refIndex, out.mRefID);
out.mRefID = cellref.mIndexedRefId.substr(0,cellref.mIndexedRefId.size()-8);
std::string idLower = Misc::StringUtils::lowerCase(out.mRefID);
std::map<std::pair<int, std::string>, NPCC>::const_iterator npccIt = mContext->mNpcChanges.find(
@ -347,6 +375,10 @@ namespace ESSImport
convertNpcData(cellref, objstate.mNpcStats);
convertNPCC(npccIt->second, objstate);
convertCellRef(cellref, objstate);
objstate.mCreatureStats.mActorId = mContext->generateActorId();
mContext->mActorIdMap.insert(std::make_pair(std::make_pair(refIndex, out.mRefID), objstate.mCreatureStats.mActorId));
esm.writeHNT ("OBJE", ESM::REC_NPC_);
objstate.save(esm);
continue;
@ -383,6 +415,10 @@ namespace ESSImport
convertACSC(cellref.mACSC, objstate.mCreatureStats);
convertCREC(crecIt->second, objstate);
convertCellRef(cellref, objstate);
objstate.mCreatureStats.mActorId = mContext->generateActorId();
mContext->mActorIdMap.insert(std::make_pair(std::make_pair(refIndex, out.mRefID), objstate.mCreatureStats.mActorId));
esm.writeHNT ("OBJE", ESM::REC_CREA);
objstate.save(esm);
continue;
@ -413,4 +449,73 @@ namespace ESSImport
}
}
void ConvertPROJ::read(ESM::ESMReader& esm)
{
mProj.load(esm);
}
void ConvertPROJ::write(ESM::ESMWriter& esm)
{
for (const PROJ::PNAM& pnam : mProj.mProjectiles)
{
if (!pnam.isMagic())
{
ESM::ProjectileState out;
convertBaseState(out, pnam);
out.mBowId = pnam.mBowId.toString();
out.mVelocity = pnam.mVelocity;
out.mAttackStrength = pnam.mAttackStrength;
esm.startRecord(ESM::REC_PROJ);
out.save(esm);
esm.endRecord(ESM::REC_PROJ);
}
else
{
ESM::MagicBoltState out;
convertBaseState(out, pnam);
auto it = std::find_if(mContext->mActiveSpells.begin(), mContext->mActiveSpells.end(),
[&pnam](const SPLM::ActiveSpell& spell) -> bool { return spell.mIndex == pnam.mSplmIndex; });
if (it == mContext->mActiveSpells.end())
{
std::cerr << "Warning: Skipped conversion for magic projectile \"" << pnam.mArrowId.toString() << "\" (invalid spell link)" << std::endl;
continue;
}
out.mSpellId = it->mSPDT.mId.toString();
out.mSpeed = pnam.mSpeed * 0.001f; // not sure where this factor comes from
esm.startRecord(ESM::REC_MPRJ);
out.save(esm);
esm.endRecord(ESM::REC_MPRJ);
}
}
}
void ConvertPROJ::convertBaseState(ESM::BaseProjectileState& base, const PROJ::PNAM& pnam)
{
base.mId = pnam.mArrowId.toString();
base.mPosition = pnam.mPosition;
osg::Quat orient;
orient.makeRotate(osg::Vec3f(0,1,0), pnam.mVelocity);
base.mOrientation = orient;
base.mActorId = convertActorId(pnam.mActorId.toString(), *mContext);
}
void ConvertSPLM::read(ESM::ESMReader& esm)
{
mSPLM.load(esm);
mContext->mActiveSpells = mSPLM.mActiveSpells;
}
void ConvertSPLM::write(ESM::ESMWriter& esm)
{
std::cerr << "Warning: Skipped active spell conversion (not implemented)" << std::endl;
}
}

@ -22,6 +22,7 @@
#include <components/esm/globalscript.hpp>
#include <components/esm/queststate.hpp>
#include <components/esm/stolenitems.hpp>
#include <components/esm/projectilestate.hpp>
#include "importcrec.hpp"
#include "importcntc.hpp"
@ -35,6 +36,8 @@
#include "importques.hpp"
#include "importjour.hpp"
#include "importscpt.hpp"
#include "importproj.h"
#include "importsplm.h"
#include "convertacdt.hpp"
#include "convertnpcc.hpp"
@ -119,7 +122,7 @@ public:
}
else
{
mContext->mPlayer.mObject.mCreatureStats.mLevel = npc.mNpdt52.mLevel;
mContext->mPlayer.mObject.mCreatureStats.mLevel = npc.mNpdt.mLevel;
mContext->mPlayerBase = npc;
ESM::SpellState::SpellParams empty;
// FIXME: player start spells and birthsign spells aren't listed here,
@ -593,6 +596,27 @@ private:
std::vector<ESM::GlobalScript> mScripts;
};
/// Projectile converter
class ConvertPROJ : public Converter
{
public:
virtual int getStage() override { return 2; }
virtual void read(ESM::ESMReader& esm) override;
virtual void write(ESM::ESMWriter& esm) override;
private:
void convertBaseState(ESM::BaseProjectileState& base, const PROJ::PNAM& pnam);
PROJ mProj;
};
class ConvertSPLM : public Converter
{
public:
virtual void read(ESM::ESMReader& esm) override;
virtual void write(ESM::ESMWriter& esm) override;
private:
SPLM mSPLM;
};
}
#endif

@ -2,7 +2,7 @@
#include <iomanip>
#include <boost/shared_ptr.hpp>
#include <boost/filesystem/fstream.hpp>
#include <osgDB/ReadFile>
#include <osg/ImageUtils>
@ -38,7 +38,7 @@ namespace
{
if (fileHeader.mSCRS.size() != 128*128*4)
{
std::cerr << "unexpected screenshot size " << std::endl;
std::cerr << "Error: unexpected screenshot size " << std::endl;
return;
}
@ -66,14 +66,14 @@ namespace
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("jpg");
if (!readerwriter)
{
std::cerr << "can't write screenshot: no jpg readerwriter found" << std::endl;
std::cerr << "Error: can't write screenshot: no jpg readerwriter found" << std::endl;
return;
}
osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*image, ostream);
if (!result.success())
{
std::cerr << "can't write screenshot: " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: can't write screenshot: " << result.message() << " code " << result.status() << std::endl;
return;
}
@ -271,48 +271,50 @@ namespace ESSImport
const unsigned int recSTLN = ESM::FourCC<'S','T','L','N'>::value;
const unsigned int recGAME = ESM::FourCC<'G','A','M','E'>::value;
const unsigned int recJOUR = ESM::FourCC<'J','O','U','R'>::value;
std::map<unsigned int, boost::shared_ptr<Converter> > converters;
converters[ESM::REC_GLOB] = boost::shared_ptr<Converter>(new ConvertGlobal());
converters[ESM::REC_BOOK] = boost::shared_ptr<Converter>(new ConvertBook());
converters[ESM::REC_NPC_] = boost::shared_ptr<Converter>(new ConvertNPC());
converters[ESM::REC_CREA] = boost::shared_ptr<Converter>(new ConvertCREA());
converters[ESM::REC_NPCC] = boost::shared_ptr<Converter>(new ConvertNPCC());
converters[ESM::REC_CREC] = boost::shared_ptr<Converter>(new ConvertCREC());
converters[recREFR ] = boost::shared_ptr<Converter>(new ConvertREFR());
converters[recPCDT ] = boost::shared_ptr<Converter>(new ConvertPCDT());
converters[recFMAP ] = boost::shared_ptr<Converter>(new ConvertFMAP());
converters[recKLST ] = boost::shared_ptr<Converter>(new ConvertKLST());
converters[recSTLN ] = boost::shared_ptr<Converter>(new ConvertSTLN());
converters[recGAME ] = boost::shared_ptr<Converter>(new ConvertGAME());
converters[ESM::REC_CELL] = boost::shared_ptr<Converter>(new ConvertCell());
converters[ESM::REC_ALCH] = boost::shared_ptr<Converter>(new DefaultConverter<ESM::Potion>());
converters[ESM::REC_CLAS] = boost::shared_ptr<Converter>(new ConvertClass());
converters[ESM::REC_SPEL] = boost::shared_ptr<Converter>(new DefaultConverter<ESM::Spell>());
converters[ESM::REC_ARMO] = boost::shared_ptr<Converter>(new DefaultConverter<ESM::Armor>());
converters[ESM::REC_WEAP] = boost::shared_ptr<Converter>(new DefaultConverter<ESM::Weapon>());
converters[ESM::REC_CLOT] = boost::shared_ptr<Converter>(new DefaultConverter<ESM::Clothing>());
converters[ESM::REC_ENCH] = boost::shared_ptr<Converter>(new DefaultConverter<ESM::Enchantment>());
converters[ESM::REC_WEAP] = boost::shared_ptr<Converter>(new DefaultConverter<ESM::Weapon>());
converters[ESM::REC_LEVC] = boost::shared_ptr<Converter>(new DefaultConverter<ESM::CreatureLevList>());
converters[ESM::REC_LEVI] = boost::shared_ptr<Converter>(new DefaultConverter<ESM::ItemLevList>());
converters[ESM::REC_CNTC] = boost::shared_ptr<Converter>(new ConvertCNTC());
converters[ESM::REC_FACT] = boost::shared_ptr<Converter>(new ConvertFACT());
converters[ESM::REC_INFO] = boost::shared_ptr<Converter>(new ConvertINFO());
converters[ESM::REC_DIAL] = boost::shared_ptr<Converter>(new ConvertDIAL());
converters[ESM::REC_QUES] = boost::shared_ptr<Converter>(new ConvertQUES());
converters[recJOUR ] = boost::shared_ptr<Converter>(new ConvertJOUR());
converters[ESM::REC_SCPT] = boost::shared_ptr<Converter>(new ConvertSCPT());
const unsigned int recSPLM = ESM::FourCC<'S','P','L','M'>::value;
std::map<unsigned int, std::shared_ptr<Converter> > converters;
converters[ESM::REC_GLOB] = std::shared_ptr<Converter>(new ConvertGlobal());
converters[ESM::REC_BOOK] = std::shared_ptr<Converter>(new ConvertBook());
converters[ESM::REC_NPC_] = std::shared_ptr<Converter>(new ConvertNPC());
converters[ESM::REC_CREA] = std::shared_ptr<Converter>(new ConvertCREA());
converters[ESM::REC_NPCC] = std::shared_ptr<Converter>(new ConvertNPCC());
converters[ESM::REC_CREC] = std::shared_ptr<Converter>(new ConvertCREC());
converters[recREFR ] = std::shared_ptr<Converter>(new ConvertREFR());
converters[recPCDT ] = std::shared_ptr<Converter>(new ConvertPCDT());
converters[recFMAP ] = std::shared_ptr<Converter>(new ConvertFMAP());
converters[recKLST ] = std::shared_ptr<Converter>(new ConvertKLST());
converters[recSTLN ] = std::shared_ptr<Converter>(new ConvertSTLN());
converters[recGAME ] = std::shared_ptr<Converter>(new ConvertGAME());
converters[ESM::REC_CELL] = std::shared_ptr<Converter>(new ConvertCell());
converters[ESM::REC_ALCH] = std::shared_ptr<Converter>(new DefaultConverter<ESM::Potion>());
converters[ESM::REC_CLAS] = std::shared_ptr<Converter>(new ConvertClass());
converters[ESM::REC_SPEL] = std::shared_ptr<Converter>(new DefaultConverter<ESM::Spell>());
converters[ESM::REC_ARMO] = std::shared_ptr<Converter>(new DefaultConverter<ESM::Armor>());
converters[ESM::REC_WEAP] = std::shared_ptr<Converter>(new DefaultConverter<ESM::Weapon>());
converters[ESM::REC_CLOT] = std::shared_ptr<Converter>(new DefaultConverter<ESM::Clothing>());
converters[ESM::REC_ENCH] = std::shared_ptr<Converter>(new DefaultConverter<ESM::Enchantment>());
converters[ESM::REC_WEAP] = std::shared_ptr<Converter>(new DefaultConverter<ESM::Weapon>());
converters[ESM::REC_LEVC] = std::shared_ptr<Converter>(new DefaultConverter<ESM::CreatureLevList>());
converters[ESM::REC_LEVI] = std::shared_ptr<Converter>(new DefaultConverter<ESM::ItemLevList>());
converters[ESM::REC_CNTC] = std::shared_ptr<Converter>(new ConvertCNTC());
converters[ESM::REC_FACT] = std::shared_ptr<Converter>(new ConvertFACT());
converters[ESM::REC_INFO] = std::shared_ptr<Converter>(new ConvertINFO());
converters[ESM::REC_DIAL] = std::shared_ptr<Converter>(new ConvertDIAL());
converters[ESM::REC_QUES] = std::shared_ptr<Converter>(new ConvertQUES());
converters[recJOUR ] = std::shared_ptr<Converter>(new ConvertJOUR());
converters[ESM::REC_SCPT] = std::shared_ptr<Converter>(new ConvertSCPT());
converters[ESM::REC_PROJ] = std::shared_ptr<Converter>(new ConvertPROJ());
converters[recSPLM] = std::shared_ptr<Converter>(new ConvertSPLM());
// TODO:
// - REGN (weather in certain regions?)
// - VFXM
// - SPLM (active spell effects)
// - PROJ (magic projectiles in air)
std::set<unsigned int> unknownRecords;
for (std::map<unsigned int, boost::shared_ptr<Converter> >::const_iterator it = converters.begin();
for (std::map<unsigned int, std::shared_ptr<Converter> >::const_iterator it = converters.begin();
it != converters.end(); ++it)
{
it->second->setContext(context);
@ -323,7 +325,7 @@ namespace ESSImport
ESM::NAME n = esm.getRecName();
esm.getRecHeader();
std::map<unsigned int, boost::shared_ptr<Converter> >::iterator it = converters.find(n.intval);
std::map<unsigned int, std::shared_ptr<Converter> >::iterator it = converters.find(n.intval);
if (it != converters.end())
{
it->second->read(esm);
@ -333,7 +335,7 @@ namespace ESSImport
if (unknownRecords.insert(n.intval).second)
{
std::ios::fmtflags f(std::cerr.flags());
std::cerr << "unknown record " << n.toString() << " (0x" << std::hex << esm.getFileOffset() << ")" << std::endl;
std::cerr << "Error: unknown record " << n.toString() << " (0x" << std::hex << esm.getFileOffset() << ")" << std::endl;
std::cerr.flags(f);
}
@ -375,7 +377,7 @@ namespace ESSImport
profile.mPlayerClassName = context.mCustomPlayerClassName;
else
profile.mPlayerClassId = context.mPlayerBase.mClass;
profile.mPlayerLevel = context.mPlayerBase.mNpdt52.mLevel;
profile.mPlayerLevel = context.mPlayerBase.mNpdt.mLevel;
profile.mPlayerName = header.mGameData.mPlayerName.toString();
writeScreenshot(header, profile);
@ -386,7 +388,7 @@ namespace ESSImport
// Writing order should be Dynamic Store -> Cells -> Player,
// so that references to dynamic records can be recognized when loading
for (std::map<unsigned int, boost::shared_ptr<Converter> >::const_iterator it = converters.begin();
for (std::map<unsigned int, std::shared_ptr<Converter> >::const_iterator it = converters.begin();
it != converters.end(); ++it)
{
if (it->second->getStage() != 0)
@ -399,7 +401,7 @@ namespace ESSImport
context.mPlayerBase.save(writer);
writer.endRecord(ESM::REC_NPC_);
for (std::map<unsigned int, boost::shared_ptr<Converter> >::const_iterator it = converters.begin();
for (std::map<unsigned int, std::shared_ptr<Converter> >::const_iterator it = converters.begin();
it != converters.end(); ++it)
{
if (it->second->getStage() != 1)
@ -420,6 +422,19 @@ namespace ESSImport
context.mPlayer.save(writer);
writer.endRecord(ESM::REC_PLAY);
writer.startRecord(ESM::REC_ACTC);
writer.writeHNT("COUN", context.mNextActorId);
writer.endRecord(ESM::REC_ACTC);
// Stage 2 requires cell references to be written / actors IDs assigned
for (std::map<unsigned int, std::shared_ptr<Converter> >::const_iterator it = converters.begin();
it != converters.end(); ++it)
{
if (it->second->getStage() != 2)
continue;
it->second->write(writer);
}
writer.startRecord (ESM::REC_DIAS);
context.mDialogueState.save(writer);
writer.endRecord(ESM::REC_DIAS);

@ -15,7 +15,7 @@
#include "importcrec.hpp"
#include "importcntc.hpp"
#include "importplayer.hpp"
#include "importsplm.h"
@ -48,14 +48,20 @@ namespace ESSImport
std::map<std::pair<int, std::string>, NPCC> mNpcChanges;
std::map<std::pair<int, std::string>, CNTC> mContainerChanges;
std::map<std::pair<int, std::string>, int> mActorIdMap;
int mNextActorId;
std::map<std::string, ESM::Creature> mCreatures;
std::map<std::string, ESM::NPC> mNpcs;
std::vector<SPLM::ActiveSpell> mActiveSpells;
Context()
: mDay(0)
, mMonth(0)
, mYear(0)
, mHour(0.f)
, mNextActorId(0)
{
mPlayer.mAutoMove = 0;
ESM::CellId playerCellId;
@ -67,16 +73,23 @@ namespace ESSImport
= mPlayer.mLastKnownExteriorPosition[2]
= 0.0f;
mPlayer.mHasMark = 0;
mPlayer.mCurrentCrimeId = 0; // TODO
mPlayer.mCurrentCrimeId = -1; // TODO
mPlayer.mPaidCrimeId = -1;
mPlayer.mObject.blank();
mPlayer.mObject.mEnabled = true;
mPlayer.mObject.mRef.mRefID = "player"; // REFR.mRefID would be PlayerSaveGame
mPlayer.mObject.mCreatureStats.mActorId = generateActorId();
mGlobalMapState.mBounds.mMinX = 0;
mGlobalMapState.mBounds.mMaxX = 0;
mGlobalMapState.mBounds.mMinY = 0;
mGlobalMapState.mBounds.mMaxY = 0;
}
int generateActorId()
{
return mNextActorId++;
}
};
}

@ -20,6 +20,7 @@ namespace ESSImport
item.mId = contItem.mItem.toString();
item.mCount = contItem.mCount;
item.mRelativeEquipmentSlot = -1;
item.mLockLevel = 0;
unsigned int itemCount = std::abs(item.mCount);
bool separateStacks = false;

@ -0,0 +1,18 @@
#include "importproj.h"
#include <components/esm/esmreader.hpp>
namespace ESSImport
{
void ESSImport::PROJ::load(ESM::ESMReader& esm)
{
while (esm.isNextSub("PNAM"))
{
PNAM pnam;
esm.getHT(pnam);
mProjectiles.push_back(pnam);
}
}
}

@ -0,0 +1,47 @@
#ifndef OPENMW_ESSIMPORT_IMPORTPROJ_H
#define OPENMW_ESSIMPORT_IMPORTPROJ_H
#include <vector>
#include <components/esm/esmcommon.hpp>
#include <components/esm/util.hpp>
namespace ESM
{
class ESMReader;
}
namespace ESSImport
{
struct PROJ
{
#pragma pack(push)
#pragma pack(1)
struct PNAM // 184 bytes
{
float mAttackStrength;
float mSpeed;
unsigned char mUnknown[4*2];
float mFlightTime;
int mSplmIndex; // reference to a SPLM record (0 for ballistic projectiles)
unsigned char mUnknown2[4];
ESM::Vector3 mVelocity;
ESM::Vector3 mPosition;
unsigned char mUnknown3[4*9];
ESM::NAME32 mActorId; // indexed refID (with the exception of "PlayerSaveGame")
ESM::NAME32 mArrowId;
ESM::NAME32 mBowId;
bool isMagic() const { return mSplmIndex != 0; }
};
#pragma pack(pop)
std::vector<PNAM> mProjectiles;
void load(ESM::ESMReader& esm);
};
}
#endif

@ -0,0 +1,43 @@
#include "importsplm.h"
#include <components/esm/esmreader.hpp>
namespace ESSImport
{
void SPLM::load(ESM::ESMReader& esm)
{
while (esm.isNextSub("NAME"))
{
ActiveSpell spell;
esm.getHT(spell.mIndex);
esm.getHNT(spell.mSPDT, "SPDT");
spell.mTarget = esm.getHNOString("TNAM");
while (esm.isNextSub("NPDT"))
{
ActiveEffect effect;
esm.getHT(effect.mNPDT);
// Effect-specific subrecords can follow:
// - INAM for disintegration and bound effects
// - CNAM for summoning and command effects
// - VNAM for vampirism
// NOTE: There can be multiple INAMs per effect.
// TODO: Needs more research.
esm.skipHSubUntil("NAM0"); // sentinel
esm.getSubName();
esm.skipHSub();
spell.mActiveEffects.push_back(effect);
}
unsigned char xnam; // sentinel
esm.getHNT(xnam, "XNAM");
mActiveSpells.push_back(spell);
}
}
}

@ -0,0 +1,81 @@
#ifndef OPENMW_ESSIMPORT_IMPORTSPLM_H
#define OPENMW_ESSIMPORT_IMPORTSPLM_H
#include <vector>
#include <components/esm/esmcommon.hpp>
#include <components/esm/util.hpp>
namespace ESM
{
class ESMReader;
}
namespace ESSImport
{
struct SPLM
{
#pragma pack(push)
#pragma pack(1)
struct SPDT // 160 bytes
{
int mType; // 1 = spell, 2 = enchantment, 3 = potion
ESM::NAME32 mId; // base ID of a spell/enchantment/potion
unsigned char mUnknown[4*4];
ESM::NAME32 mCasterId;
ESM::NAME32 mSourceId; // empty for spells
unsigned char mUnknown2[4*11];
};
struct NPDT // 56 bytes
{
ESM::NAME32 mAffectedActorId;
unsigned char mUnknown[4*2];
int mMagnitude;
float mSecondsActive;
unsigned char mUnknown2[4*2];
};
struct INAM // 40 bytes
{
int mUnknown;
unsigned char mUnknown2;
ESM::FIXED_STRING<35> mItemId; // disintegrated item / bound item / item to re-equip after expiration
};
struct CNAM // 36 bytes
{
int mUnknown; // seems to always be 0
ESM::NAME32 mSummonedOrCommandedActor[32];
};
struct VNAM // 4 bytes
{
int mUnknown;
};
#pragma pack(pop)
struct ActiveEffect
{
NPDT mNPDT;
};
struct ActiveSpell
{
int mIndex;
SPDT mSPDT;
std::string mTarget;
std::vector<ActiveEffect> mActiveEffects;
};
std::vector<ActiveSpell> mActiveSpells;
void load(ESM::ESMReader& esm);
};
}
#endif

@ -2,8 +2,6 @@
#include <boost/program_options.hpp>
#include <boost/filesystem.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/fstream.hpp>
#include <components/files/configurationmanager.hpp>

@ -6,7 +6,9 @@ set(LAUNCHER
playpage.cpp
textslotmsgbox.cpp
settingspage.cpp
advancedpage.cpp
utils/cellnameloader.cpp
utils/profilescombobox.cpp
utils/textinputdialog.cpp
utils/lineedit.cpp
@ -21,7 +23,9 @@ set(LAUNCHER_HEADER
playpage.hpp
textslotmsgbox.hpp
settingspage.hpp
advancedpage.hpp
utils/cellnameloader.hpp
utils/profilescombobox.hpp
utils/textinputdialog.hpp
utils/lineedit.hpp
@ -35,7 +39,9 @@ set(LAUNCHER_HEADER_MOC
playpage.hpp
textslotmsgbox.hpp
settingspage.hpp
advancedpage.hpp
utils/cellnameloader.hpp
utils/textinputdialog.hpp
utils/profilescombobox.hpp
utils/lineedit.hpp
@ -49,6 +55,7 @@ set(LAUNCHER_UI
${CMAKE_SOURCE_DIR}/files/ui/playpage.ui
${CMAKE_SOURCE_DIR}/files/ui/contentselector.ui
${CMAKE_SOURCE_DIR}/files/ui/settingspage.ui
${CMAKE_SOURCE_DIR}/files/ui/advancedpage.ui
)
source_group(launcher FILES ${LAUNCHER} ${LAUNCHER_HEADER})
@ -78,7 +85,7 @@ if(NOT WIN32)
endif(NOT WIN32)
# Main executable
add_executable(openmw-launcher
openmw_add_executable(openmw-launcher
${GUI_TYPE}
${LAUNCHER}
${LAUNCHER_HEADER}
@ -102,7 +109,7 @@ if (DESIRED_QT_VERSION MATCHES 4)
target_link_libraries(openmw-launcher ${QT_QTMAIN_LIBRARY})
endif(WIN32)
else()
qt5_use_modules(openmw-launcher Widgets Core)
target_link_libraries(openmw-launcher Qt5::Widgets Qt5::Core)
endif()
if (BUILD_WITH_CODE_COVERAGE)

@ -0,0 +1,176 @@
#include "advancedpage.hpp"
#include <components/config/gamesettings.hpp>
#include <components/config/launchersettings.hpp>
#include <QFileDialog>
#include <QCompleter>
#include <components/contentselector/view/contentselector.hpp>
#include <components/contentselector/model/esmfile.hpp>
Launcher::AdvancedPage::AdvancedPage(Files::ConfigurationManager &cfg,
Config::GameSettings &gameSettings,
Settings::Manager &engineSettings, QWidget *parent)
: QWidget(parent)
, mCfgMgr(cfg)
, mGameSettings(gameSettings)
, mEngineSettings(engineSettings)
{
setObjectName ("AdvancedPage");
setupUi(this);
loadSettings();
}
void Launcher::AdvancedPage::loadCellsForAutocomplete(QStringList cellNames) {
// Set up an auto-completer for the "Start default character at" field
auto *completer = new QCompleter(cellNames);
completer->setCompletionMode(QCompleter::PopupCompletion);
completer->setCaseSensitivity(Qt::CaseSensitivity::CaseInsensitive);
startDefaultCharacterAtField->setCompleter(completer);
}
void Launcher::AdvancedPage::on_skipMenuCheckBox_stateChanged(int state) {
startDefaultCharacterAtLabel->setEnabled(state == Qt::Checked);
startDefaultCharacterAtField->setEnabled(state == Qt::Checked);
}
void Launcher::AdvancedPage::on_runScriptAfterStartupBrowseButton_clicked()
{
QString scriptFile = QFileDialog::getOpenFileName(
this,
QObject::tr("Select script file"),
QDir::currentPath(),
QString(tr("Text file (*.txt)")));
if (scriptFile.isEmpty())
return;
QFileInfo info(scriptFile);
if (!info.exists() || !info.isReadable())
return;
const QString path(QDir::toNativeSeparators(info.absoluteFilePath()));
runScriptAfterStartupField->setText(path);
}
bool Launcher::AdvancedPage::loadSettings()
{
// Testing
bool skipMenu = mGameSettings.value("skip-menu").toInt() == 1;
if (skipMenu) {
skipMenuCheckBox->setCheckState(Qt::Checked);
}
startDefaultCharacterAtLabel->setEnabled(skipMenu);
startDefaultCharacterAtField->setEnabled(skipMenu);
startDefaultCharacterAtField->setText(mGameSettings.value("start"));
runScriptAfterStartupField->setText(mGameSettings.value("script-run"));
// Game Settings
loadSettingBool(canLootDuringDeathAnimationCheckBox, "can loot during death animation", "Game");
loadSettingBool(followersAttackOnSightCheckBox, "followers attack on sight", "Game");
loadSettingBool(preventMerchantEquippingCheckBox, "prevent merchant equipping", "Game");
loadSettingBool(rebalanceSoulGemValuesCheckBox, "rebalance soul gem values", "Game");
loadSettingBool(chargeForEveryFollowerCheckBox, "charge for every follower travelling", "Game");
loadSettingBool(enchantedWeaponsMagicalCheckBox, "enchanted weapons are magical", "Game");
loadSettingBool(permanentBarterDispositionChangeCheckBox, "barter disposition change is permanent", "Game");
// Input Settings
loadSettingBool(allowThirdPersonZoomCheckBox, "allow third person zoom", "Input");
loadSettingBool(grabCursorCheckBox, "grab cursor", "Input");
loadSettingBool(toggleSneakCheckBox, "toggle sneak", "Input");
// Saves Settings
loadSettingBool(timePlayedCheckbox, "timeplayed", "Saves");
maximumQuicksavesComboBox->setValue(mEngineSettings.getInt("max quicksaves", "Saves"));
// User Interface Settings
loadSettingBool(showEffectDurationCheckBox, "show effect duration", "Game");
loadSettingBool(showEnchantChanceCheckBox, "show enchant chance", "Game");
loadSettingBool(showMeleeInfoCheckBox, "show melee info", "Game");
loadSettingBool(showProjectileDamageCheckBox, "show projectile damage", "Game");
int showOwnedIndex = mEngineSettings.getInt("show owned", "Game");
// Match the index with the option (only 0, 1, 2, or 3 are valid). Will default to 0 if invalid.
if (showOwnedIndex >= 0 && showOwnedIndex <= 3)
showOwnedComboBox->setCurrentIndex(showOwnedIndex);
// Other Settings
QString screenshotFormatString = QString::fromStdString(mEngineSettings.getString("screenshot format", "General")).toUpper();
if (screenshotFormatComboBox->findText(screenshotFormatString) == -1)
screenshotFormatComboBox->addItem(screenshotFormatString);
screenshotFormatComboBox->setCurrentIndex(screenshotFormatComboBox->findText(screenshotFormatString));
return true;
}
void Launcher::AdvancedPage::saveSettings()
{
// Ensure we only set the new settings if they changed. This is to avoid cluttering the
// user settings file (which by definition should only contain settings the user has touched)
// Testing
int skipMenu = skipMenuCheckBox->checkState() == Qt::Checked;
if (skipMenu != mGameSettings.value("skip-menu").toInt())
mGameSettings.setValue("skip-menu", QString::number(skipMenu));
QString startCell = startDefaultCharacterAtField->text();
if (startCell != mGameSettings.value("start")) {
mGameSettings.setValue("start", startCell);
}
QString scriptRun = runScriptAfterStartupField->text();
if (scriptRun != mGameSettings.value("script-run"))
mGameSettings.setValue("script-run", scriptRun);
// Game Settings
saveSettingBool(canLootDuringDeathAnimationCheckBox, "can loot during death animation", "Game");
saveSettingBool(followersAttackOnSightCheckBox, "followers attack on sight", "Game");
saveSettingBool(preventMerchantEquippingCheckBox, "prevent merchant equipping", "Game");
saveSettingBool(rebalanceSoulGemValuesCheckBox, "rebalance soul gem values", "Game");
saveSettingBool(chargeForEveryFollowerCheckBox, "charge for every follower travelling", "Game");
saveSettingBool(enchantedWeaponsMagicalCheckBox, "enchanted weapons are magical", "Game");
saveSettingBool(permanentBarterDispositionChangeCheckBox, "barter disposition change is permanent", "Game");
// Input Settings
saveSettingBool(allowThirdPersonZoomCheckBox, "allow third person zoom", "Input");
saveSettingBool(grabCursorCheckBox, "grab cursor", "Input");
saveSettingBool(toggleSneakCheckBox, "toggle sneak", "Input");
// Saves Settings
saveSettingBool(timePlayedCheckbox, "timeplayed", "Saves");
int maximumQuicksaves = maximumQuicksavesComboBox->value();
if (maximumQuicksaves != mEngineSettings.getInt("max quicksaves", "Saves")) {
mEngineSettings.setInt("max quicksaves", "Saves", maximumQuicksaves);
}
// User Interface Settings
saveSettingBool(showEffectDurationCheckBox, "show effect duration", "Game");
saveSettingBool(showEnchantChanceCheckBox, "show enchant chance", "Game");
saveSettingBool(showMeleeInfoCheckBox, "show melee info", "Game");
saveSettingBool(showProjectileDamageCheckBox, "show projectile damage", "Game");
int showOwnedCurrentIndex = showOwnedComboBox->currentIndex();
if (showOwnedCurrentIndex != mEngineSettings.getInt("show owned", "Game"))
mEngineSettings.setInt("show owned", "Game", showOwnedCurrentIndex);
// Other Settings
std::string screenshotFormatString = screenshotFormatComboBox->currentText().toLower().toStdString();
if (screenshotFormatString != mEngineSettings.getString("screenshot format", "General"))
mEngineSettings.setString("screenshot format", "General", screenshotFormatString);
}
void Launcher::AdvancedPage::loadSettingBool(QCheckBox *checkbox, const std::string &setting, const std::string &group) {
if (mEngineSettings.getBool(setting, group))
checkbox->setCheckState(Qt::Checked);
}
void Launcher::AdvancedPage::saveSettingBool(QCheckBox *checkbox, const std::string &setting, const std::string &group) {
bool cValue = checkbox->checkState();
if (cValue != mEngineSettings.getBool(setting, group))
mEngineSettings.setBool(setting, group, cValue);
}
void Launcher::AdvancedPage::slotLoadedCellsChanged(QStringList cellNames)
{
loadCellsForAutocomplete(cellNames);
}

@ -0,0 +1,47 @@
#ifndef ADVANCEDPAGE_H
#define ADVANCEDPAGE_H
#include <QWidget>
#include "ui_advancedpage.h"
#include <components/settings/settings.hpp>
namespace Files { struct ConfigurationManager; }
namespace Config { class GameSettings; }
namespace Launcher
{
class AdvancedPage : public QWidget, private Ui::AdvancedPage
{
Q_OBJECT
public:
AdvancedPage(Files::ConfigurationManager &cfg, Config::GameSettings &gameSettings,
Settings::Manager &engineSettings, QWidget *parent = 0);
bool loadSettings();
void saveSettings();
public slots:
void slotLoadedCellsChanged(QStringList cellNames);
private slots:
void on_skipMenuCheckBox_stateChanged(int state);
void on_runScriptAfterStartupBrowseButton_clicked();
private:
Files::ConfigurationManager &mCfgMgr;
Config::GameSettings &mGameSettings;
Settings::Manager &mEngineSettings;
/**
* Load the cells associated with the given content files for use in autocomplete
* @param filePaths the file paths of the content files to be examined
*/
void loadCellsForAutocomplete(QStringList filePaths);
void loadSettingBool(QCheckBox *checkbox, const std::string& setting, const std::string& group);
void saveSettingBool(QCheckBox *checkbox, const std::string& setting, const std::string& group);
};
}
#endif

@ -7,7 +7,10 @@
#include <QCheckBox>
#include <QMenu>
#include <QSortFilterProxyModel>
#include <thread>
#include <mutex>
#include <apps/launcher/utils/cellnameloader.hpp>
#include <components/files/configurationmanager.hpp>
#include <components/contentselector/model/esmfile.hpp>
@ -16,6 +19,7 @@
#include <components/config/gamesettings.hpp>
#include <components/config/launchersettings.hpp>
#include <iostream>
#include "utils/textinputdialog.hpp"
#include "utils/profilescombobox.hpp"
@ -40,6 +44,13 @@ Launcher::DataFilesPage::DataFilesPage(Files::ConfigurationManager &cfg, Config:
buildView();
loadSettings();
// Connect signal and slot after the settings have been loaded. We only care about the user changing
// the addons and don't want to get signals of the system doing it during startup.
connect(mSelector, SIGNAL(signalAddonDataChanged(QModelIndex,QModelIndex)),
this, SLOT(slotAddonDataChanged()));
// Call manually to indicate all changes to addon data during startup.
slotAddonDataChanged();
}
void Launcher::DataFilesPage::buildView()
@ -142,6 +153,17 @@ void Launcher::DataFilesPage::saveSettings(const QString &profile)
mGameSettings.setContentList(fileNames);
}
QStringList Launcher::DataFilesPage::selectedFilePaths()
{
//retrieve the files selected for the profile
ContentSelectorModel::ContentFileList items = mSelector->selectedFiles();
QStringList filePaths;
foreach(const ContentSelectorModel::EsmFile *item, items) {
filePaths.append(item->filePath());
}
return filePaths;
}
void Launcher::DataFilesPage::removeProfile(const QString &profile)
{
mLauncherSettings.removeContentList(profile);
@ -308,3 +330,31 @@ bool Launcher::DataFilesPage::showDeleteMessageBox (const QString &text)
return (msgBox.clickedButton() == deleteButton);
}
void Launcher::DataFilesPage::slotAddonDataChanged()
{
QStringList selectedFiles = selectedFilePaths();
if (previousSelectedFiles != selectedFiles) {
previousSelectedFiles = selectedFiles;
// Loading cells for core Morrowind + Expansions takes about 0.2 seconds, which is enough to cause a
// barely perceptible UI lag. Splitting into its own thread to alleviate that.
std::thread loadCellsThread(&DataFilesPage::reloadCells, this, selectedFiles);
loadCellsThread.detach();
}
}
// Mutex lock to run reloadCells synchronously.
std::mutex _reloadCellsMutex;
void Launcher::DataFilesPage::reloadCells(QStringList selectedFiles)
{
// Use a mutex lock so that we can prevent two threads from executing the rest of this code at the same time
// Based on https://stackoverflow.com/a/5429695/531762
std::unique_lock<std::mutex> lock(_reloadCellsMutex);
// The following code will run only if there is not another thread currently running it
CellNameLoader cellNameLoader;
QStringList cellNamesList = QStringList::fromSet(cellNameLoader.getCellNames(selectedFiles));
std::sort(cellNamesList.begin(), cellNamesList.end());
emit signalLoadedCellsChanged(cellNamesList);
}

@ -7,6 +7,7 @@
#include <QDir>
#include <QFile>
#include <QStringList>
class QSortFilterProxyModel;
class QAbstractItemModel;
@ -41,8 +42,15 @@ namespace Launcher
void saveSettings(const QString &profile = "");
bool loadSettings();
/**
* Returns the file paths of all selected content files
* @return the file paths of all selected content files
*/
QStringList selectedFilePaths();
signals:
void signalProfileChanged (int index);
void signalLoadedCellsChanged(QStringList selectedFiles);
public slots:
void slotProfileChanged (int index);
@ -52,6 +60,7 @@ namespace Launcher
void slotProfileChangedByUser(const QString &previous, const QString &current);
void slotProfileRenamed(const QString &previous, const QString &current);
void slotProfileDeleted(const QString &item);
void slotAddonDataChanged ();
void updateOkButton(const QString &text);
@ -72,7 +81,7 @@ namespace Launcher
Config::LauncherSettings &mLauncherSettings;
QString mPreviousProfile;
QStringList previousSelectedFiles;
QString mDataLocal;
void setPluginsCheckstates(Qt::CheckState state);
@ -87,6 +96,7 @@ namespace Launcher
void addProfile (const QString &profile, bool setAsCurrent);
void checkForDefaultProfile();
void populateFileViews(const QString& contentModelName);
void reloadCells(QStringList selectedFiles);
class PathIterator
{

@ -1,5 +1,7 @@
#include "graphicspage.hpp"
#include <boost/math/common_factor.hpp>
#include <csignal>
#include <QDesktopWidget>
#include <QMessageBox>
#include <QDir>
@ -10,16 +12,11 @@
#define MAC_OS_X_VERSION_MIN_REQUIRED __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
#endif // MAC_OS_X_VERSION_MIN_REQUIRED
#include <SDL.h>
#include <SDL_video.h>
#include <boost/math/common_factor.hpp>
#include <components/files/configurationmanager.hpp>
#include <components/contentselector/model/naturalsort.hpp>
#include <components/settings/settings.hpp>
QString getAspect(int x, int y)
{
int gcd = boost::math::gcd (x, y);
@ -51,8 +48,28 @@ Launcher::GraphicsPage::GraphicsPage(Files::ConfigurationManager &cfg, Settings:
}
bool Launcher::GraphicsPage::connectToSdl() {
SDL_SetHint(SDL_HINT_RENDER_DRIVER, "software");
SDL_SetMainReady();
// Required for determining screen resolution and such on the Graphics tab
if (SDL_Init(SDL_INIT_VIDEO) != 0)
{
return false;
}
signal(SIGINT, SIG_DFL); // We don't want to use the SDL event loop in the launcher,
// so reset SIGINT which SDL wants to redirect to an SDL_Quit event.
return true;
}
bool Launcher::GraphicsPage::setupSDL()
{
bool sdlConnectSuccessful = connectToSdl();
if (!sdlConnectSuccessful)
{
return false;
}
int displays = SDL_GetNumVideoDisplays();
if (displays < 0)
@ -72,6 +89,9 @@ bool Launcher::GraphicsPage::setupSDL()
screenComboBox->addItem(QString(tr("Screen ")) + QString::number(i + 1));
}
// Disconnect from SDL processes
SDL_Quit();
return true;
}

@ -37,6 +37,11 @@ namespace Launcher
QStringList getAvailableResolutions(int screen);
QRect getMaximumResolution();
/**
* Connect to the SDL so that we can use it to determine graphics
* @return whether or not connecting to SDL is successful
*/
bool connectToSdl();
bool setupSDL();
};
}

@ -1,5 +1,4 @@
#include <iostream>
#include <csignal>
#include <QApplication>
#include <QTextCodec>
@ -12,24 +11,12 @@
#define MAC_OS_X_VERSION_MIN_REQUIRED __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
#endif // MAC_OS_X_VERSION_MIN_REQUIRED
#include <SDL.h>
#include "maindialog.hpp"
int main(int argc, char *argv[])
{
try
{
SDL_SetHint(SDL_HINT_RENDER_DRIVER, "software");
SDL_SetMainReady();
if (SDL_Init(SDL_INIT_VIDEO) != 0)
{
qDebug() << "SDL_Init failed: " << QString::fromUtf8(SDL_GetError());
return 0;
}
signal(SIGINT, SIG_DFL); // We don't want to use the SDL event loop in the launcher,
// so reset SIGINT which SDL wants to redirect to an SDL_Quit event.
QApplication app(argc, argv);
// Now we make sure the current dir is set to application path
@ -46,13 +33,11 @@ int main(int argc, char *argv[])
if (result == Launcher::FirstRunDialogResultContinue)
mainWin.show();
int returnValue = app.exec();
SDL_Quit();
return returnValue;
return app.exec();
}
catch (std::exception& e)
{
std::cerr << "ERROR: " << e.what() << std::endl;
return 0;
}
}
}

@ -2,9 +2,7 @@
#include <components/version/version.hpp>
#include <QLabel>
#include <QDate>
#include <QTime>
#include <QMessageBox>
#include <QPushButton>
#include <QFontDatabase>
@ -12,8 +10,6 @@
#include <QFileDialog>
#include <QCloseEvent>
#include <QTextCodec>
#include <QFile>
#include <QDir>
#include <QDebug>
@ -21,6 +17,7 @@
#include "graphicspage.hpp"
#include "datafilespage.hpp"
#include "settingspage.hpp"
#include "advancedpage.hpp"
using namespace Process;
@ -93,17 +90,23 @@ void Launcher::MainDialog::createIcons()
dataFilesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
QListWidgetItem *graphicsButton = new QListWidgetItem(iconWidget);
graphicsButton->setIcon(QIcon::fromTheme("video-display"));
graphicsButton->setIcon(QIcon(":/images/preferences-video.png"));
graphicsButton->setText(tr("Graphics"));
graphicsButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom | Qt::AlignAbsolute);
graphicsButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
QListWidgetItem *settingsButton = new QListWidgetItem(iconWidget);
settingsButton->setIcon(QIcon::fromTheme("preferences-system"));
settingsButton->setIcon(QIcon(":/images/preferences.png"));
settingsButton->setText(tr("Settings"));
settingsButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom);
settingsButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
QListWidgetItem *advancedButton = new QListWidgetItem(iconWidget);
advancedButton->setIcon(QIcon(":/images/preferences-advanced.png"));
advancedButton->setText(tr("Advanced"));
advancedButton->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom);
advancedButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
connect(iconWidget,
SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*)));
@ -116,6 +119,7 @@ void Launcher::MainDialog::createPages()
mDataFilesPage = new DataFilesPage(mCfgMgr, mGameSettings, mLauncherSettings, this);
mGraphicsPage = new GraphicsPage(mCfgMgr, mEngineSettings, this);
mSettingsPage = new SettingsPage(mCfgMgr, mGameSettings, mLauncherSettings, this);
mAdvancedPage = new AdvancedPage(mCfgMgr, mGameSettings, mEngineSettings, this);
// Set the combobox of the play page to imitate the combobox on the datafilespage
mPlayPage->setProfilesModel(mDataFilesPage->profilesModel());
@ -126,6 +130,7 @@ void Launcher::MainDialog::createPages()
pagesWidget->addWidget(mDataFilesPage);
pagesWidget->addWidget(mGraphicsPage);
pagesWidget->addWidget(mSettingsPage);
pagesWidget->addWidget(mAdvancedPage);
// Select the first page
iconWidget->setCurrentItem(iconWidget->item(0), QItemSelectionModel::Select);
@ -134,6 +139,8 @@ void Launcher::MainDialog::createPages()
connect(mPlayPage, SIGNAL(signalProfileChanged(int)), mDataFilesPage, SLOT(slotProfileChanged(int)));
connect(mDataFilesPage, SIGNAL(signalProfileChanged(int)), mPlayPage, SLOT(setProfilesIndex(int)));
// Using Qt::QueuedConnection because signal is emitted in a subthread and slot is in the main thread
connect(mDataFilesPage, SIGNAL(signalLoadedCellsChanged(QStringList)), mAdvancedPage, SLOT(slotLoadedCellsChanged(QStringList)), Qt::QueuedConnection);
}
@ -172,7 +179,10 @@ Launcher::FirstRunDialogResult Launcher::MainDialog::showFirstRunDialog()
}
}
return setup() ? FirstRunDialogResultContinue : FirstRunDialogResultFailure;
if (!setup() || !setupGameData()) {
return FirstRunDialogResultFailure;
}
return FirstRunDialogResultContinue;
}
void Launcher::MainDialog::setVersionLabel()
@ -242,6 +252,9 @@ bool Launcher::MainDialog::reloadSettings()
if (!mGraphicsPage->loadSettings())
return false;
if (!mAdvancedPage->loadSettings())
return false;
return true;
}
@ -344,6 +357,11 @@ bool Launcher::MainDialog::setupGameSettings()
file.close();
}
return true;
}
bool Launcher::MainDialog::setupGameData()
{
QStringList dataDirs;
// Check if the paths actually contain data files
@ -475,6 +493,7 @@ bool Launcher::MainDialog::writeSettings()
mDataFilesPage->saveSettings();
mGraphicsPage->saveSettings();
mSettingsPage->saveSettings();
mAdvancedPage->saveSettings();
QString userPath = QString::fromUtf8(mCfgMgr.getUserConfigPath().string().c_str());
QDir dir(userPath);

@ -30,6 +30,7 @@ namespace Launcher
class DataFilesPage;
class UnshieldThread;
class SettingsPage;
class AdvancedPage;
enum FirstRunDialogResult
{
@ -72,6 +73,7 @@ namespace Launcher
bool setupLauncherSettings();
bool setupGameSettings();
bool setupGraphicsSettings();
bool setupGameData();
void setVersionLabel();
@ -87,6 +89,7 @@ namespace Launcher
GraphicsPage *mGraphicsPage;
DataFilesPage *mDataFilesPage;
SettingsPage *mSettingsPage;
AdvancedPage *mAdvancedPage;
Process::ProcessInvoker *mGameInvoker;
Process::ProcessInvoker *mWizardInvoker;

@ -0,0 +1,48 @@
#include "cellnameloader.hpp"
#include <components/esm/loadcell.hpp>
#include <components/contentselector/view/contentselector.hpp>
QSet<QString> CellNameLoader::getCellNames(QStringList &contentPaths)
{
QSet<QString> cellNames;
ESM::ESMReader esmReader;
// Loop through all content files
for (auto &contentPath : contentPaths) {
esmReader.open(contentPath.toStdString());
// Loop through all records
while(esmReader.hasMoreRecs())
{
ESM::NAME recordName = esmReader.getRecName();
esmReader.getRecHeader();
if (isCellRecord(recordName)) {
QString cellName = getCellName(esmReader);
if (!cellName.isEmpty()) {
cellNames.insert(cellName);
}
}
// Stop loading content for this record and continue to the next
esmReader.skipRecord();
}
}
return cellNames;
}
bool CellNameLoader::isCellRecord(ESM::NAME &recordName)
{
return recordName.intval == ESM::REC_CELL;
}
QString CellNameLoader::getCellName(ESM::ESMReader &esmReader)
{
ESM::Cell cell;
bool isDeleted = false;
cell.loadNameAndData(esmReader, isDeleted);
return QString::fromStdString(cell.mName);
}

@ -0,0 +1,41 @@
#ifndef OPENMW_CELLNAMELOADER_H
#define OPENMW_CELLNAMELOADER_H
#include <QComboBox>
#include <QSet>
#include <QString>
#include <components/esm/esmreader.hpp>
namespace ESM {class ESMReader; struct Cell;}
namespace ContentSelectorView {class ContentSelector;}
class CellNameLoader {
public:
/**
* Returns the names of all cells contained within the given content files
* @param contentPaths the file paths of each content file to be examined
* @return the names of all cells
*/
QSet<QString> getCellNames(QStringList &contentPaths);
private:
/**
* Returns whether or not the given record is of type "Cell"
* @param name The name associated with the record
* @return whether or not the given record is of type "Cell"
*/
bool isCellRecord(ESM::NAME &name);
/**
* Returns the name of the cell
* @param esmReader the reader currently pointed to a loaded cell
* @return the name of the cell
*/
QString getCellName(ESM::ESMReader &esmReader);
};
#endif //OPENMW_CELLNAMELOADER_H

@ -0,0 +1,32 @@
project(masterserver)
#set(CMAKE_CXX_STANDARD 14)
add_definitions(-std=gnu++14)
include_directories("./")
set(SOURCE_FILES main.cpp MasterServer.cpp MasterServer.hpp RestServer.cpp RestServer.hpp)
add_executable(masterserver ${SOURCE_FILES})
target_link_libraries(masterserver ${RakNet_LIBRARY} components)
option(BUILD_MASTER_TEST "build master server test program" OFF)
if(BUILD_MASTER_TEST)
add_executable(ServerTest ServerTest.cpp)
target_link_libraries(ServerTest ${RakNet_LIBRARY} components)
endif()
if (UNIX)
# Fix for not visible pthreads functions for linker with glibc 2.15
if(NOT APPLE)
target_link_libraries(masterserver ${CMAKE_THREAD_LIBS_INIT})
if(BUILD_MASTER_TEST)
target_link_libraries(ServerTest ${CMAKE_THREAD_LIBS_INIT})
endif()
endif(NOT APPLE)
endif(UNIX)
if(WIN32)
target_link_libraries(masterserver wsock32)
endif(WIN32)

@ -0,0 +1,236 @@
//
// Created by koncord on 21.04.17.
//
#include <RakPeerInterface.h>
#include <RakSleep.h>
#include <BitStream.h>
#include <iostream>
#include "MasterServer.hpp"
#include <components/openmw-mp/Master/PacketMasterQuery.hpp>
#include <components/openmw-mp/Master/PacketMasterUpdate.hpp>
#include <components/openmw-mp/Master/PacketMasterAnnounce.hpp>
#include <components/openmw-mp/Version.hpp>
using namespace RakNet;
using namespace std;
using namespace mwmp;
using namespace chrono;
MasterServer::MasterServer(unsigned short maxConnections, unsigned short port)
{
peer = RakPeerInterface::GetInstance();
sockdescr = SocketDescriptor(port, 0);
peer->Startup(maxConnections, &sockdescr, 1, 1000);
peer->SetMaximumIncomingConnections(maxConnections);
peer->SetIncomingPassword(TES3MP_MASTERSERVER_PASSW, (int) strlen(TES3MP_MASTERSERVER_PASSW));
run = false;
}
MasterServer::~MasterServer()
{
Stop(true);
}
using namespace chrono;
void MasterServer::Thread()
{
unsigned char packetId = 0;
auto startTime = chrono::steady_clock::now();
BitStream send;
PacketMasterQuery pmq(peer);
pmq.SetSendStream(&send);
PacketMasterUpdate pmu(peer);
pmu.SetSendStream(&send);
PacketMasterAnnounce pma(peer);
pma.SetSendStream(&send);
while (run)
{
Packet *packet = peer->Receive();
auto now = steady_clock::now();
if (now - startTime >= 60s)
{
startTime = steady_clock::now();
for (auto it = servers.begin(); it != servers.end();)
{
if (it->second.lastUpdate + 60s <= now)
servers.erase(it++);
else ++it;
}
for(auto id = pendingACKs.begin(); id != pendingACKs.end();)
{
if(now - id->second >= 30s)
{
cout << "timeout: " << peer->GetSystemAddressFromGuid(id->first).ToString() << endl;
peer->CloseConnection(id->first, true);
id = pendingACKs.erase(id);
}
else
++id;
}
}
if (packet == nullptr)
RakSleep(10);
else
for (; packet; peer->DeallocatePacket(packet), packet = peer->Receive())
{
BitStream data(packet->data, packet->length, false);
data.Read(packetId);
switch (packetId)
{
case ID_NEW_INCOMING_CONNECTION:
cout << "New incoming connection: " << packet->systemAddress.ToString() << endl;
break;
case ID_DISCONNECTION_NOTIFICATION:
cout << "Disconnected: " << packet->systemAddress.ToString() << endl;
break;
case ID_CONNECTION_LOST:
cout << "Connection lost: " << packet->systemAddress.ToString() << endl;
break;
case ID_MASTER_QUERY:
{
pmq.SetServers(reinterpret_cast<map<SystemAddress, QueryData> *>(&servers));
pmq.Send(packet->systemAddress);
pendingACKs[packet->guid] = steady_clock::now();
cout << "Sent info about all " << servers.size() << " servers to "
<< packet->systemAddress.ToString() << endl;
break;
}
case ID_MASTER_UPDATE:
{
SystemAddress addr;
data.Read(addr); // update 1 server
ServerIter it = servers.find(addr);
if (it != servers.end())
{
pair<SystemAddress, QueryData> pairPtr(it->first, static_cast<QueryData>(it->second));
pmu.SetServer(&pairPtr);
pmu.Send(packet->systemAddress);
pendingACKs[packet->guid] = steady_clock::now();
cout << "Sent info about " << addr.ToString() << " to " << packet->systemAddress.ToString()
<< endl;
}
break;
}
case ID_MASTER_ANNOUNCE:
{
ServerIter iter = servers.find(packet->systemAddress);
pma.SetReadStream(&data);
SServer server;
pma.SetServer(&server);
pma.Read();
auto keepAliveFunc = [&]() {
iter->second.lastUpdate = now;
pma.SetFunc(PacketMasterAnnounce::FUNCTION_KEEP);
pma.Send(packet->systemAddress);
pendingACKs[packet->guid] = steady_clock::now();
};
if (iter != servers.end())
{
if (pma.GetFunc() == PacketMasterAnnounce::FUNCTION_DELETE)
{
servers.erase(iter);
cout << "Deleted";
pma.Send(packet->systemAddress);
pendingACKs[packet->guid] = steady_clock::now();
}
else if (pma.GetFunc() == PacketMasterAnnounce::FUNCTION_ANNOUNCE)
{
cout << "Updated";
iter->second = server;
keepAliveFunc();
}
else
{
cout << "Keeping alive";
keepAliveFunc();
}
}
else if (pma.GetFunc() == PacketMasterAnnounce::FUNCTION_ANNOUNCE)
{
cout << "Added";
iter = servers.insert({packet->systemAddress, server}).first;
keepAliveFunc();
}
else
{
cout << "Unknown";
pma.SetFunc(PacketMasterAnnounce::FUNCTION_DELETE);
pma.Send(packet->systemAddress);
pendingACKs[packet->guid] = steady_clock::now();
}
cout << " server " << packet->systemAddress.ToString() << endl;
break;
}
case ID_SND_RECEIPT_ACKED:
uint32_t num;
memcpy(&num, packet->data+1, 4);
cout << "Packet with id " << num << " was delivered." << endl;
pendingACKs.erase(packet->guid);
peer->CloseConnection(packet->systemAddress, true);
break;
default:
cout << "Wrong packet. id " << (unsigned) packet->data[0] << " packet length " << packet->length << " from " << packet->systemAddress.ToString() << endl;
peer->CloseConnection(packet->systemAddress, true);
}
}
}
peer->Shutdown(1000);
RakPeerInterface::DestroyInstance(peer);
cout << "Server thread stopped" << endl;
}
void MasterServer::Start()
{
if (!run)
{
run = true;
tMasterThread = thread(&MasterServer::Thread, this);
cout << "Started" << endl;
}
}
void MasterServer::Stop(bool wait)
{
if (run)
{
run = false;
if (wait && tMasterThread.joinable())
tMasterThread.join();
}
}
bool MasterServer::isRunning()
{
return run;
}
void MasterServer::Wait()
{
if (run)
{
if (tMasterThread.joinable())
tMasterThread.join();
}
}
MasterServer::ServerMap *MasterServer::GetServers()
{
return &servers;
}

@ -0,0 +1,55 @@
//
// Created by koncord on 21.04.17.
//
#ifndef NEWMASTERPROTO_MASTERSERVER_HPP
#define NEWMASTERPROTO_MASTERSERVER_HPP
#include <thread>
#include <chrono>
#include <RakPeerInterface.h>
#include <components/openmw-mp/Master/MasterData.hpp>
class MasterServer
{
public:
struct Ban
{
RakNet::SystemAddress sa;
bool permanent;
struct Date
{
} date;
};
struct SServer : QueryData
{
std::chrono::steady_clock::time_point lastUpdate;
};
typedef std::map<RakNet::SystemAddress, SServer> ServerMap;
//typedef ServerMap::const_iterator ServerCIter;
typedef ServerMap::iterator ServerIter;
MasterServer(unsigned short maxConnections, unsigned short port);
~MasterServer();
void Start();
void Stop(bool wait = false);
bool isRunning();
void Wait();
ServerMap* GetServers();
private:
void Thread();
private:
std::thread tMasterThread;
RakNet::RakPeerInterface* peer;
RakNet::SocketDescriptor sockdescr;
ServerMap servers;
bool run;
std::map<RakNet::RakNetGUID, std::chrono::steady_clock::time_point> pendingACKs;
};
#endif //NEWMASTERPROTO_MASTERSERVER_HPP

@ -0,0 +1,192 @@
//
// Created by koncord on 13.05.17.
//
#include "RestServer.hpp"
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
using namespace std;
using namespace chrono;
using namespace boost::property_tree;
static string response201 = "HTTP/1.1 201 Created\r\nContent-Length: 7\r\n\r\nCreated";
static string response202 = "HTTP/1.1 202 Accepted\r\nContent-Length: 8\r\n\r\nAccepted";
static string response400 = "HTTP/1.1 400 Bad Request\r\nContent-Length: 11\r\n\r\nbad request";
inline void ResponseStr(HttpServer::Response &response, string content, string type = "", string code = "200 OK")
{
response << "HTTP/1.1 " << code << "\r\n";
if (!type.empty())
response << "Content-Type: " << type <<"\r\n";
response << "Content-Length: " << content.length() << "\r\n\r\n" << content;
}
inline void ptreeToServer(boost::property_tree::ptree &pt, MasterServer::SServer &server)
{
server.SetName(pt.get<string>("hostname").c_str());
server.SetGameMode(pt.get<string>("modname").c_str());
server.SetVersion(pt.get<string>("version").c_str());
server.SetPassword(pt.get<bool>("passw"));
//server.query_port = pt.get<unsigned short>("query_port");
server.SetPlayers(pt.get<unsigned>("players"));
server.SetMaxPlayers(pt.get<unsigned>("max_players"));
}
inline void queryToStringStream(stringstream &ss, string addr, MasterServer::SServer &query)
{
ss <<"\"" << addr << "\":{";
ss << "\"modname\": \"" << query.GetGameMode() << "\"" << ", ";
ss << "\"passw\": " << (query.GetPassword() ? "true" : "false") << ", ";
ss << "\"hostname\": \"" << query.GetName() << "\"" << ", ";
ss << "\"query_port\": " << 0 << ", ";
ss << "\"last_update\": " << duration_cast<seconds>(steady_clock::now() - query.lastUpdate).count() << ", ";
ss << "\"players\": " << query.GetPlayers() << ", ";
ss << "\"version\": \"" << query.GetVersion() << "\"" << ", ";
ss << "\"max_players\": " << query.GetMaxPlayers();
ss << "}";
}
RestServer::RestServer(unsigned short port, MasterServer::ServerMap *pMap) : serverMap(pMap)
{
httpServer.config.port = port;
}
void RestServer::start()
{
static const string ValidIpAddressRegex = "(?:[0-9]{1,3}\\.){3}[0-9]{1,3}";
static const string ValidPortRegex = "(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$";
static const string ServersRegex = "^/api/servers(?:/(" + ValidIpAddressRegex + "\\:" + ValidPortRegex + "))?";
httpServer.resource[ServersRegex]["GET"] = [this](auto response, auto request) {
if (request->path_match[1].length() > 0)
{
try
{
stringstream ss;
ss << "{";
auto addr = request->path_match[1].str();
auto port = (unsigned short)stoi(&(addr[addr.find(':')+1]));
queryToStringStream(ss, "server", serverMap->at(RakNet::SystemAddress(addr.c_str(), port)));
ss << "}";
ResponseStr(*response, ss.str(), "application/json");
}
catch(out_of_range e)
{
*response << response400;
}
}
else
{
static string str;
//if (updatedCache)
{
stringstream ss;
ss << "{";
ss << "\"list servers\":{";
for (auto query = serverMap->begin(); query != serverMap->end(); query++)
{
queryToStringStream(ss, query->first.ToString(true, ':'), query->second);
if (next(query) != serverMap->end())
ss << ", ";
}
ss << "}}";
ResponseStr(*response, ss.str(), "application/json");
updatedCache = false;
}
*response << str;
}
};
//Add query for < 0.6 servers
httpServer.resource[ServersRegex]["POST"] = [this](auto response, auto request) {
try
{
ptree pt;
read_json(request->content, pt);
MasterServer::SServer server;
ptreeToServer(pt, server);
unsigned short port = pt.get<unsigned short>("port");
server.lastUpdate = steady_clock::now();
serverMap->insert({RakNet::SystemAddress(request->remote_endpoint_address.c_str(), port), server});
updatedCache = true;
*response << response201;
}
catch (exception& e)
{
cout << e.what() << endl;
*response << response400;
}
};
//Update query for < 0.6 servers
httpServer.resource[ServersRegex]["PUT"] = [this](auto response, auto request) {
auto addr = request->path_match[1].str();
auto port = (unsigned short)stoi(&(addr[addr.find(':')+1]));
auto query = serverMap->find(RakNet::SystemAddress(request->remote_endpoint_address.c_str(), port));
if (query == serverMap->end())
{
cout << request->remote_endpoint_address + ": Trying to update a non-existent server or without permissions." << endl;
*response << response400;
return;
}
if (request->content.size() != 0)
{
try
{
ptree pt;
read_json(request->content, pt);
ptreeToServer(pt, query->second);
updatedCache = true;
}
catch(exception &e)
{
cout << e.what() << endl;
*response << response400;
}
}
query->second.lastUpdate = steady_clock::now();
*response << response202;
};
httpServer.resource["/api/servers/info"]["GET"] = [this](auto response, auto /*request*/) {
stringstream ss;
ss << '{';
ss << "\"servers\": " << serverMap->size();
unsigned int players = 0;
for (auto s : *serverMap)
players += s.second.GetPlayers();
ss << ", \"players\": " << players;
ss << "}";
ResponseStr(*response, ss.str(), "application/json");
};
httpServer.default_resource["GET"]=[](auto response, auto /*request*/) {
*response << response400;
};
httpServer.start();
}
void RestServer::cacheUpdated()
{
updatedCache = true;
}
void RestServer::stop()
{
httpServer.stop();
}

@ -0,0 +1,30 @@
//
// Created by koncord on 13.05.17.
//
#ifndef NEWRESTAPI_RESTSERVER_HPP
#define NEWRESTAPI_RESTSERVER_HPP
#include <string>
#include <unordered_map>
#include "MasterServer.hpp"
#include "SimpleWeb/http_server.hpp"
typedef SimpleWeb::Server<SimpleWeb::HTTP> HttpServer;
class RestServer
{
public:
RestServer(unsigned short port, MasterServer::ServerMap *pMap);
void start();
void stop();
void cacheUpdated();
private:
HttpServer httpServer;
MasterServer::ServerMap *serverMap;
bool updatedCache = true;
};
#endif //NEWRESTAPI_RESTSERVER_HPP

@ -0,0 +1,186 @@
//
// Created by koncord on 21.04.17.
//
#include <RakPeerInterface.h>
#include <RakSleep.h>
#include <BitStream.h>
#include <iostream>
#include <Kbhit.h>
#include <Gets.h>
#include <components/openmw-mp/Master/MasterData.hpp>
#include <components/openmw-mp/Master/PacketMasterAnnounce.hpp>
#include <components/openmw-mp/Master/PacketMasterUpdate.hpp>
#include <components/openmw-mp/Master/PacketMasterQuery.hpp>
#include <components/openmw-mp/NetworkMessages.hpp>
using namespace std;
using namespace RakNet;
using namespace mwmp;
int main()
{
cout << "Server test" << endl;
SystemAddress masterAddr("127.0.0.1", 25560);
RakPeerInterface *peer = RakNet::RakPeerInterface::GetInstance();
RakNet::SocketDescriptor sd(25565, 0);
peer->Startup(8, &sd, 1);
ConnectionAttemptResult result = peer->Connect(masterAddr.ToString(false), masterAddr.GetPort(), "pass",
(int)(strlen("pass")), 0, 0, 5, 500);
assert(result == RakNet::CONNECTION_ATTEMPT_STARTED);
char message[2048];
BitStream send;
PacketMasterQuery pmq(peer);
pmq.SetSendStream(&send);
PacketMasterAnnounce pma(peer);
pma.SetSendStream(&send);
while (true)
{
RakSleep(30);
if (kbhit())
{
Gets(message, sizeof(message));
if (strcmp(message, "quit") == 0)
{
puts("Quitting.");
break;
}
else if (strcmp(message, "send") == 0)
{
puts("Sending data about server");
QueryData server;
server.SetName("Super Server");
server.SetPlayers(0);
server.SetMaxPlayers(0);
pma.SetServer(&server);
pma.SetFunc(PacketMasterAnnounce::FUNCTION_ANNOUNCE);
pma.Send(masterAddr);
}
else if (strcmp(message, "get") == 0)
{
puts("Request query info");
send.Reset();
send.Write((unsigned char) (ID_MASTER_QUERY));
peer->Send(&send, HIGH_PRIORITY, RELIABLE_ORDERED, CHANNEL_MASTER, masterAddr, false);
}
else if (strcmp(message, "getme") == 0)
{
send.Reset();
send.Write((unsigned char) (ID_MASTER_UPDATE));
send.Write(SystemAddress("127.0.0.1", 25565));
peer->Send(&send, HIGH_PRIORITY, RELIABLE_ORDERED, CHANNEL_MASTER, masterAddr, false);
}
else if (strcmp(message, "status") == 0)
{
cout << (peer->GetConnectionState(masterAddr) == IS_CONNECTED ? "Connected" : "Not connected") << endl;
}
else if (strcmp(message, "keep") == 0)
{
cout << "Sending keep alive" << endl;
pma.SetFunc(PacketMasterAnnounce::FUNCTION_KEEP);
pma.Send(masterAddr);
}
}
for (RakNet::Packet *packet = peer->Receive(); packet; peer->DeallocatePacket(packet), packet = peer->Receive())
{
BitStream data(packet->data, packet->length, false);
unsigned char packetID;
data.Read(packetID);
switch (packetID)
{
case ID_DISCONNECTION_NOTIFICATION:
// Connection lost normally
printf("ID_DISCONNECTION_NOTIFICATION\n");
break;
case ID_ALREADY_CONNECTED:
// Connection lost normally
printf("ID_ALREADY_CONNECTED with guid %lu\n", packet->guid.g);
break;
case ID_INCOMPATIBLE_PROTOCOL_VERSION:
printf("ID_INCOMPATIBLE_PROTOCOL_VERSION\n");
break;
case ID_REMOTE_DISCONNECTION_NOTIFICATION: // Server telling the clients of another client disconnecting gracefully. You can manually broadcast this in a peer to peer enviroment if you want.
printf("ID_REMOTE_DISCONNECTION_NOTIFICATION\n");
break;
case ID_REMOTE_CONNECTION_LOST: // Server telling the clients of another client disconnecting forcefully. You can manually broadcast this in a peer to peer enviroment if you want.
printf("ID_REMOTE_CONNECTION_LOST\n");
break;
case ID_REMOTE_NEW_INCOMING_CONNECTION: // Server telling the clients of another client connecting. You can manually broadcast this in a peer to peer enviroment if you want.
printf("ID_REMOTE_NEW_INCOMING_CONNECTION\n");
break;
case ID_CONNECTION_BANNED: // Banned from this server
printf("We are banned from this server.\n");
break;
case ID_CONNECTION_ATTEMPT_FAILED:
printf("Connection attempt failed\n");
break;
case ID_NO_FREE_INCOMING_CONNECTIONS:
// Sorry, the server is full. I don't do anything here but
// A real app should tell the user
printf("ID_NO_FREE_INCOMING_CONNECTIONS\n");
break;
case ID_INVALID_PASSWORD:
printf("ID_INVALID_PASSWORD\n");
break;
case ID_CONNECTION_LOST:
// Couldn't deliver a reliable packet - i.e. the other system was abnormally
// terminated
printf("ID_CONNECTION_LOST\n");
return 0;
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
// This tells the client they have connected
printf("ID_CONNECTION_REQUEST_ACCEPTED to %s with GUID %s\n", packet->systemAddress.ToString(true),
packet->guid.ToString());
printf("My external address is %s\n", peer->GetExternalID(packet->systemAddress).ToString(true));
break;
case ID_MASTER_QUERY:
{
map<SystemAddress, QueryData> servers;
pmq.SetReadStream(&data);
pmq.SetServers(&servers);
pmq.Read();
cout << "Received query data about " << servers.size() << " servers" << endl;
for (auto serv : servers)
cout << serv.second.GetName() << endl;
break;
}
case ID_MASTER_UPDATE:
{
pair<SystemAddress, QueryData> serverPair;
PacketMasterUpdate pmu(peer);
pmu.SetReadStream(&data);
pmu.SetServer(&serverPair);
pmu.Read();
cout << "Received info about " << serverPair.first.ToString() << endl;
cout << serverPair.second.GetName() << endl;
break;
}
default:
cout << "Wrong packet" << endl;
}
}
}
peer->Shutdown(1000);
RakPeerInterface::DestroyInstance(peer);
}

@ -0,0 +1,511 @@
#ifndef BASE_SERVER_HPP
#define BASE_SERVER_HPP
#include <boost/asio.hpp>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/functional/hash.hpp>
#include <map>
#include <unordered_map>
#include <thread>
#include <functional>
#include <iostream>
#include <sstream>
#include <regex>
#ifndef CASE_INSENSITIVE_EQUALS_AND_HASH
#define CASE_INSENSITIVE_EQUALS_AND_HASH
//Based on http://www.boost.org/doc/libs/1_60_0/doc/html/unordered/hash_equality.html
struct case_insensitive_equals
{
bool operator()(const std::string &key1, const std::string &key2) const
{
return boost::algorithm::iequals(key1, key2);
}
};
struct case_insensitive_hash
{
size_t operator()(const std::string &key) const
{
std::size_t seed = 0;
for (auto &c: key)
boost::hash_combine(seed, std::tolower(c));
return seed;
}
};
#endif
namespace SimpleWeb
{
template<class socket_type>
class Server;
template<class socket_type>
class ServerBase
{
public:
virtual ~ServerBase()
{}
class Response : public std::ostream
{
friend class ServerBase<socket_type>;
boost::asio::streambuf streambuf;
std::shared_ptr<socket_type> socket;
Response(const std::shared_ptr<socket_type> &socket) : std::ostream(&streambuf), socket(socket)
{}
public:
size_t size()
{
return streambuf.size();
}
/// If true, force server to close the connection after the response have been sent.
///
/// This is useful when implementing a HTTP/1.0-server sending content
/// without specifying the content length.
bool close_connection_after_response = false;
};
class Content : public std::istream
{
friend class ServerBase<socket_type>;
public:
size_t size()
{
return streambuf.size();
}
std::string string()
{
std::stringstream ss;
ss << rdbuf();
return ss.str();
}
private:
boost::asio::streambuf &streambuf;
Content(boost::asio::streambuf &streambuf) : std::istream(&streambuf), streambuf(streambuf)
{}
};
class Request
{
friend class ServerBase<socket_type>;
friend class Server<socket_type>;
public:
std::string method, path, http_version;
Content content;
std::unordered_multimap<std::string, std::string, case_insensitive_hash, case_insensitive_equals> header;
std::smatch path_match;
std::string remote_endpoint_address;
unsigned short remote_endpoint_port;
private:
Request(const socket_type &socket) : content(streambuf)
{
try
{
remote_endpoint_address = socket.lowest_layer().remote_endpoint().address().to_string();
remote_endpoint_port = socket.lowest_layer().remote_endpoint().port();
}
catch (...)
{}
}
boost::asio::streambuf streambuf;
};
class Config
{
friend class ServerBase<socket_type>;
Config(unsigned short port) : port(port)
{}
public:
/// Port number to use. Defaults to 80 for HTTP and 443 for HTTPS.
unsigned short port;
/// Number of threads that the server will use when start() is called. Defaults to 1 thread.
size_t thread_pool_size = 1;
/// Timeout on request handling. Defaults to 5 seconds.
size_t timeout_request = 5;
/// Timeout on content handling. Defaults to 300 seconds.
size_t timeout_content = 300;
/// IPv4 address in dotted decimal form or IPv6 address in hexadecimal notation.
/// If empty, the address will be any address.
std::string address;
/// Set to false to avoid binding the socket to an address that is already in use. Defaults to true.
bool reuse_address = true;
};
///Set before calling start().
Config config;
private:
class regex_orderable : public std::regex
{
std::string str;
public:
regex_orderable(const char *regex_cstr) : std::regex(regex_cstr), str(regex_cstr)
{}
regex_orderable(const std::string &regex_str) : std::regex(regex_str), str(regex_str)
{}
bool operator<(const regex_orderable &rhs) const
{
return str < rhs.str;
}
};
public:
/// Warning: do not add or remove resources after start() is called
std::map<regex_orderable, std::map<std::string,
std::function<void(std::shared_ptr<typename ServerBase<socket_type>::Response>,
std::shared_ptr<typename ServerBase<socket_type>::Request>)>>>
resource;
std::map<std::string,
std::function<void(std::shared_ptr<typename ServerBase<socket_type>::Response>,
std::shared_ptr<typename ServerBase<socket_type>::Request>)>> default_resource;
std::function<
void(std::shared_ptr<typename ServerBase<socket_type>::Request>,
const boost::system::error_code &)>
on_error;
std::function<void(std::shared_ptr<socket_type> socket,
std::shared_ptr<typename ServerBase<socket_type>::Request>)> on_upgrade;
virtual void start()
{
if (!io_service)
io_service = std::make_shared<boost::asio::io_service>();
if (io_service->stopped())
io_service->reset();
boost::asio::ip::tcp::endpoint endpoint;
if (config.address.size() > 0)
endpoint = boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(config.address),
config.port);
else
endpoint = boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), config.port);
if (!acceptor)
acceptor = std::unique_ptr<boost::asio::ip::tcp::acceptor>(
new boost::asio::ip::tcp::acceptor(*io_service));
acceptor->open(endpoint.protocol());
acceptor->set_option(boost::asio::socket_base::reuse_address(config.reuse_address));
acceptor->bind(endpoint);
acceptor->listen();
accept();
//If thread_pool_size>1, start m_io_service.run() in (thread_pool_size-1) threads for thread-pooling
threads.clear();
for (size_t c = 1; c < config.thread_pool_size; c++)
{
threads.emplace_back([this]()
{
io_service->run();
});
}
//Main thread
if (config.thread_pool_size > 0)
io_service->run();
//Wait for the rest of the threads, if any, to finish as well
for (auto &t: threads)
{
t.join();
}
}
void stop()
{
acceptor->close();
if (config.thread_pool_size > 0)
io_service->stop();
}
///Use this function if you need to recursively send parts of a longer message
void send(const std::shared_ptr<Response> &response,
const std::function<void(const boost::system::error_code &)> &callback = nullptr) const
{
boost::asio::async_write(*response->socket, response->streambuf, [this, response, callback]
(const boost::system::error_code &ec, size_t /*bytes_transferred*/)
{
if (callback)
callback(ec);
});
}
/// If you have your own boost::asio::io_service, store its pointer here before running start().
/// You might also want to set config.thread_pool_size to 0.
std::shared_ptr<boost::asio::io_service> io_service;
protected:
std::unique_ptr<boost::asio::ip::tcp::acceptor> acceptor;
std::vector<std::thread> threads;
ServerBase(unsigned short port) : config(port)
{}
virtual void accept()=0;
std::shared_ptr<boost::asio::deadline_timer>
get_timeout_timer(const std::shared_ptr<socket_type> &socket, long seconds)
{
if (seconds == 0)
return nullptr;
auto timer = std::make_shared<boost::asio::deadline_timer>(*io_service);
timer->expires_from_now(boost::posix_time::seconds(seconds));
timer->async_wait([socket](const boost::system::error_code &ec)
{
if (!ec)
{
boost::system::error_code ec;
socket->lowest_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
socket->lowest_layer().close();
}
});
return timer;
}
void read_request_and_content(const std::shared_ptr<socket_type> &socket)
{
//Create new streambuf (Request::streambuf) for async_read_until()
//shared_ptr is used to pass temporary objects to the asynchronous functions
std::shared_ptr<Request> request(new Request(*socket));
//Set timeout on the following boost::asio::async-read or write function
auto timer = this->get_timeout_timer(socket, config.timeout_request);
boost::asio::async_read_until(*socket, request->streambuf, "\r\n\r\n", [this, socket, request, timer]
(const boost::system::error_code &ec,
size_t bytes_transferred)
{
if (timer)
timer->cancel();
if (!ec)
{
//request->streambuf.size() is not necessarily the same as bytes_transferred, from Boost-docs:
//"After a successful async_read_until operation, the streambuf may contain additional data beyond the delimiter"
//The chosen solution is to extract lines from the stream directly when parsing the header. What is left of the
//streambuf (maybe some bytes of the content) is appended to in the async_read-function below (for retrieving content).
size_t num_additional_bytes =
request->streambuf.size() - bytes_transferred;
if (!this->parse_request(request))
return;
//If content, read that as well
auto it = request->header.find("Content-Length");
if (it != request->header.end())
{
unsigned long long content_length;
try
{
content_length = stoull(it->second);
}
catch (const std::exception &e)
{
if (on_error)
on_error(request, boost::system::error_code(
boost::system::errc::protocol_error,
boost::system::generic_category()));
return;
}
if (content_length > num_additional_bytes)
{
//Set timeout on the following boost::asio::async-read or write function
auto timer = this->get_timeout_timer(socket,
config.timeout_content);
boost::asio::async_read(*socket, request->streambuf,
boost::asio::transfer_exactly(
content_length -
num_additional_bytes),
[this, socket, request, timer]
(const boost::system::error_code &ec,
size_t /*bytes_transferred*/)
{
if (timer)
timer->cancel();
if (!ec)
this->find_resource(socket,
request);
else if (on_error)
on_error(request, ec);
});
}
else
this->find_resource(socket, request);
}
else
this->find_resource(socket, request);
}
else if (on_error)
on_error(request, ec);
});
}
bool parse_request(const std::shared_ptr<Request> &request) const
{
std::string line;
getline(request->content, line);
size_t method_end;
if ((method_end = line.find(' ')) != std::string::npos)
{
size_t path_end;
if ((path_end = line.find(' ', method_end + 1)) != std::string::npos)
{
request->method = line.substr(0, method_end);
request->path = line.substr(method_end + 1, path_end - method_end - 1);
size_t protocol_end;
if ((protocol_end = line.find('/', path_end + 1)) != std::string::npos)
{
if (line.compare(path_end + 1, protocol_end - path_end - 1, "HTTP") != 0)
return false;
request->http_version = line.substr(protocol_end + 1, line.size() - protocol_end - 2);
}
else
return false;
getline(request->content, line);
size_t param_end;
while ((param_end = line.find(':')) != std::string::npos)
{
size_t value_start = param_end + 1;
if ((value_start) < line.size())
{
if (line[value_start] == ' ')
value_start++;
if (value_start < line.size())
request->header.emplace(line.substr(0, param_end),
line.substr(value_start, line.size() - value_start - 1));
}
getline(request->content, line);
}
}
else
return false;
}
else
return false;
return true;
}
void find_resource(const std::shared_ptr<socket_type> &socket, const std::shared_ptr<Request> &request)
{
//Upgrade connection
if (on_upgrade)
{
auto it = request->header.find("Upgrade");
if (it != request->header.end())
{
on_upgrade(socket, request);
return;
}
}
//Find path- and method-match, and call write_response
for (auto &regex_method: resource)
{
auto it = regex_method.second.find(request->method);
if (it != regex_method.second.end())
{
std::smatch sm_res;
if (std::regex_match(request->path, sm_res, regex_method.first))
{
request->path_match = std::move(sm_res);
write_response(socket, request, it->second);
return;
}
}
}
auto it = default_resource.find(request->method);
if (it != default_resource.end())
{
write_response(socket, request, it->second);
}
}
void write_response(const std::shared_ptr<socket_type> &socket, const std::shared_ptr<Request> &request,
std::function<void(std::shared_ptr<typename ServerBase<socket_type>::Response>,
std::shared_ptr<
typename ServerBase<socket_type>::Request>)> &resource_function)
{
//Set timeout on the following boost::asio::async-read or write function
auto timer = this->get_timeout_timer(socket, config.timeout_content);
auto response = std::shared_ptr<Response>(new Response(socket), [this, request, timer]
(Response *response_ptr)
{
auto response = std::shared_ptr<Response>(response_ptr);
this->send(response, [this, response, request, timer](
const boost::system::error_code &ec)
{
if (timer)
timer->cancel();
if (!ec)
{
if (response->close_connection_after_response)
return;
auto range = request->header.equal_range(
"Connection");
for (auto it = range.first; it != range.second; it++)
{
if (boost::iequals(it->second, "close"))
{
return;
}
else if (boost::iequals(it->second, "keep-alive"))
{
this->read_request_and_content(
response->socket);
return;
}
}
if (request->http_version >= "1.1")
this->read_request_and_content(response->socket);
}
else if (on_error)
on_error(request, ec);
});
});
try
{
resource_function(response, request);
}
catch (const std::exception &e)
{
if (on_error)
on_error(request, boost::system::error_code(boost::system::errc::operation_canceled,
boost::system::generic_category()));
return;
}
}
};
}
#endif //BASE_SERVER_HPP

@ -0,0 +1,55 @@
/*
* https://github.com/eidheim/Simple-Web-Server/
*
* The MIT License (MIT)
* Copyright (c) 2014-2016 Ole Christian Eidheim
*/
#ifndef SERVER_HTTP_HPP
#define SERVER_HTTP_HPP
#include "base_server.hpp"
namespace SimpleWeb
{
template<class socket_type>
class Server : public ServerBase<socket_type> {};
typedef boost::asio::ip::tcp::socket HTTP;
template<>
class Server<HTTP> : public ServerBase<HTTP>
{
public:
Server() : ServerBase<HTTP>::ServerBase(80)
{}
protected:
virtual void accept()
{
//Create new socket for this connection
//Shared_ptr is used to pass temporary objects to the asynchronous functions
auto socket = std::make_shared<HTTP>(*io_service);
acceptor->async_accept(*socket, [this, socket](const boost::system::error_code &ec)
{
//Immediately start accepting a new connection (if io_service hasn't been stopped)
if (ec != boost::asio::error::operation_aborted)
accept();
if (!ec)
{
boost::asio::ip::tcp::no_delay option(true);
socket->set_option(option);
this->read_request_and_content(socket);
}
else if (on_error)
on_error(std::shared_ptr<Request>(new Request(*socket)), ec);
});
}
};
}
#endif //SERVER_HTTP_HPP

@ -0,0 +1,91 @@
#ifndef HTTPS_SERVER_HPP
#define HTTPS_SERVER_HPP
#include "base_server.hpp"
#include <boost/asio/ssl.hpp>
#include <openssl/ssl.h>
#include <algorithm>
namespace SimpleWeb
{
typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> HTTPS;
template<>
class Server<HTTPS> : public ServerBase<HTTPS>
{
std::string session_id_context;
bool set_session_id_context = false;
public:
Server(const std::string &cert_file, const std::string &private_key_file,
const std::string &verify_file = std::string()) : ServerBase<HTTPS>::ServerBase(443),
context(boost::asio::ssl::context::tlsv12)
{
context.use_certificate_chain_file(cert_file);
context.use_private_key_file(private_key_file, boost::asio::ssl::context::pem);
if (verify_file.size() > 0)
{
context.load_verify_file(verify_file);
context.set_verify_mode(boost::asio::ssl::verify_peer | boost::asio::ssl::verify_fail_if_no_peer_cert |
boost::asio::ssl::verify_client_once);
set_session_id_context = true;
}
}
void start()
{
if (set_session_id_context)
{
// Creating session_id_context from address:port but reversed due to small SSL_MAX_SSL_SESSION_ID_LENGTH
session_id_context = std::to_string(config.port) + ':';
session_id_context.append(config.address.rbegin(), config.address.rend());
SSL_CTX_set_session_id_context(context.native_handle(),
reinterpret_cast<const unsigned char *>(session_id_context.data()),
std::min<size_t>(session_id_context.size(),
SSL_MAX_SSL_SESSION_ID_LENGTH));
}
ServerBase::start();
}
protected:
boost::asio::ssl::context context;
virtual void accept()
{
//Create new socket for this connection
//Shared_ptr is used to pass temporary objects to the asynchronous functions
auto socket = std::make_shared<HTTPS>(*io_service, context);
acceptor->async_accept((*socket).lowest_layer(), [this, socket](const boost::system::error_code &ec)
{
//Immediately start accepting a new connection (if io_service hasn't been stopped)
if (ec != boost::asio::error::operation_aborted)
accept();
if (!ec)
{
boost::asio::ip::tcp::no_delay option(true);
socket->lowest_layer().set_option(option);
//Set timeout on the following boost::asio::ssl::stream::async_handshake
auto timer = get_timeout_timer(socket, config.timeout_request);
socket->async_handshake(boost::asio::ssl::stream_base::server, [this, socket, timer]
(const boost::system::error_code &ec)
{
if (timer)
timer->cancel();
if (!ec)
read_request_and_content(socket);
else if (on_error)
on_error(std::shared_ptr<Request>(new Request(*socket)), ec);
});
}
else if (on_error)
on_error(std::shared_ptr<Request>(new Request(*socket)), ec);
});
}
};
}
#endif //HTTPS_SERVER_HPP

@ -0,0 +1,37 @@
#include <iostream>
#include <Kbhit.h>
#include <RakSleep.h>
#include "MasterServer.hpp"
#include "RestServer.hpp"
using namespace RakNet;
using namespace std;
unique_ptr<RestServer> restServer;
unique_ptr<MasterServer> masterServer;
bool run = true;
int main()
{
masterServer.reset(new MasterServer(2000, 25560));
restServer.reset(new RestServer(8080, masterServer->GetServers()));
auto onExit = [](int /*sig*/){
restServer->stop();
masterServer->Stop(false);
masterServer->Wait();
run = false;
};
signal(SIGINT, onExit);
signal(SIGTERM, onExit);
masterServer->Start();
thread server_thread([]() { restServer->start(); });
server_thread.join();
masterServer->Wait();
return 0;
}

@ -9,7 +9,7 @@ set(MWINIIMPORT_HEADER
source_group(launcher FILES ${MWINIIMPORT} ${MWINIIMPORT_HEADER})
add_executable(openmw-iniimporter
openmw_add_executable(openmw-iniimporter
${MWINIIMPORT}
)

@ -1,17 +1,13 @@
#include "importer.hpp"
#include <ctime>
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <sstream>
#include <components/misc/stringops.hpp>
#include <components/esm/esmreader.hpp>
#include <boost/version.hpp>
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/version.hpp>
namespace bfs = boost::filesystem;
@ -658,12 +654,6 @@ void MwIniImporter::setVerbose(bool verbose) {
mVerbose = verbose;
}
std::string MwIniImporter::numberToString(int n) {
std::stringstream str;
str << n;
return str.str();
}
MwIniImporter::multistrmap MwIniImporter::loadIniFile(const boost::filesystem::path& filename) const {
std::cout << "load ini file: " << filename << std::endl;
@ -805,7 +795,7 @@ void MwIniImporter::importArchives(multistrmap &cfg, const multistrmap &ini) con
multistrmap::const_iterator it = ini.begin();
for(int i=0; it != ini.end(); i++) {
archive = baseArchive;
archive.append(this->numberToString(i));
archive.append(std::to_string(i));
it = ini.find(archive);
if(it == ini.end()) {
@ -829,33 +819,104 @@ void MwIniImporter::importArchives(multistrmap &cfg, const multistrmap &ini) con
}
}
void MwIniImporter::importGameFiles(multistrmap &cfg, const multistrmap &ini, const boost::filesystem::path& iniFilename) const {
std::vector<std::pair<std::time_t, std::string> > contentFiles;
void MwIniImporter::dependencySortStep(std::string& element, MwIniImporter::dependencyList& source, std::vector<std::string>& result)
{
auto iter = std::find_if(
source.begin(),
source.end(),
[&element](std::pair< std::string, std::vector<std::string> >& sourceElement)
{
return sourceElement.first == element;
}
);
if (iter != source.end())
{
auto foundElement = std::move(*iter);
source.erase(iter);
for (auto name : foundElement.second)
{
MwIniImporter::dependencySortStep(name, source, result);
}
result.push_back(std::move(foundElement.first));
}
}
std::vector<std::string> MwIniImporter::dependencySort(MwIniImporter::dependencyList source)
{
std::vector<std::string> result;
while (!source.empty())
{
MwIniImporter::dependencySortStep(source.begin()->first, source, result);
}
return result;
}
std::vector<std::string>::iterator MwIniImporter::findString(std::vector<std::string>& source, const std::string& string)
{
return std::find_if(source.begin(), source.end(), [&string](const std::string& sourceString)
{
return Misc::StringUtils::ciEqual(sourceString, string);
});
}
void MwIniImporter::addPaths(std::vector<boost::filesystem::path>& output, std::vector<std::string> input) {
for (auto& path : input) {
if (path.front() == '"')
{
path.erase(path.begin());
path.erase(path.end() - 1);
}
output.emplace_back(path);
}
}
void MwIniImporter::importGameFiles(multistrmap &cfg, const multistrmap &ini, const boost::filesystem::path& iniFilename) const
{
std::vector<std::pair<std::time_t, boost::filesystem::path>> contentFiles;
std::string baseGameFile("Game Files:GameFile");
std::string gameFile("");
std::time_t defaultTime = 0;
ToUTF8::Utf8Encoder encoder(mEncoding);
// assume the Game Files are all in a "Data Files" directory under the directory holding Morrowind.ini
const boost::filesystem::path gameFilesDir(iniFilename.parent_path() /= "Data Files");
std::vector<boost::filesystem::path> dataPaths;
if (cfg.count("data"))
addPaths(dataPaths, cfg["data"]);
if (cfg.count("data-local"))
addPaths(dataPaths, cfg["data-local"]);
dataPaths.push_back(iniFilename.parent_path() /= "Data Files");
multistrmap::const_iterator it = ini.begin();
for(int i=0; it != ini.end(); i++) {
gameFile = baseGameFile;
gameFile.append(this->numberToString(i));
for (int i=0; it != ini.end(); i++)
{
std::string gameFile = baseGameFile;
gameFile.append(std::to_string(i));
it = ini.find(gameFile);
if(it == ini.end()) {
if(it == ini.end())
break;
}
for(std::vector<std::string>::const_iterator entry = it->second.begin(); entry!=it->second.end(); ++entry) {
for(std::vector<std::string>::const_iterator entry = it->second.begin(); entry!=it->second.end(); ++entry)
{
std::string filetype(entry->substr(entry->length()-3));
Misc::StringUtils::lowerCaseInPlace(filetype);
if(filetype.compare("esm") == 0 || filetype.compare("esp") == 0) {
boost::filesystem::path filepath(gameFilesDir);
filepath /= *entry;
contentFiles.push_back(std::make_pair(lastWriteTime(filepath, defaultTime), *entry));
if(filetype.compare("esm") == 0 || filetype.compare("esp") == 0)
{
bool found = false;
for (auto & dataPath : dataPaths)
{
boost::filesystem::path path = dataPath / *entry;
std::time_t time = lastWriteTime(path, defaultTime);
if (time != defaultTime)
{
contentFiles.push_back({time, path});
found = true;
break;
}
}
if (!found)
std::cout << "Warning: " << *entry << " not found, ignoring" << std::endl;
}
}
}
@ -863,11 +924,46 @@ void MwIniImporter::importGameFiles(multistrmap &cfg, const multistrmap &ini, co
cfg.erase("content");
cfg.insert( std::make_pair("content", std::vector<std::string>() ) );
// this will sort files by time order first, then alphabetical (maybe), I suspect non ASCII filenames will be stuffed.
// sort by timestamp
sort(contentFiles.begin(), contentFiles.end());
for(std::vector<std::pair<std::time_t, std::string> >::const_iterator iter=contentFiles.begin(); iter!=contentFiles.end(); ++iter) {
cfg["content"].push_back(iter->second);
MwIniImporter::dependencyList unsortedFiles;
ESM::ESMReader reader;
reader.setEncoder(&encoder);
for (auto& file : contentFiles)
{
reader.open(file.second.string());
std::vector<std::string> dependencies;
for (auto& gameFile : reader.getGameFiles())
{
dependencies.push_back(gameFile.name);
}
unsortedFiles.emplace_back(boost::filesystem::path(reader.getName()).filename().string(), dependencies);
reader.close();
}
auto sortedFiles = dependencySort(unsortedFiles);
// hard-coded dependency Morrowind - Tribunal - Bloodmoon
if(findString(sortedFiles, "Morrowind.esm") != sortedFiles.end())
{
auto tribunalIter = findString(sortedFiles, "Tribunal.esm");
auto bloodmoonIter = findString(sortedFiles, "Bloodmoon.esm");
if (bloodmoonIter != sortedFiles.end() && tribunalIter != sortedFiles.end())
{
size_t bloodmoonIndex = std::distance(sortedFiles.begin(), bloodmoonIter);
size_t tribunalIndex = std::distance(sortedFiles.begin(), tribunalIter);
if (bloodmoonIndex < tribunalIndex)
tribunalIndex++;
sortedFiles.insert(bloodmoonIter, *tribunalIter);
sortedFiles.erase(sortedFiles.begin() + tribunalIndex);
}
}
for (auto& file : sortedFiles)
cfg["content"].push_back(file);
}
void MwIniImporter::writeToFile(std::ostream &out, const multistrmap &cfg) {
@ -906,9 +1002,5 @@ std::time_t MwIniImporter::lastWriteTime(const boost::filesystem::path& filename
std::cout << "content file: " << resolved << " timestamp = (" << writeTime <<
") " << timeStrBuffer << std::endl;
}
else
{
std::cout << "content file: " << filename << " not found" << std::endl;
}
return writeTime;
}

@ -14,6 +14,7 @@ class MwIniImporter {
public:
typedef std::map<std::string, std::string> strmap;
typedef std::map<std::string, std::vector<std::string> > multistrmap;
typedef std::vector< std::pair< std::string, std::vector<std::string> > > dependencyList;
MwIniImporter();
void setInputEncoding(const ToUTF8::FromType& encoding);
@ -22,14 +23,19 @@ class MwIniImporter {
static multistrmap loadCfgFile(const boost::filesystem::path& filename);
void merge(multistrmap &cfg, const multistrmap &ini) const;
void mergeFallback(multistrmap &cfg, const multistrmap &ini) const;
void importGameFiles(multistrmap &cfg, const multistrmap &ini,
void importGameFiles(multistrmap &cfg, const multistrmap &ini,
const boost::filesystem::path& iniFilename) const;
void importArchives(multistrmap &cfg, const multistrmap &ini) const;
static void writeToFile(std::ostream &out, const multistrmap &cfg);
static std::vector<std::string> dependencySort(MwIniImporter::dependencyList source);
private:
static void dependencySortStep(std::string& element, MwIniImporter::dependencyList& source, std::vector<std::string>& result);
static std::vector<std::string>::iterator findString(std::vector<std::string>& source, const std::string& string);
static void insertMultistrmap(multistrmap &cfg, const std::string& key, const std::string& value);
static std::string numberToString(int n);
static void addPaths(std::vector<boost::filesystem::path>& output, std::vector<std::string> input);
/// \return file's "last modified time", used in original MW to determine plug-in load order
static std::time_t lastWriteTime(const boost::filesystem::path& filename, std::time_t defaultTime);
@ -40,5 +46,4 @@ class MwIniImporter {
ToUTF8::FromType mEncoding;
};
#endif

@ -1,11 +1,9 @@
#include "importer.hpp"
#include <string>
#include <iostream>
#include <boost/program_options.hpp>
#include <boost/filesystem.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/fstream.hpp>
namespace bpo = boost::program_options;

@ -4,7 +4,7 @@ set(NIFTEST
source_group(components\\nif\\tests FILES ${NIFTEST})
# Main executable
add_executable(niftest
openmw_add_executable(niftest
${NIFTEST}
)

@ -33,12 +33,12 @@ bool hasExtension(std::string filename, std::string extensionToFind)
}
///See if the file has the "nif" extension.
bool isNIF(std::string filename)
bool isNIF(const std::string & filename)
{
return hasExtension(filename,"nif");
}
///See if the file has the "bsa" extension.
bool isBSA(std::string filename)
bool isBSA(const std::string & filename)
{
return hasExtension(filename,"bsa");
}

@ -18,7 +18,7 @@ opencs_hdrs_noqt (model/doc
opencs_units (model/world
idtable idtableproxymodel regionmap data commanddispatcher idtablebase resourcetable nestedtableproxymodel idtree infotableproxymodel
idtable idtableproxymodel regionmap data commanddispatcher idtablebase resourcetable nestedtableproxymodel idtree infotableproxymodel landtexturetableproxymodel
)
@ -70,6 +70,7 @@ opencs_units (view/world
cellcreator pathgridcreator referenceablecreator startscriptcreator referencecreator scenesubview
infocreator scriptedit dialoguesubview previewsubview regionmap dragrecordtable nestedtable
dialoguespinbox recordbuttonbar tableeditidaction scripterrortable extendedcommandconfigurator
bodypartcreator landtexturecreator landcreator
)
opencs_units_noqt (view/world
@ -80,14 +81,14 @@ opencs_units_noqt (view/world
opencs_units (view/widget
scenetoolbar scenetool scenetoolmode pushbutton scenetooltoggle scenetoolrun modebutton
scenetooltoggle2 completerpopup coloreditor colorpickerpopup droplineedit
scenetooltoggle2 scenetooltexturebrush completerpopup coloreditor colorpickerpopup droplineedit
)
opencs_units (view/render
scenewidget worldspacewidget pagedworldspacewidget unpagedworldspacewidget
previewwidget editmode instancemode instanceselectionmode instancemovemode
orbitcameramode pathgridmode selectionmode pathgridselectionmode cameracontroller
cellwater
cellwater terraintexturemode
)
opencs_units_noqt (view/render
@ -109,7 +110,7 @@ opencs_units_noqt (view/tools
)
opencs_units (view/prefs
dialogue pagebase page keybindingpage
dialogue pagebase page keybindingpage contextmenulist
)
opencs_units (model/prefs
@ -173,7 +174,7 @@ else()
set (OPENCS_OPENMW_CFG "")
endif(APPLE)
add_executable(openmw-cs
openmw_add_executable(openmw-cs
MACOSX_BUNDLE
${OPENCS_SRC}
${OPENCS_UI_HDR}
@ -198,7 +199,7 @@ if(APPLE)
RUNTIME_OUTPUT_DIRECTORY "${OpenMW_BINARY_DIR}"
OUTPUT_NAME ${OPENCS_BUNDLE_NAME}
MACOSX_BUNDLE_ICON_FILE "openmw-cs.icns"
MACOSX_BUNDLE_BUNDLE_NAME "OpenCS"
MACOSX_BUNDLE_BUNDLE_NAME "OpenMW-CS"
MACOSX_BUNDLE_GUI_IDENTIFIER "org.openmw.opencs"
MACOSX_BUNDLE_SHORT_VERSION_STRING ${OPENMW_VERSION}
MACOSX_BUNDLE_BUNDLE_VERSION ${OPENMW_VERSION}
@ -245,13 +246,14 @@ if (DESIRED_QT_VERSION MATCHES 4)
target_link_libraries(openmw-cs ${QT_QTMAIN_LIBRARY})
endif()
else()
qt5_use_modules(openmw-cs Widgets Core Network OpenGL)
target_link_libraries(openmw-cs Qt5::Widgets Qt5::Core Qt5::Network Qt5::OpenGL)
endif()
if (WIN32)
target_link_libraries(openmw-cs ${Boost_LOCALE_LIBRARY})
INSTALL(TARGETS openmw-cs RUNTIME DESTINATION ".")
INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw-cs.cfg" DESTINATION ".")
INSTALL(FILES "${OpenMW_BINARY_DIR}/Debug/openmw-cs.cfg" DESTINATION "." CONFIGURATIONS Debug)
INSTALL(FILES "${OpenMW_BINARY_DIR}/Release/openmw-cs.cfg" DESTINATION "." CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel)
endif()
if (MSVC)

@ -5,8 +5,8 @@
#include <QLocalSocket>
#include <QMessageBox>
#include <components/vfs/manager.hpp>
#include <components/vfs/registerarchives.hpp>
#include <components/crashcatcher/crashcatcher.hpp>
#include <components/fallback/validate.hpp>
@ -21,23 +21,23 @@
using namespace Fallback;
CS::Editor::Editor ()
CS::Editor::Editor (int argc, char **argv)
: mSettingsState (mCfgMgr), mDocumentManager (mCfgMgr),
mViewManager (mDocumentManager), mPid(""),
mLock(), mMerge (mDocumentManager),
mIpcServerName ("org.openmw.OpenCS"), mServer(NULL), mClientSocket(NULL)
{
{
// install the crash handler as soon as possible. note that the log path
// does not depend on config being read.
crashCatcherInstall(argc, argv, (mCfgMgr.getLogPath() / "openmw-cs-crash.log").string());
std::pair<Files::PathContainer, std::vector<std::string> > config = readConfig();
setupDataFiles (config.first);
NifOsg::Loader::setShowMarkers(true);
mVFS.reset(new VFS::Manager(mFsStrict));
VFS::registerArchives(mVFS.get(), Files::Collections(config.first, !mFsStrict), config.second, true);
mDocumentManager.setVFS(mVFS.get());
mDocumentManager.setFileData(mFsStrict, config.first, config.second);
mNewGame.setLocalData (mLocal);
mFileDialog.setLocalData (mLocal);
@ -97,16 +97,16 @@ std::pair<Files::PathContainer, std::vector<std::string> > CS::Editor::readConfi
boost::program_options::options_description desc("Syntax: openmw-cs <options>\nAllowed options");
desc.add_options()
("data", boost::program_options::value<Files::PathContainer>()->default_value(Files::PathContainer(), "data")->multitoken()->composing())
("data-local", boost::program_options::value<std::string>()->default_value(""))
("data", boost::program_options::value<Files::EscapePathContainer>()->default_value(Files::EscapePathContainer(), "data")->multitoken()->composing())
("data-local", boost::program_options::value<Files::EscapeHashString>()->default_value(""))
("fs-strict", boost::program_options::value<bool>()->implicit_value(true)->default_value(false))
("encoding", boost::program_options::value<std::string>()->default_value("win1252"))
("resources", boost::program_options::value<std::string>()->default_value("resources"))
("fallback-archive", boost::program_options::value<std::vector<std::string> >()->
default_value(std::vector<std::string>(), "fallback-archive")->multitoken())
("encoding", boost::program_options::value<Files::EscapeHashString>()->default_value("win1252"))
("resources", boost::program_options::value<Files::EscapeHashString>()->default_value("resources"))
("fallback-archive", boost::program_options::value<Files::EscapeStringVector>()->
default_value(Files::EscapeStringVector(), "fallback-archive")->multitoken())
("fallback", boost::program_options::value<FallbackMap>()->default_value(FallbackMap(), "")
->multitoken()->composing(), "fallback values")
("script-blacklist", boost::program_options::value<std::vector<std::string> >()->default_value(std::vector<std::string>(), "")
("script-blacklist", boost::program_options::value<Files::EscapeStringVector>()->default_value(Files::EscapeStringVector(), "")
->multitoken(), "exclude specified script from the verifier (if the use of the blacklist is enabled)")
("script-blacklist-use", boost::program_options::value<bool>()->implicit_value(true)
->default_value(true), "enable script blacklisting");
@ -116,25 +116,29 @@ std::pair<Files::PathContainer, std::vector<std::string> > CS::Editor::readConfi
mCfgMgr.readConfiguration(variables, desc, quiet);
mDocumentManager.setEncoding (
ToUTF8::calculateEncoding (variables["encoding"].as<std::string>()));
ToUTF8::calculateEncoding (variables["encoding"].as<Files::EscapeHashString>().toStdString()));
mDocumentManager.setResourceDir (mResources = variables["resources"].as<std::string>());
mDocumentManager.setResourceDir (mResources = variables["resources"].as<Files::EscapeHashString>().toStdString());
mDocumentManager.setFallbackMap (variables["fallback"].as<FallbackMap>().mMap);
if (variables["script-blacklist-use"].as<bool>())
mDocumentManager.setBlacklistedScripts (
variables["script-blacklist"].as<std::vector<std::string> >());
variables["script-blacklist"].as<Files::EscapeStringVector>().toStdStringVector());
mFsStrict = variables["fs-strict"].as<bool>();
Files::PathContainer dataDirs, dataLocal;
if (!variables["data"].empty()) {
dataDirs = Files::PathContainer(variables["data"].as<Files::PathContainer>());
dataDirs = Files::PathContainer(Files::EscapePath::toPathContainer(variables["data"].as<Files::EscapePathContainer>()));
}
std::string local = variables["data-local"].as<std::string>();
if (!local.empty()) {
std::string local = variables["data-local"].as<Files::EscapeHashString>().toStdString();
if (!local.empty())
{
if (local.front() == '\"')
local = local.substr(1, local.length() - 2);
dataLocal.push_back(Files::PathContainer::value_type(local));
}
@ -164,7 +168,7 @@ std::pair<Files::PathContainer, std::vector<std::string> > CS::Editor::readConfi
mFileDialog.addFiles(path);
}
return std::make_pair (dataDirs, variables["fallback-archive"].as<std::vector<std::string> >());
return std::make_pair (dataDirs, variables["fallback-archive"].as<Files::EscapeStringVector>().toStdStringVector());
}
void CS::Editor::createGame()

@ -1,8 +1,6 @@
#ifndef CS_EDITOR_H
#define CS_EDITOR_H
#include <memory>
#include <boost/interprocess/sync/file_lock.hpp>
#include <boost/filesystem/fstream.hpp>
@ -30,11 +28,6 @@
#include "view/tools/merge.hpp"
namespace VFS
{
class Manager;
}
namespace CSMDoc
{
class Document;
@ -46,9 +39,6 @@ namespace CS
{
Q_OBJECT
// FIXME: should be moved to document, so we can have different resources for each opened project
std::auto_ptr<VFS::Manager> mVFS;
Files::ConfigurationManager mCfgMgr;
CSMPrefs::State mSettingsState;
CSMDoc::DocumentManager mDocumentManager;
@ -76,7 +66,7 @@ namespace CS
public:
Editor ();
Editor (int argc, char **argv);
~Editor ();
bool makeIPCServer();

@ -8,8 +8,9 @@
#include <QIcon>
#include <QMetaType>
#include "model/doc/messages.hpp"
#include <components/misc/debugging.hpp>
#include "model/doc/messages.hpp"
#include "model/world/universalid.hpp"
#ifdef Q_OS_MAC
@ -41,45 +42,43 @@ class Application : public QApplication
Application (int& argc, char *argv[]) : QApplication (argc, argv) {}
};
int main(int argc, char *argv[])
int runApplication(int argc, char *argv[])
{
#ifdef Q_OS_MAC
setenv("OSG_GL_TEXTURE_STORAGE", "OFF", 0);
#endif
#ifdef Q_OS_MAC
setenv("OSG_GL_TEXTURE_STORAGE", "OFF", 0);
#endif
try
{
// To allow background thread drawing in OSG
QApplication::setAttribute(Qt::AA_X11InitThreads, true);
// To allow background thread drawing in OSG
QApplication::setAttribute(Qt::AA_X11InitThreads, true);
Q_INIT_RESOURCE (resources);
Q_INIT_RESOURCE (resources);
qRegisterMetaType<std::string> ("std::string");
qRegisterMetaType<CSMWorld::UniversalId> ("CSMWorld::UniversalId");
qRegisterMetaType<CSMDoc::Message> ("CSMDoc::Message");
qRegisterMetaType<std::string> ("std::string");
qRegisterMetaType<CSMWorld::UniversalId> ("CSMWorld::UniversalId");
qRegisterMetaType<CSMDoc::Message> ("CSMDoc::Message");
Application application (argc, argv);
Application application (argc, argv);
#ifdef Q_OS_MAC
QDir dir(QCoreApplication::applicationDirPath());
QDir::setCurrent(dir.absolutePath());
#endif
#ifdef Q_OS_MAC
QDir dir(QCoreApplication::applicationDirPath());
QDir::setCurrent(dir.absolutePath());
#endif
application.setWindowIcon (QIcon (":./openmw-cs.png"));
application.setWindowIcon (QIcon (":./openmw-cs.png"));
CS::Editor editor;
CS::Editor editor(argc, argv);
if(!editor.makeIPCServer())
{
editor.connectToIPCServer();
return 0;
}
return editor.run();
}
catch (std::exception& e)
if(!editor.makeIPCServer())
{
std::cerr << "ERROR: " << e.what() << std::endl;
editor.connectToIPCServer();
return 0;
}
return editor.run();
}
int main(int argc, char *argv[])
{
return wrapApplication(&runApplication, argc, argv, "/openmw-cs.log");
}

@ -5,6 +5,7 @@
#include <iostream>
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
#include "../world/defaultgmsts.hpp"
@ -268,13 +269,14 @@ void CSMDoc::Document::createBase()
}
}
CSMDoc::Document::Document (const VFS::Manager* vfs, const Files::ConfigurationManager& configuration,
const std::vector< boost::filesystem::path >& files, bool new_,
CSMDoc::Document::Document (const Files::ConfigurationManager& configuration,
const std::vector< boost::filesystem::path >& files,bool new_,
const boost::filesystem::path& savePath, const boost::filesystem::path& resDir,
const Fallback::Map* fallback,
ToUTF8::FromType encoding, const CSMWorld::ResourcesManager& resourcesManager,
const std::vector<std::string>& blacklistedScripts)
: mVFS(vfs), mSavePath (savePath), mContentFiles (files), mNew (new_), mData (encoding, resourcesManager, fallback, resDir),
ToUTF8::FromType encoding,
const std::vector<std::string>& blacklistedScripts,
bool fsStrict, const Files::PathContainer& dataPaths, const std::vector<std::string>& archives)
: mSavePath (savePath), mContentFiles (files), mNew (new_), mData (encoding, fsStrict, dataPaths, archives, fallback, resDir),
mTools (*this, encoding),
mProjectPath ((configuration.getUserDataPath() / "projects") /
(savePath.filename().string() + ".project")),
@ -286,7 +288,7 @@ CSMDoc::Document::Document (const VFS::Manager* vfs, const Files::ConfigurationM
if (mContentFiles.empty())
throw std::runtime_error ("Empty content file sequence");
if (!boost::filesystem::exists (mProjectPath))
if (mNew || !boost::filesystem::exists (mProjectPath))
{
boost::filesystem::path customFiltersPath (configuration.getUserDataPath());
customFiltersPath /= "defaultfilters";
@ -318,12 +320,13 @@ CSMDoc::Document::Document (const VFS::Manager* vfs, const Files::ConfigurationM
connect (&mUndoStack, SIGNAL (cleanChanged (bool)), this, SLOT (modificationStateChanged (bool)));
connect (&mTools, SIGNAL (progress (int, int, int)), this, SLOT (progress (int, int, int)));
connect (&mTools, SIGNAL (done (int, bool)), this, SLOT (operationDone (int, bool)));
connect (&mTools, SIGNAL (done (int, bool)), this, SIGNAL (operationDone (int, bool)));
connect (&mTools, SIGNAL (done (int, bool)), this, SLOT (operationDone2 (int, bool)));
connect (&mTools, SIGNAL (mergeDone (CSMDoc::Document*)),
this, SIGNAL (mergeDone (CSMDoc::Document*)));
connect (&mSaving, SIGNAL (progress (int, int, int)), this, SLOT (progress (int, int, int)));
connect (&mSaving, SIGNAL (done (int, bool)), this, SLOT (operationDone (int, bool)));
connect (&mSaving, SIGNAL (done (int, bool)), this, SLOT (operationDone2 (int, bool)));
connect (
&mSaving, SIGNAL (reportMessage (const CSMDoc::Message&, int)),
@ -336,11 +339,6 @@ CSMDoc::Document::~Document()
{
}
const VFS::Manager *CSMDoc::Document::getVFS() const
{
return mVFS;
}
QUndoStack& CSMDoc::Document::getUndoStack()
{
return mUndoStack;
@ -415,9 +413,9 @@ void CSMDoc::Document::runSearch (const CSMWorld::UniversalId& searchId, const C
emit stateChanged (getState(), this);
}
void CSMDoc::Document::runMerge (std::auto_ptr<CSMDoc::Document> target)
void CSMDoc::Document::runMerge (std::unique_ptr<CSMDoc::Document> target)
{
mTools.runMerge (target);
mTools.runMerge (std::move(target));
emit stateChanged (getState(), this);
}
@ -440,7 +438,7 @@ void CSMDoc::Document::reportMessage (const CSMDoc::Message& message, int type)
std::cout << message.mMessage << std::endl;
}
void CSMDoc::Document::operationDone (int type, bool failed)
void CSMDoc::Document::operationDone2 (int type, bool failed)
{
if (type==CSMDoc::State_Saving && !failed)
mDirty = false;

@ -3,13 +3,13 @@
#include <string>
#include <boost/shared_ptr.hpp>
#include <boost/filesystem/path.hpp>
#include <QUndoStack>
#include <QObject>
#include <QTimer>
#include <components/files/multidircollection.hpp>
#include <components/to_utf8/to_utf8.hpp>
#include "../world/data.hpp"
@ -60,7 +60,6 @@ namespace CSMDoc
private:
const VFS::Manager* mVFS;
boost::filesystem::path mSavePath;
std::vector<boost::filesystem::path> mContentFiles;
bool mNew;
@ -103,17 +102,15 @@ namespace CSMDoc
public:
Document (const VFS::Manager* vfs, const Files::ConfigurationManager& configuration,
Document (const Files::ConfigurationManager& configuration,
const std::vector< boost::filesystem::path >& files, bool new_,
const boost::filesystem::path& savePath, const boost::filesystem::path& resDir,
const Fallback::Map* fallback,
ToUTF8::FromType encoding, const CSMWorld::ResourcesManager& resourcesManager,
const std::vector<std::string>& blacklistedScripts);
const Fallback::Map* fallback, ToUTF8::FromType encoding,
const std::vector<std::string>& blacklistedScripts,
bool fsStrict, const Files::PathContainer& dataPaths, const std::vector<std::string>& archives);
~Document();
const VFS::Manager* getVFS() const;
QUndoStack& getUndoStack();
int getState() const;
@ -137,7 +134,7 @@ namespace CSMDoc
void runSearch (const CSMWorld::UniversalId& searchId, const CSMTools::Search& search);
void runMerge (std::auto_ptr<CSMDoc::Document> target);
void runMerge (std::unique_ptr<CSMDoc::Document> target);
void abortOperation (int type);
@ -171,13 +168,15 @@ namespace CSMDoc
/// document. This signal must be handled to avoid a leak.
void mergeDone (CSMDoc::Document *document);
void operationDone (int type, bool failed);
private slots:
void modificationStateChanged (bool clean);
void reportMessage (const CSMDoc::Message& message, int type);
void operationDone (int type, bool failed);
void operationDone2 (int type, bool failed);
void runStateChanged();

@ -1,8 +1,5 @@
#include "documentmanager.hpp"
#include <algorithm>
#include <stdexcept>
#include <boost/filesystem.hpp>
#ifndef Q_MOC_RUN
@ -12,7 +9,7 @@
#include "document.hpp"
CSMDoc::DocumentManager::DocumentManager (const Files::ConfigurationManager& configuration)
: mConfiguration (configuration), mEncoding (ToUTF8::WINDOWS_1252), mVFS(NULL)
: mConfiguration (configuration), mEncoding (ToUTF8::WINDOWS_1252)
{
boost::filesystem::path projectPath = configuration.getUserDataPath() / "projects";
@ -65,7 +62,7 @@ CSMDoc::Document *CSMDoc::DocumentManager::makeDocument (
const std::vector< boost::filesystem::path >& files,
const boost::filesystem::path& savePath, bool new_)
{
return new Document (mVFS, mConfiguration, files, new_, savePath, mResDir, &mFallbackMap, mEncoding, mResourcesManager, mBlacklistedScripts);
return new Document (mConfiguration, files, new_, savePath, mResDir, &mFallbackMap, mEncoding, mBlacklistedScripts, mFsStrict, mDataPaths, mArchives);
}
void CSMDoc::DocumentManager::insertDocument (CSMDoc::Document *document)
@ -130,8 +127,9 @@ void CSMDoc::DocumentManager::documentNotLoaded (Document *document, const std::
removeDocument (document);
}
void CSMDoc::DocumentManager::setVFS(const VFS::Manager *vfs)
void CSMDoc::DocumentManager::setFileData(bool strict, const Files::PathContainer& dataPaths, const std::vector<std::string>& archives)
{
mResourcesManager.setVFS(vfs);
mVFS = vfs;
mFsStrict = strict;
mDataPaths = dataPaths;
mArchives = archives;
}

@ -11,8 +11,7 @@
#include <components/to_utf8/to_utf8.hpp>
#include <components/fallback/fallback.hpp>
#include "../world/resourcesmanager.hpp"
#include <components/files/multidircollection.hpp>
#include "loader.hpp"
@ -39,9 +38,14 @@ namespace CSMDoc
QThread mLoaderThread;
Loader mLoader;
ToUTF8::FromType mEncoding;
CSMWorld::ResourcesManager mResourcesManager;
std::vector<std::string> mBlacklistedScripts;
const VFS::Manager* mVFS;
boost::filesystem::path mResDir;
Fallback::Map mFallbackMap;
bool mFsStrict;
Files::PathContainer mDataPaths;
std::vector<std::string> mArchives;
DocumentManager (const DocumentManager&);
DocumentManager& operator= (const DocumentManager&);
@ -74,15 +78,11 @@ namespace CSMDoc
void setBlacklistedScripts (const std::vector<std::string>& scriptIds);
void setVFS(const VFS::Manager* vfs);
/// Sets the file data that gets passed to newly created documents.
void setFileData(bool strict, const Files::PathContainer& dataPaths, const std::vector<std::string>& archives);
bool isEmpty();
private:
boost::filesystem::path mResDir;
Fallback::Map mFallbackMap;
private slots:
void documentLoaded (Document *document);

@ -1,20 +1,15 @@
#include "savingstages.hpp"
#include <fstream>
#include <boost/filesystem.hpp>
#include <QUndoStack>
#include <components/esm/loaddial.hpp>
#include <components/misc/stringops.hpp>
#include "../world/infocollection.hpp"
#include "../world/cellcoordinates.hpp"
#include "document.hpp"
#include "savingstate.hpp"
CSMDoc::OpenSaveStage::OpenSaveStage (Document& document, SavingState& state, bool projectFile)
: mDocument (document), mState (state), mProjectFile (projectFile)

@ -1,5 +1,7 @@
#include "savingstate.hpp"
#include <boost/filesystem/fstream.hpp>
#include "operation.hpp"
#include "document.hpp"

@ -2,7 +2,7 @@
#include <sstream>
CSMFilter::AndNode::AndNode (const std::vector<boost::shared_ptr<Node> >& nodes)
CSMFilter::AndNode::AndNode (const std::vector<std::shared_ptr<Node> >& nodes)
: NAryNode (nodes, "and")
{}

@ -9,7 +9,7 @@ namespace CSMFilter
{
public:
AndNode (const std::vector<boost::shared_ptr<Node> >& nodes);
AndNode (const std::vector<std::shared_ptr<Node> >& nodes);
virtual bool test (const CSMWorld::IdTableBase& table, int row,
const std::map<int, int>& columns) const;

@ -2,7 +2,7 @@
#include <sstream>
CSMFilter::NAryNode::NAryNode (const std::vector<boost::shared_ptr<Node> >& nodes,
CSMFilter::NAryNode::NAryNode (const std::vector<std::shared_ptr<Node> >& nodes,
const std::string& name)
: mNodes (nodes), mName (name)
{}
@ -21,7 +21,7 @@ std::vector<int> CSMFilter::NAryNode::getReferencedColumns() const
{
std::vector<int> columns;
for (std::vector<boost::shared_ptr<Node> >::const_iterator iter (mNodes.begin());
for (std::vector<std::shared_ptr<Node> >::const_iterator iter (mNodes.begin());
iter!=mNodes.end(); ++iter)
{
std::vector<int> columns2 = (*iter)->getReferencedColumns();

@ -4,20 +4,18 @@
#include <vector>
#include <string>
#include <boost/shared_ptr.hpp>
#include "node.hpp"
namespace CSMFilter
{
class NAryNode : public Node
{
std::vector<boost::shared_ptr<Node> > mNodes;
std::vector<std::shared_ptr<Node> > mNodes;
std::string mName;
public:
NAryNode (const std::vector<boost::shared_ptr<Node> >& nodes, const std::string& name);
NAryNode (const std::vector<std::shared_ptr<Node> >& nodes, const std::string& name);
int getSize() const;

@ -3,10 +3,9 @@
#include <string>
#include <map>
#include <memory>
#include <vector>
#include <boost/shared_ptr.hpp>
#include <QMetaType>
namespace CSMWorld
@ -48,6 +47,6 @@ namespace CSMFilter
};
}
Q_DECLARE_METATYPE (boost::shared_ptr<CSMFilter::Node>)
Q_DECLARE_METATYPE (std::shared_ptr<CSMFilter::Node>)
#endif

@ -1,6 +1,6 @@
#include "notnode.hpp"
CSMFilter::NotNode::NotNode (boost::shared_ptr<Node> child) : UnaryNode (child, "not") {}
CSMFilter::NotNode::NotNode (std::shared_ptr<Node> child) : UnaryNode (child, "not") {}
bool CSMFilter::NotNode::test (const CSMWorld::IdTableBase& table, int row,
const std::map<int, int>& columns) const

@ -9,7 +9,7 @@ namespace CSMFilter
{
public:
NotNode (boost::shared_ptr<Node> child);
NotNode (std::shared_ptr<Node> child);
virtual bool test (const CSMWorld::IdTableBase& table, int row,
const std::map<int, int>& columns) const;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save