From f566daea306a9fcd07bdf9719775b8205f99055b Mon Sep 17 00:00:00 2001 From: Mark Sturgill Date: Sat, 2 Nov 2013 15:37:39 -0700 Subject: [PATCH] gargoyle race/body impl from servuo with some modification --- Data/bodyTable.cfg | 197 ++++++++++++++++++++++++++----- Scripts/Misc/RaceDefinitions.cs | 118 +++++++++++++++++- Server/Body.cs | 19 +++ Server/Mobile.cs | 62 +++++++++- Server/Network/PacketHandlers.cs | 5 + Server/Race.cs | 1 + 6 files changed, 369 insertions(+), 33 deletions(-) diff --git a/Data/bodyTable.cfg b/Data/bodyTable.cfg index f46eb0a15..83cffabbe 100644 --- a/Data/bodyTable.cfg +++ b/Data/bodyTable.cfg @@ -421,8 +421,6 @@ 663 Equipment 664 Equipment 665 Equipment -666 Equipment -667 Equipment 668 Equipment 669 Equipment 670 Equipment @@ -442,10 +440,9 @@ 688 Equipment 690 Equipment 691 Equipment -692 Equipment 693 Equipment -694 Equipment -695 Equipment +694 Human +695 Human 696 Equipment 697 Equipment 698 Equipment @@ -456,29 +453,7 @@ 703 Equipment 710 Equipment 712 Equipment -713 Equipment -715 Equipment -716 Equipment -720 Equipment -721 Equipment -722 Equipment -723 Equipment -724 Equipment -725 Equipment -726 Equipment -727 Equipment -728 Equipment -729 Equipment -730 Equipment 731 Equipment -732 Equipment -733 Equipment -734 Equipment -735 Equipment -736 Equipment -740 Equipment -742 Equipment -743 Equipment 744 Human 745 Human 746 Monster @@ -547,7 +522,6 @@ 820 Equipment 824 Equipment 825 Equipment -826 Equipment 827 Equipment 828 Equipment 846 Equipment @@ -964,3 +938,170 @@ 283 Animal # Crow 284 Animal # Mondains Steed 285 Monster # Reaper Form + + + +# Pub 39 Fixes +689 Monster # Time Lord +704 Monster # Shadow Lord + +# Pub 52 +197 Monster # Order Variant +198 Monster # Chaos Variant + +# UOSA Creatures +666 Human # Gargoyle Male +667 Human # Gargoyle Female +713 Monster # Abyssal Infernal +714 Monster # Iron Beetle +715 Monster # Boura +716 Monster # ChickenLizard +717 Monster # Clockwork Scorpion +718 Monster # Faerie Dragon +719 Monster # Wolf Dragon +720 Monster # Lava Elemental +721 Monster # Flayer +722 Monster # Undead Gargoyle +723 Monster # Green Goblin +724 Monster # Gremlin +725 Monster # Humunculous +726 Monster # Kepetch +727 Monster # Shorn Kepetch +728 Monster # Medusa +729 Monster # Mimic +730 Monster # Raptor +732 Monster # RotWorm +733 Monster # Skree +734 Monster # Slith +735 Monster # Female Spider +736 Monster # Male Spider +737 Monster # Trapdoor Spider +738 Monster # Trapdoor Creature +739 Monster # Leather Wolf +293 Monster # Gargoyle Pet +286 Monster # RotWorm Juvenile +287 Monster # BloodWorm +692 Monster # AnimatedWeapon +830 Monster # Primevil Lich +829 Monster # Rising Colosus +741 Monster # Slasher of Veils +826 Monster # Stygian Dragon +740 Monster # Shadow Dweller +742 Monster # Tunnel Spirit Body +743 Monster # Tunnel Spirit Tentacle +334 Monster # Grey Goblin +832 Monster # Phoenix Bird +831 Monster # Parrot Bird + +# UOSA Wearables +585 Equipment # Leather_Arms_Female +586 Equipment # Leather_Arms_Male +587 Equipment # Leather_Chest_Female +588 Equipment # Leather_Chest_Male +589 Equipment # Leather_Legs_Female +590 Equipment # Leather_Legs_Male +591 Equipment # Plate_Arms_Female +592 Equipment # Plate_Arms_Male +593 Equipment # Plate_Chest_Female +594 Equipment # Plate_Chest_Male +595 Equipment # Plate_Kilt_Female +596 Equipment # Plate_Kilt_Male +597 Equipment # Plate_Legs_Female +598 Equipment # Plate_Legs_Male +599 Equipment # Stone_Arms_Female +600 Equipment # Armor_Stone_Arms_Male +601 Equipment # Armor_Stone_Chest_Female +602 Equipment # Armor_Stone_Chest_Male +603 Equipment # Armor_Stone_Kilt_Female +604 Equipment # Armor_Stone_Kilt_Male +609 Equipment # Armor_Stone_Legs_Female +610 Equipment # Armor_Stone_Legs_Male +654 Equipment # Clothing_Arms_Female +655 Equipment # Clothing_Arms_Male +656 Equipment # Clothing_Chest_Female +657 Equipment # Clothing_Chest_Male +658 Equipment # Clothing_Kilt_Female +659 Equipment # Clothing_Kilt_Male +660 Equipment # Clothing_Legs_Female +661 Equipment # Clothing_Legs_Male +663 Equipment # Leather_Kilt_Female +664 Equipment # Leather_Kilt_Male +662 Equipment # Axe_Dual_Short +668 Equipment # Sword_Bloodblade +669 Equipment # Boomerang +670 Equipment # Sword_Broadsword +672 Equipment # Glave_Cyclone +673 Equipment # Dagger +674 Equipment # Mace_Disk +675 Equipment # Spear_Dual_Pointed +676 Equipment # Staff_Glass +677 Equipment # Staff_Serpentstone +678 Equipment # Sword_Shortblade +690 Equipment # Sword_Talwar +693 Equipment # Glave_Soul +671 Equipment # Sword_Dread +691 Equipment # Sword_Glass +320 Equipment # FishingPole_Gargoyle +321 Equipment # Lantern_Off_Gargoyle +322 Equipment # Lantern_On_Gargoyle +323 Equipment # Pickaxe_Gargoyle +324 Equipment # Shepards_Crook_Gargoyle +325 Equipment # Smithyhammer_Gargoyle +326 Equipment # Spellbook_BookOfArms_Gargoyle +327 Equipment # Spellbook_Bushido_Gargoyle +328 Equipment # Spellbook_Chivalry_Gargoyle +329 Equipment # Spellbook_Gargoyle +330 Equipment # Spellbook_Necromancy_Gargoyle +331 Equipment # Spellbook_Ninjutsu_Gargoyle +332 Equipment # Spellbook_SpellWeaving_Gargoyle +333 Equipment # Weapon_Wand_Gargoyle_Legacy +335 Equipment # Weapon_Shield_Leather_Medium_Gargoyle_Legacy +336 Equipment # Weapon_Shield_Leather_Small_Gargoyle_Legacy +337 Equipment # Weapon_Shield_Plate_Large_Gargoyle_Legacy +338 Equipment # Weapon_Shield_Plate_Medium_Gargoyle_Legacy +339 Equipment # Weapon_Shield_Plate_Small_Gargoyle_Legacy +340 Equipment # Weapon_Shield_Scale_Large_Gargoyle_Legacy +341 Equipment # Gargoyle Robe_Fancy +342 Equipment # Gargoyle Robe_Regular +343 Equipment # Weapon_Shield_Scale_Chaos_Gargoyle +344 Equipment # Weapon_Shield_Scale_Order_Gargoyle + +483 Equipment # Horns_Gargoyle_Male_Legacy +485 Equipment # Horns_Gargoyle_Male_Legacy +843 Equipment # Horns_Gargoyle_Male_Legacy +499 Equipment # Horns_Gargoyle_Male_Legacy +696 Equipment # Horns_Gargoyle_Male_Legacy +697 Equipment # Horns_Gargoyle_Male_Legacy +698 Equipment # Horns_Gargoyle_Male_Legacy +699 Equipment # Horns_Gargoyle_Male_Legacy +769 Equipment # Horns_Gargoyle_Female_Legacy +541 Equipment # Horns_Gargoyle_Female_Legacy +795 Equipment # Horns_Gargoyle_Female_Legacy +632 Equipment # Female gargoyle horns +707 Equipment # Female gargoyle horns +475 Equipment # Female gargoyle horns +647 Equipment # Horns_Facial_Male +650 Equipment # Horns_Facial_Male +652 Equipment # Horns_Facial_Male +665 Equipment # Horns_Facial_Male +547 Equipment # Clothing_Robe_Deathshroud_Gargoyle_Legacy +809 Equipment # Ninja jacket Cloth Female +810 Equipment # Ninja Jacket Leather Feamale +811 Equipment # Shirt Doublet Female +407 Equipment # Tall Straw Hat +708 Equipment # Horns_Gargoyle_Female_Legacy +534 Equipment # Horns_Gargoyle_Female_Legacy +427 Equipment # Human Mysticism Spellbook +428 Equipment # Gargoyle Mysticism Spellbook +705 Equipment # Stone Form +509 Equipment # Horns_Gargoyle_Male +885 Equipment # Gargoyle Ankh Asset - NO ANIMATION - PLACEHOLDER FOR PAPERDOLL +865 Equipment # HUMAN Ankh Asset - NO ANIMATION - PLACEHOLDER FOR PAPERDOLL +510 Equipment # Generic necklace both HUamns and Gargs - NO ANIMATION - PLACEHOLDER FOR PAPERDOLL +436 Equipment # Gargoyle Bracelet - NO ANIMATION - PLACEHOLDER FOR PAPERDOLL +437 Equipment # Gargoyle Earrings - NO ANIMATION - PLACEHOLDER FOR PAPERDOLL +438 Equipment # Gargoyle Ring - NO ANIMATION - PLACEHOLDER FOR PAPERDOLL +439 Equipment # Gargoyle Necklace - NO ANIMATION - PLACEHOLDER FOR PAPERDOLL +432 Equipment # Ethereal Boura Vet Reward +1026 Equipment # Uber Turkey +433 Equipment # Halloween Mask (Paperdoll Only) diff --git a/Scripts/Misc/RaceDefinitions.cs b/Scripts/Misc/RaceDefinitions.cs index 45db08ae8..791dcb6ee 100644 --- a/Scripts/Misc/RaceDefinitions.cs +++ b/Scripts/Misc/RaceDefinitions.cs @@ -15,8 +15,9 @@ namespace Server.Misc * 4) Changing or removing any predefined races may cause server instability. */ - RegisterRace( new Human ( 0, 0 ) ); - RegisterRace( new Elf ( 1, 1 ) ); + RegisterRace( new Human( 0, 0 ) ); + RegisterRace( new Elf( 1, 1 ) ); + RegisterRace( new Gargoyle( 2, 2 ) ); } public static void RegisterRace( Race race ) @@ -219,5 +220,118 @@ namespace Server.Misc return m_HairHues[Utility.Random( m_HairHues.Length )]; } } + + #region SA + private class Gargoyle : Race + { + public Gargoyle(int raceID, int raceIndex) + : base(raceID, raceIndex, "Gargoyle", "Gargoyles", 666, 667, 402, 403, Expansion.SA) + { + } + + public override bool ValidateHair(bool female, int itemID) + { + if (female == false) + { + return itemID >= 0x4258 && itemID <= 0x425F; + } + else + { + return ((itemID == 0x4261 || itemID == 0x4262) || (itemID >= 0x4273 && itemID <= 0x4275) || (itemID == 0x42B0 || itemID == 0x42B1) || (itemID == 0x42AA || itemID == 0x42AB)); + } + } + + public override int RandomHair(bool female) + { + if (Utility.Random(9) == 0) + return 0; + else if (!female) + return 0x4258 + Utility.Random(8); + else + { + switch (Utility.Random(9)) + { + case 0: + return 0x4261; + case 1: + return 0x4262; + case 2: + return 0x4273; + case 3: + return 0x4274; + case 4: + return 0x4275; + case 5: + return 0x42B0; + case 6: + return 0x42B1; + case 7: + return 0x42AA; + case 8: + return 0x42AB; + } + return 0; + } + } + + public override bool ValidateFacialHair(bool female, int itemID) + { + if (female) + return false; + else + return itemID >= 0x42AD && itemID <= 0x42B0; + } + + public override int RandomFacialHair(bool female) + { + if (female) + return 0; + else + return Utility.RandomList(0, 0x42AD, 0x42AE, 0x42AF, 0x42B0); + } + + // Todo Finish body hues + private static readonly int[] m_BodyHues = new int[] + { + 0x86DB, 0x86DC, 0x86DD, 0x86DE, + 0x86DF, 0x86E0, 0x86E1, 0x86E2, + 0x86E3, 0x86E4, 0x86E5, 0x86E6 + // 0x, 0x, 0x, 0x, // 86E7/86E8/86E9/86EA? + // 0x, 0x, 0x, 0x, // 86EB/86EC/86ED/86EE? + // 0x86F3, 0x86DB, 0x86DC, 0x86DD + }; + + public override int ClipSkinHue(int hue) + { + return hue; // for hue infomation gathering + } + + public override int RandomSkinHue() + { + return m_BodyHues[Utility.Random(m_BodyHues.Length)] | 0x8000; + } + + private static readonly int[] m_HornHues = new int[] + { + 0x709, 0x70B, 0x70D, 0x70F, 0x711, 0x763, + 0x765, 0x768, 0x76B, 0x6F3, 0x6F1, 0x6EF, + 0x6E4, 0x6E2, 0x6E0, 0x709, 0x70B, 0x70D + }; + + public override int ClipHairHue(int hue) + { + for (int i = 0; i < m_HornHues.Length; i++) + if (m_HornHues[i] == hue) + return hue; + + return m_HornHues[0]; + } + + public override int RandomHairHue() + { + return m_HornHues[Utility.Random(m_HornHues.Length)]; + } + } + #endregion } } \ No newline at end of file diff --git a/Server/Body.cs b/Server/Body.cs index e2a7c7c0a..cb0c2c7af 100644 --- a/Server/Body.cs +++ b/Server/Body.cs @@ -106,10 +106,23 @@ namespace Server && m_BodyID != 403 && m_BodyID != 607 && m_BodyID != 608 + && m_BodyID != 694 + && m_BodyID != 695 && m_BodyID != 970; } } + public bool IsGargoyle + { + get + { + return m_BodyID == 666 + || m_BodyID == 667 + || m_BodyID == 694 + || m_BodyID == 695; + } + } + public bool IsMale { get @@ -120,6 +133,8 @@ namespace Server || m_BodyID == 402 || m_BodyID == 605 || m_BodyID == 607 + || m_BodyID == 666 + || m_BodyID == 694 || m_BodyID == 750; } } @@ -134,6 +149,8 @@ namespace Server || m_BodyID == 403 || m_BodyID == 606 || m_BodyID == 608 + || m_BodyID == 667 + || m_BodyID == 695 || m_BodyID == 751; } } @@ -146,6 +163,8 @@ namespace Server || m_BodyID == 403 || m_BodyID == 607 || m_BodyID == 608 + || m_BodyID == 694 + || m_BodyID == 695 || m_BodyID == 970; } } diff --git a/Server/Mobile.cs b/Server/Mobile.cs index bef80cf9f..9197fffed 100644 --- a/Server/Mobile.cs +++ b/Server/Mobile.cs @@ -6231,10 +6231,62 @@ namespace Server //state.Send( pNew ); //} else { - if( p == null ) - p = Packet.Acquire( new MobileAnimation( this, action, frameCount, repeatCount, forward, repeat, delay ) ); + if (p == null) + { + #region SA + if (Body.IsGargoyle) + { + frameCount = 10; - state.Send( p ); + if (Flying) + { + if (action >= 9 && action <= 11) + { + action = 71; + } + else if (action >= 12 && action <= 14) + { + action = 72; + } + else if (action == 20) + { + action = 77; + } + else if (action == 31) + { + action = 71; + } + else if (action == 34) + { + action = 78; + } + else if (action >= 200 && action <= 259) + { + action = 75; + } + else if (action >= 260 && action <= 270) + { + action = 75; + } + } + else + { + if (action >= 200 && action <= 259) + { + action = 17; + } + else if (action >= 260 && action <= 270) + { + action = 16; + } + } + } + #endregion + + p = Packet.Acquire(new MobileAnimation(this, action, frameCount, repeatCount, forward, repeat, delay)); + } + + state.Send( p ); //} } } @@ -7848,6 +7900,10 @@ namespace Server } } + public virtual void ToggleFlying() + { + } + [CommandProperty( AccessLevel.GameMaster )] public bool Warmode { diff --git a/Server/Network/PacketHandlers.cs b/Server/Network/PacketHandlers.cs index a41540cca..c29e37bbf 100644 --- a/Server/Network/PacketHandlers.cs +++ b/Server/Network/PacketHandlers.cs @@ -170,6 +170,7 @@ namespace Server.Network RegisterExtended( 0x1C, true, new OnPacketReceive( CastSpell ) ); RegisterExtended( 0x24, false, new OnPacketReceive( UnhandledBF ) ); RegisterExtended( 0x2C, true, new OnPacketReceive( BandageTarget ) ); + RegisterExtended( 0x32, true, new OnPacketReceive( ToggleFlying ) ); RegisterEncoded( 0x19, true, new OnEncodedPacketReceive( SetAbility ) ); RegisterEncoded( 0x28, true, new OnEncodedPacketReceive( GuildGumpRequest ) ); @@ -1650,6 +1651,10 @@ namespace Server.Network } } + public static void ToggleFlying(NetState state, PacketReader pvSrc) + { + state.Mobile.ToggleFlying(); + } public static void BatchQueryProperties( NetState state, PacketReader pvSrc ) { if ( !ObjectPropertyList.Enabled ) diff --git a/Server/Race.cs b/Server/Race.cs index be64385d2..bd32326d4 100644 --- a/Server/Race.cs +++ b/Server/Race.cs @@ -36,6 +36,7 @@ namespace Server public static Race Human { get { return m_Races[0]; } } public static Race Elf { get { return m_Races[1]; } } + public static Race Gargoyle { get { return m_Races[2]; } } private static List m_AllRaces = new List();