// MAPUO PROTOCOL SUPPORT
// AUTHOR: DIEGO@RUNUO.COM
// LAST UPDATE: 11/04/2013
// LAST UPDATE: 10/09/2013 - EXTREME
//
// INSTRUCTIONS:
//
// OPEN SPHERE.INI AND INSERT THE FOLLOWING LINE:
// PACKET240=F_HANDLER_EXTENDEDPROTOCOL
//
// RESTART OR RESYNC THE SERVER IF NECESSARY.
// YOU CAN ADJUST THE FOLLOWING DEFS AS YOU WISH
[DEFNAME MAPUO_SETTINGS]
MAPUO_PARTY_ENABLED 1
MAPUO_GUILD_ENABLED 1
MAPUO_GUILD_HITPOINTS 1
MAPUO_GUILD_DISABLETAG MAPUO_INVISIBLE
NEGOTIATE_FEATURES_ENABLED 1
[DEFNAME FEATURES] // 1 = BLOCK | 0 = ALLOW
FEATURE.1 1,FilterWeather //= 1 << 0, // Weather filter
FEATURE.2 1,FilterLight //= 1 << 1, // Light filter
FEATURE.3 1,SmartTarget //= 1 << 2, // Smart targeting option
FEATURE.4 1,RangedTarget //= 1 << 3, // Range check for targeting option
FEATURE.5 0,AutoOpenDoors //= 1 << 4, // Automatically open doors
FEATURE.6 0,DequipOnCast //= 1 << 5, // Clear hands before casting
FEATURE.7 0,AutoPotionEquip //= 1 << 6, // Dequip and equip hands for potions
FEATURE.8 0,PoisonedChecks //= 1 << 7, // Poisoned checks for macros and block heal if poisoned option
FEATURE.9 0,LoopedMacros //= 1 << 8, // Looped macros
FEATURE.10 0,UseOnceAgent //= 1 << 9, // Use once agent and command
FEATURE.11 0,RestockAgent //= 1 << 10, // Restock agent
FEATURE.12 0,SellAgent //= 1 << 11, // Vendor sell agent
FEATURE.13 0,BuyAgent //= 1 << 12, // Vendor buy agent
FEATURE.14 0,PotionHotkeys //= 1 << 13, // Potions hotkeys
FEATURE.15 0,RandomTargets //= 1 << 14, // Random targeting hotkeys and commands
FEATURE.16 0,ClosestTargets //= 1 << 15, // Closest targeting hotkeys and commands
FEATURE.17 0,OverheadHealth //= 1 << 16, // Display health percentage over head
FEATURE.18 1,AutolootAgent //= 1 << 17, // Autoloot agent
FEATURE.19 1,BoneCutterAgent //= 1 << 18, // Bone cutter agent
FEATURE.20 1,AdvancedMacros //= 1 << 19, // Advanced macros engine
FEATURE.21 0,AutoRemount //= 1 << 20, // Automatically remound after dismount
FEATURE.22 1,AutoBandage //= 1 << 21, // Automatically apply bandages
FEATURE.23 1,BuffChecks //= 1 << 22, // Buff bar checks for macros
FEATURE.24 1,FilterSeason //= 1 << 23, // Season filter
[DIALOG D_NEGOTIATE_FEATURES]
0,0
NOMOVE
NOCLOSE
GUMPPICTILED 0 0 806 606 2624
CHECKERTRANS 0 0 806 606
[FUNCTION F_FEATURES]
LOCAL.FEATURES 0
SERV.LOG SETTING THE FEATURES TO NEGOTIATE
FOR I 1 24
IF <GETARGVX 1,<DEF.FEATURE.<dLOCAL.I>>> == 1
LOCAL.FEATURES |= <HVAL 2@(<dLOCAL.I>-1)>
SERV.LOG - <GETARGVX 2,<DEF.FEATURE.<dLOCAL.I>>>
ENDIF
ENDFOR
SERV.LOG NEGOTIATE FEATURES SET <STRTOUPPER <LOCAL.FEATURES>>
VAR.FEATURES <LOCAL.FEATURES>
RETURN 1
[FUNCTION F_NEGOTIATE_FEATURES]
SDIALOG D_NEGOTIATE_FEATURES
TAG.NEGOTIATEFEATURES 1
FLAGS |= STATF_FREEZE
SENDPACKET 0F0 00 0C 0FE D00 D<VAR.FEATURES>
SYSMESSAGE @063,,1 To play here, you must use AssistUO or Razor and have 'Negotiate Features with Server' enabled. If it's disabled, you have 8 seconds to enable it or will be disconnected in 10 seconds.
TIMERF 8,SENDPACKET 0F0 00 0C 0FE D00 D<VAR.FEATURES>
TIMERF 10,F_NEGOTIATE_FEATURES_2
RETURN 1
[FUNCTION F_NEGOTIATE_FEATURES_2]
IF <dTAG.NEGOTIATEFEATURES>
FLAGS &= ~STATF_FREEZE
SYSMESSAGE @026,,1 You must activate 'Negotiate Features with Server' in your assistant to play.
IF <ISONLINE>
SENDPACKET 082 04
ENDIF
ENDIF
RETURN 1
[FUNCTION F_NEGOTIATE_FEATURES_3]
TAG.NEGOTIATEFEATURES
FLAGS &= ~STATF_FREEZE
TRYSRC <UID> DIALOGCLOSE D_NEGOTIATE_FEATURES
SYSMESSAGE @044,,1 You negotiated the features with server and you're ready to play.
UPDATEX
RETURN 1
[FUNCTION F_HANDLER_EXTENDEDPROTOCOL]
IF (<dLOCAL.NUM> <= 8)
REF1 <LOCAL.CHAR>
IF (<dARGN1> != 240)
RETURN 1
ELSEIF (<dLOCAL.3> == 255) && (<REF1.dTAG.NEGOTIATEFEATURES>)
REF1.F_NEGOTIATE_FEATURES_3
ELSEIF (<dLOCAL.3> == 0) && (<dDEF.MAPUO_PARTY_ENABLED> == 1)
REF1.F_MAPUO_HANDLE_PARTY
ELSEIF (<dLOCAL.3> == 1) && (<dDEF.MAPUO_GUILD_ENABLED> == 1)
REF1.F_MAPUO_HANDLE_GUILD <dLOCAL.4>
ENDIF
RETURN 1
ENDIF
[FUNCTION F_MAPUO_HANDLE_PARTY]
IF !<ISINPARTY>
RETURN
ENDIF
LOCAL.DATA = <HVAL 01>
LOCAL.COUNT = 0
FOR X 0 <EVAL <PARTY.MEMBERS> - 1>
REF1 = <PARTY.MEMBER.<DLOCAL.X>>
IF (<REF1>) && (<REF1> != <UID>) && (<DISTANCE <REF1>> >= 18)
LOCAL.COUNT ++
LOCAL.DATA = <LOCAL.DATA> D<HVAL <REF1.UID>> W<HVAL <REF1.P.X>> W<HVAL <REF1.P.Y>> <HVAL <REF1.MAP>>
ENDIF
ENDFOR
IF <DLOCAL.COUNT> > 0
LOCAL.DATA = <LOCAL.DATA> D<HVAL 00>
LOCAL.LENGTH = <EVAL 4 + (<LOCAL.COUNT> * 9) + 4>
SENDPACKET 0F0 W<HVAL <LOCAL.LENGTH>> <LOCAL.DATA>
ENDIF
[FUNCTION F_MAPUO_HANDLE_GUILD]
IF !<GUILD>
SENDPACKET 0F0 W<HVAL 9> <HVAL 2> <HVAL 0> D<HVAL 00>
RETURN
ENDIF
LOCAL.DATA = <HVAL 02> <HVAL <ARGN1>>
LOCAL.COUNT = 0
FOR X 0 <EVAL <GUILD.MEMBER.COUNT> - 1>
REF1 = <GUILD.MEMBER.<DLOCAL.X>.UID>
IF (<REF1>) && (<REF1> != <UID>) && (<REF1.ISONLINE>) && (<DREF1.TAG0.<DEF.MAPUO_GUILD_DISABLETAG>> == 0)
IF (<DARGN1> == 0) || ((<DARGN1> == 1) && (<DISTANCE <REF1>> >= 18))
LOCAL.COUNT ++
LOCAL.DATA = <LOCAL.DATA> D<HVAL <REF1.UID>>
IF (<DARGN1> == 1)
LOCAL.DATA = <LOCAL.DATA> W<HVAL <REF1.P.X>> W<HVAL <REF1.P.Y>> <HVAL <REF1.MAP>> <HVAL <REF1.F_MAPUO_HITSPERCENT>>
ENDIF
ENDIF
ENDIF
ENDFOR
LOCAL.DATA = <LOCAL.DATA> D<HVAL 00>
IF (<DARGN1> == 0)
LOCAL.LENGTH = <EVAL 5 + (<LOCAL.COUNT> * 4) + 4>
ELSE
LOCAL.LENGTH = <EVAL 5 + (<LOCAL.COUNT> * 10) + 4>
ENDIF
SENDPACKET 0F0 W<HVAL <LOCAL.LENGTH>> <LOCAL.DATA>
[FUNCTION F_MAPUO_HITSPERCENT]
IF (<dDEF.MAPUO_GUILD_HITPOINTS>) && (<MAXHITS> > 0)
RETURN <FEVAL <FLOATVAL (<HITS> / <MAXHITS>) * 100>>
ELSE
RETURN 0
ENDIF
[EOF]