void RecvCreateActionDisplayAtEntity(IIPSocket conn, BitStream r) { ActionDisplayID actionDisplayId = r.ReadActionDisplayID(); MapEntityIndex sourceEntityIndex = r.ReadMapEntityIndex(); bool hasTarget = r.ReadBool(); MapEntityIndex? targetEntityIndex = hasTarget ? r.ReadMapEntityIndex() : (MapEntityIndex?)null; // Get the entities var sourceEntity = _objGrabber.GetDynamicEntity<Character>(sourceEntityIndex); if (sourceEntity == null) return; var targetEntity = targetEntityIndex.HasValue ? _objGrabber.GetDynamicEntity<Character>(targetEntityIndex.Value) : null; // Get the action display var ad = ActionDisplayScripts.ActionDisplays[actionDisplayId]; if (ad == null) return; // Create ad.Execute(Map, sourceEntity, targetEntity); }
void RecvCharAttack(IIPSocket conn, BitStream r) { // Read the values var attackerID = r.ReadMapEntityIndex(); MapEntityIndex? attackedID; if (r.ReadBool()) attackedID = r.ReadMapEntityIndex(); else attackedID = null; ActionDisplayID? actionDisplayIDNullable; if (r.ReadBool()) actionDisplayIDNullable = r.ReadActionDisplayID(); else actionDisplayIDNullable = null; // Get the object references using the IDs provided var attacker = _objGrabber.GetDynamicEntity<Character>(attackerID); if (attacker == null) return; DynamicEntity attacked = attackedID.HasValue ? Map.GetDynamicEntity(attackedID.Value) : null; // Use the default ActionDisplayID if we were provided with a null value ActionDisplayID actionDisplayID = !actionDisplayIDNullable.HasValue ? GameData.DefaultActionDisplayID : actionDisplayIDNullable.Value; // Get the ActionDisplay to use and, if valid, execute it var actionDisplay = ActionDisplayScripts.ActionDisplays[actionDisplayID]; if (actionDisplay != null) actionDisplay.Execute(Map, attacker, attacked); }