Commit graph

2606 commits

Author SHA1 Message Date
David Cernat
a3b9274365 [Client] Make it possible to check if an item ID belongs to a bound item 2018-08-11 16:02:09 +03:00
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.
2018-07-30 10:56:26 +03:00
David Cernat
d93b67ef21 [General] Sync soul refIds for items and add related script functions 2018-07-26 22:37:04 +03:00
David Cernat
36ac2d9de4 [Client] Set packetOrigin for all ObjectList packets sent 2018-07-23 01:39:43 +03:00
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.
2018-07-21 19:27:36 +03:00
David Cernat
20e0100706 [General] Rework Attack packets and add synchronization for item magic 2018-07-21 14:41:27 +03:00
David Cernat
21d5bb4d4e
Merge pull request #460 from OpenMW/master
Add 0.7.0 commits up to 20 Jul 2018
2018-07-21 05:59:57 +03:00
Marc Zinnschlag
78a2725169 Merged pull request #1806 2018-07-17 12:42:41 +02:00
Andrei Kortunov
38fa4e0a8a Do not play un-equipping animation when we switch to hand-to-hand 2018-07-17 14:10:04 +04:00
Andrei Kortunov
30716344f2 Fix possible division by zero in the fatigue calculation (bug #4510) 2018-07-16 13:24:12 +04:00
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.
2018-07-15 05:34:59 +03:00
David Cernat
6ebe09375f [General] Implement ObjectActivate packet & associated script functions 2018-07-15 03:16:04 +03:00
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
2018-07-14 03:57:05 +03:00
Andrei Kortunov
3d1daaebab Rework manual spellcasting (e.g. via scripts) 2018-07-12 16:24:25 +04:00
Capostrophic
5cb9dc9d12 Use SpellTurnLeft/TurnRight animation groups 2018-07-10 22:19:56 +03:00
Andrei Kortunov
1c35e20fcc Use 1h animations as fallback for crossbows 2018-07-10 17:02:51 +04:00
Andrei Kortunov
75dcbea365 Apply weapon reload animations only for upper body 2018-07-10 17:00:48 +04:00
David Cernat
c984fc0881 [Client] Allow AiActivate to be used with specific Ptrs, not just refIds 2018-07-10 08:21:24 +03:00
David Cernat
b86155dc11 [Client] Allow AiFollow package to have infinite distance when desired 2018-07-10 01:40:57 +03:00
David Cernat
5043fb4246 [Client] Disable clientside disarming of traps 2018-07-08 02:38:10 +03:00
David Cernat
f3892d697b [Client] Disable clientside locking and unlocking of objects 2018-07-08 00:06:01 +03:00
David Cernat
e3e1cfc549 [Client] Add forgotten comparison in crimeTime and deathTime check 2018-07-06 20:49:08 +03:00
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.
2018-07-06 14:17:54 +03:00
Marc Zinnschlag
d9de8ccb5b Merged pull request #1781 2018-07-06 11:55:45 +02:00
Capostrophic
9abfabb065
Ensure forward-compatibility of death animations in old saves (fixes #4274) 2018-07-05 22:49:40 +03:00
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.
2018-07-05 22:24:51 +03:00
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
2018-07-05 01:57:34 +03:00
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.
2018-07-05 01:11:45 +03:00
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
2018-07-04 01:52:29 +03:00
Koncord
53346e2663 [Client] Return 0 if effect not found 2018-07-03 03:43:38 +08:00
David Cernat
8ce225b1cc [Client] Use the casters of damage-dealing spells as death reasons 2018-07-02 00:42:32 +03:00
David Cernat
958b220835 [General] Send summon duration to server in ObjectSpawn packets 2018-07-01 00:43:29 +03:00
Capostrophic
bccba24c40 Make unarmed creature attacks not affect armor condition (fixes #2455) 2018-06-29 20:18:28 +03:00
Andrei Kortunov
5455490ad2 Avoid fall-through in spell selection 2018-06-28 11:12:48 +04:00
Andrei Kortunov
ec73011617 Clean temporary storage if we assign new AI package (bug #4464) 2018-06-27 12:52:43 +04:00
Andrei Kortunov
ee45f54b53 Refactor AiTemporaryStorage usage 2018-06-27 12:48:34 +04:00
Andrei Kortunov
3c7ab976c3 Ignore movement from scripted animations (bug #4475) 2018-06-27 08:22:45 +04:00
Andrei Kortunov
c9756cee4c Fast-forward death animation to end if death animation was finished earlier (regression #4468) 2018-06-20 12:37:58 +04:00
Capostrophic
6c23caadd7 Fix crash when a target in a different cell is (un)locked 2018-06-19 20:43:18 +03:00
Capostrophic
0c4fa55f16 Make Open spells casted by anything trigger player crime event (fixes #4461) 2018-06-19 17:04:38 +03:00
Andrei Kortunov
5fd3ec1035 Implement unlockable locks with 'lock 0' console command 2018-06-19 14:17:33 +04:00
Marc Zinnschlag
a8ad530db9 Merged pull request #1749 2018-06-19 11:33:08 +02:00
Marc Zinnschlag
2a52ade219 Merged pull request #1760 2018-06-19 11:26:41 +02:00
Andrei Kortunov
e08b0d3070 Ignore lights without CanCarry flags when NPC selects torch (bug #4457) 2018-06-16 17:34:49 +04:00
Andrei Kortunov
9c3da41130 Add murder bounty when a player follower commits murder (bug #2852) 2018-06-15 14:31:09 +04:00
Marc Zinnschlag
2b35c5efd7 Merge remote-tracking branch 'upstream/master' 2018-06-13 18:13:15 +02:00
Marc Zinnschlag
aea481eacb Merged pull request #1753 2018-06-13 18:12:38 +02:00
Andrei Kortunov
61c968d550 Ignore broken items when search for replacement (bug #4453) 2018-06-13 18:39:02 +04:00
Andrei Kortunov
81b78a82e8 AI: try to open doors every AI_REACTION_TIME seconds (bug #4454) 2018-06-13 17:47:32 +04:00
Bret Curtis
3e4dc31e39
Merge branch 'master' into fatigue 2018-06-13 10:04:32 +02:00