Что это за система, смысл прост, её использование должно быть как на монстрах так и на игроках. то есть это 2 системы PvP, PvM в одной. С работающими бонусами у предметов
Если вы надумаете использовать что либо, есть небольшая просьба, не забывайте подписывать автора (то есть меня), или хотя бы скажите спасибо за мой труд... =)Список бонусов, что есть и что не доделал, но начало есть
Код
<--------------------------------------------------------------------------------------->
* - работает ! - предстоит сделать ? - Вроде как работает но через таймер
<- Combat Effects ---------------------------------------------------------------------->
* ResistPhysical = % - Сопративляемость к физическому урону
* DefenseChance = % - Шанс увернуться/отразить от удара
* DamageIncrease = % - увеличение урона
* DamageSpeed = % - увеличение скорости ударов
<- Magic Effects ----------------------------------------------------------------------->
* QuickCast = % - Увеличение скорости магии
* LowerManaCost = % - Уменьшение потери маны при касте магии.
* ResistFire = % - Сопративляемость к огненному урону
* ResistEnergy = % - Сопративляемость к энергетическому урону
* ResistCold = % - Сопративляемость к замаражевающему урону
* ResistPoison = % - Сопративляемость к отравляющему урону
<- Regeneration ------------------------------------------------------------------------>
? RegenHits = N - Регенирация жизни за 3 сек.
? RegenMana = N - Регенирация маны за 3 сек.
? RegenStam = N - Регенирация выносливости за 3 сек.
<- Character --------------------------------------------------------------------------->
* IncreaseStr = N - Увеличение силы/жизни игрока
* IncreaseInt = N - Увеличение интелекта игрока
* IncreaseDex = N - Увеличение ловкости игрока
<--------------------------------------------------------------------------------------->
! Luck = N - Шанс удачи найти в луте что нить кульное.
! IncreaseGold = % - Увеличивает кол-во денег в луте монстра.
! SelfRepair = % - Шанс автопочинки предмета при его поломке.
<--------------------------------------------------------------------------------------->
Код
//<------------------------------------------------------------------------------------->
//<- Ultima Online: The Odyssey ->
//<- Sphere Version: 56x (56b-Nightly) ->
//<- Script Author: Breaker (Cache) ->
//<- ->
//<- Last edit date: 13.12.2006 ->
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<[MOD] --------------------- Функция спеллов изменения статов ------------------------>
//<------------------------------------------------------------------------------------->
[FUNCTION SpellStatsEffect]
//<[FIX] ------------------------ Применение спеллов на статы -------------------------->
IF (<ARGN>==1)||(<ARGN>==3)||(<ARGN>==8)||(<ARGN>==9)||(<ARGN>==10)||(<ARGN>==16)||(<ARGN>==17)||(<ARGN>==27)||(<ARGN>==46)
// 1 - Clumsy - STR= 0 DEX=-10 INT= 0
// 3 - Feeblemind - STR= 0 DEX= 0 INT=-10
// 8 - Weaken - STR=-10 DEX= 0 INT= 0
// -----------------------------------------
// 9 - Agility - STR= 0 DEX=+10 INT= 0
//10 - Cunning - STR= 0 DEX= 0 INT=+10
//16 - Strength - STR=+10 DEX= 0 INT= 0
// -----------------------------------------
//17 - Bless - STR=+5 DEX=+5 INT=+5
//27 - Curse - STR=-5 DEX=-5 INT=-5
//48 - Mass Curse - STR=-5 DEX=-5 INT=-5
SOUND <SERV.SPELL.<ARGN>.SOUND>
EFFECT 3,<SERV.SPELL.<ARGN>.EFFECT_ID>,15,15
TRY FINDID.i_memory_spell_stats.REMOVE
LOCAL.SpellDiff = "<QVAL (<SRC.INT> < 100) ?-<EVAL (100-<SRC.INT>)>:<EVAL (<SRC.INT>-100)*5> >"
LOCAL.SpellEffect = <DEF.Spell_<ARGN>_Effect>
LOCAL.SpellEffect += <EVAL (<dLOCAL.SpellEffect>*<dLOCAL.SpellDiff>)/100>
SERV.SPELL.<ARGN>.EFFECT = "<QVAL (<dLOCAL.SpellEffect>)?<dLOCAL.SpellEffect>:0>"
SERV.NEWITEM=i_memory_spell_stats
NEW.DispID=<SERV.SPELL.<ARGN>.RUNE_ITEM>
NEW.NAME=<SERV.SPELL.<ARGN>.NAME>
NEW.LINK=<SRC.UID>
IF (0)
//<--------------------------------- Increased spells ---------------------------------->
ELIF (<ARGN>== 1) // Clumsy - STR= 0 DEX=-10 INT= 0
NEW.MOREM=0 // Mode: 0=- 1=+
NEW.MOREY=(<DEX>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // DEX
ELIF (<ARGN>== 3)
NEW.MOREM=0 // Mode: 0=- 1=+
NEW.MOREZ=(<INT>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // INT
ELIF (<ARGN>== 8)
NEW.MOREM=0 // Mode: 0=- 1=+
NEW.MOREX=(<STR>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // STR
//<--------------------------------- Decreased spells ---------------------------------->
ELIF (<ARGN>== 9)
NEW.MOREM=1 // Mode: 0=- 1=+
NEW.MOREY=(<DEX>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // DEX
ELIF (<ARGN>==10)
NEW.MOREM=1 // Mode: 0=- 1=+
NEW.MOREZ=(<INT>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // INT
ELIF (<ARGN>==16)
NEW.MOREM=1 // Mode: 0=- 1=+
NEW.MOREX=(<STR>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // STR
//<------------------------------- Increased mass spell -------------------------------->
ELIF (<ARGN>==17)
NEW.MOREM=1 // Mode: 0=- 1=+
NEW.MOREX=(<STR>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // STR
NEW.MOREY=(<DEX>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // DEX
NEW.MOREZ=(<INT>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // INT
//<------------------------------- Decreased mass spell -------------------------------->
ELIF (<ARGN>==27)
NEW.MOREM=0 // Mode: 0=- 1=+
NEW.MOREX=(<STR>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // STR
NEW.MOREY=(<DEX>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // DEX
NEW.MOREZ=(<INT>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // INT
//<------------------------------- Decreased mass spell -------------------------------->
ELIF (<ARGN>==46)
NEW.MOREM=0 // Mode: 0=- 1=+
NEW.MOREX=(<STR>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // STR
NEW.MOREY=(<DEX>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // DEX
NEW.MOREZ=(<INT>*<SERV.SPELL.<ARGN>.EFFECT>)/100 // INT
ENDIF
EQUIP=<NEW.UID>
NEW.MORE1=<ARGN>
NEW.TIMER=<SERV.SPELL.<ARGN>.DURATION>
AddSpellBuff <ARGN> <SERV.SPELL.<ARGN>.DURATION> <SERV.SPELL.<ARGN>.EFFECT> <SERV.SPELL.<ARGN>.EFFECT> <SERV.SPELL.<ARGN>.EFFECT>
RETURN 1
ENDIF
RETURN 0
//& #60;============================================================================
=========>
//<------------------------------------------------------------------------------------->
//<[MOD] --------------------- Главная ПвП+ПвМ система сервер -------------------------->
//<------------------------------------------------------------------------------------->
//& #60;============================================================================
=========>
[EVENTS e_PvX]
ON=@Click
//<[MOD] -------------------------- Живность для стаффа -------------------------------->
IF StrMatch("- Stuff Ride -","<NAME>")
RETURN 1
ENDIF
ON=@NPCLookAtChar
//<[MOD] -------------------------- Живность для стаффа -------------------------------->
IF StrMatch("- Stuff Ride -","<NAME>")
HITS=0
ENDIF
ON=@Death
//<[MOD] -------------------------- Живность для стаффа -------------------------------->
IF StrMatch("- Stuff Ride -","<NAME>")
REMOVE
RETURN 1
ENDIF
//<[FIX] -------------- Исправление смерти моба для триггера @Kill --------------------->
IF (<NPC>)
FORCHARMEMORYTYPE MEMORY_FIGHT
COLOR |= 00010
ENDFOR
ENDIF
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<[MOD] -------------- Создания лута в трупе моба при его смерти ---------------------->
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
ON=@DeathCorpse
IF (<NPC>!=brain_monster) && (<NPC>!=brain_dragon) && (<NPC>!=brain_undead)
RETURN 0
ELSE
GenerateCorpseLoot
ENDIF
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<- Magic Combat ---------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//< TRIGGER: SpellCast >
//<------------------------------------------------------------------------------------->
ON=@SpellCast
IF (<SRC.IsGM>) //(<SRC.ACCOUNT.PLEVEL> > 1)
ARGN3=0.1
ELSE
//<[MOD] ------------------------ Взятие параметров спелла ----------------------------->
ARGN3 = <DEF.Spell_<ARGN>_CastTime>
//<[MOD] ------------- Вычисление модификации скорости магии со скроллов --------------->
IF StrMatch("t_scroll","<ARGO.TYPE>")
ARGN3 = <ARGN3> - <FVAL (<ARGN>*45)/100>
SRC.TAG.IsScroll="1"
ENDIF
//<[MOD] ---------------- Увеличение скорости магии бонусом QuickCast ------------------>
ARGN3 -= <EVAL (<ARGN3>*<SRC.GetCombatEffect QuickCast>)/100>
ENDIF
//IF (<SRC.IsGM>)
// SRC.SYSMESSAGE @73, Cast speed: <FVAL <ARGN3>> sec.
//ENDIF
IF (<SRC.NPC>)
SRC.SAY <GetRunesWord <ARGN>>
ENDIF
//<[MOD] ---------------- Если ты в паралузе то скорость каста уменьшается на 1сек ---->
//IF (<flags>&statf_freeze)
// ARGN3 += 10
// SYSMESSAGE @73, Cast Speed + 1 sec
//ENDIF
//<------------------------------------------------------------------------------------->
//< TRIGGER: SpellEffect >
//<------------------------------------------------------------------------------------->
ON=@SpellEffect
IF (<FLAGS>&statf_invul)
EFFECT 3,037b9,10,20
RETURN 1
//<[MOD] --------------------- Применение силы магии бутылок --------------------------->
ELIF StrMatch("t_potion","<ARGO.TYPE>")
LOCAL.SpellEffect = <DEF.Spell_<ARGN>_Effect>
LOCAL.SpellManaUse = <DEF.Spell_<ARGN>_ManaUse>
LOCAL.SpellDuration = <DEF.Spell_<ARGN>_Duration>
LOCAL.SpellEffect = <EVAL (<dLOCAL.SpellEffect>*<ARGO.MORE2>) / 100>
//<[MOD] --------------------- Применение вычислений силы магии ------------------------>
SERV.SPELL.<ARGN>.EFFECT = "<QVAL (<dLOCAL.SpellEffect>)?<dLOCAL.SpellEffect>:0>"
SERV.SPELL.<ARGN>.MANAUSE = "<QVAL (<dLOCAL.SpellManaUse>)?<dLOCAL.SpellManaUse>:0>"
SERV.SPELL.<ARGN>.DURATION = "<QVAL (<dLOCAL.SpellDuration>)?<dLOCAL.SpellDuration>:0>"
//<[MOD] ------------------------------------------------------------------------------->
IF (<SRC.IsGM>)
SRC.SYSMESSAGE @33, Used potion: <ARGO.NAME>
SRC.SYSMESSAGE @73, Default Strength: <dDEF.Spell_<ARGN>_Effect> pt.
SRC.SYSMESSAGE @73, Strength: <dARGO.MORE2>%
SRC.SYSMESSAGE @73, Effect: <SERV.SPELL.<ARGN>.EFFECT> pt.
ENDIF
//<[FIX] ------------------------ Применение спеллов на статы -------------------------->
IF (<SpellStatsEffect <ARGN>>)
RETURN 1
ENDIF
//<[FIX] --------- Не применять формулы на спеллы которых нет в Spellbook-е ------------>
ELIF (<ARGN> >= 65)
SERV.LOG @WARNING: <NAME> [<ACCOUNT>] using not aviable spell <ARGN>
//<[FIX] --------------------------- Применение Cure спелла ---------------------------->
ELIF (<ARGN>==11)
TRY FINDID.i_memory_poison.REMOVE
EFFECT 3,i_fx_heal_effect,15,25
RETURN 1
//<[FIX] -------------------------- Применение Dispel спелла --------------------------->
ELIF (<ARGN>==41) || (<ARGN>==54)
TRY FINDID.i_memory_poison.REMOVE
TRY FINDID.i_memory_incognito.REMOVE
TRY FINDID.i_memory_spell_stats.REMOVE
//<[MOD] ------------ Система отражения магии от спелла (Magic Reflection) ------------->
ELIF (<FINDID.i_rune_magic_reflection.UID>) && (<SERV.SPELL.<ARGN>.FLAGS>&spellflag_harm)
EFFECT=3,i_fx_bless_EFFECT,15,15
FINDID.i_rune_magic_reflection.REMOVE
FLAGS=<FLAGS>&~statf_reflection
IF (<UID>!=<SRC.UID>)
SRC.SPELLEFFECT <ARGN>, <MAGERY>
IF (0)
ELIF (<ARGN>==5) // s_magic_arrow
SRC.EFFECT 0,036e4,4,16,6
ELIF (<ARGN>==18) // s_fireball
SRC.EFFECT 0,036d4,4,16,6
ELIF (<ARGN>==30) // s_lightning
EFFECT 1,i_fx_curse,4,16,6
ELIF (<ARGN>==49) // s_chain_lightning
EFFECT 1,i_fx_curse,4,16,6
ELIF (<ARGN>==51) // s_flamestrike
SRC.EFFECT 3,03709,4,16,6
ENDIF
ENDIF
RETURN 1
//<[MOD] ---- Применение потери силы замораживающей магии от бонуса ResistCold --------->
ELIF (<SRC.FLAGS>&statf_freeze) && ((<ARGN>==38) || (<ARGN>==47))
RETURN 1
ELSE
//<[MOD] ------------------------ Взятие параметров спелла ----------------------------->
LOCAL.SpellEffect = <DEF.Spell_<ARGN>_Effect>
LOCAL.SpellManaUse = <DEF.Spell_<ARGN>_ManaUse>
LOCAL.SpellDuration = <DEF.Spell_<ARGN>_Duration>
//<[MOD] -------------------- Вычисление модификации сил магии ------------------------->
LOCAL.SpellDiff = "<QVAL (<SRC.INT> < 100) ?-<EVAL (100-<SRC.INT>)>:<EVAL (<SRC.INT>-100)*5> >"
//<------------------------------------------------------------------------------------->
//<[MOD] -------------------- Увеличение/уменьшение сил магии -------------------------->
IF (<LOCAL.SpellEffect>) // Если у спелла есть значение урона
LOCAL.SpellEffect += <EVAL (<dLOCAL.SpellEffect>*<dLOCAL.SpellDiff>)/100>
IF !(<SERV.SPELL.<ARGN>.FLAGS>&spellflag_harm)
// Если спел не является harm
ELIF (<ARGN>==1)||(<ARGN>==3)||(<ARGN>==8)||(<ARGN>==9)||(<ARGN>==10)||(<ARGN>==16)||(<ARGN>==17)||(<ARGN>==27)||(<ARGN>==46)
// Если спел будет применён на статы
ELSE
//<[MOD] --------- Вычисление модификации силы магии от скилла EvaluatingIntel -------->
LOCAL.SpellEffect += <EVAL (<dLOCAL.SpellEffect>*<EVAL <EvaluatingIntel>/15>)/100>
ENDIF
ENDIF
IF (<dLOCAL.SpellManaUse>) // Если есть значение затрат маны
//<[MOD] ------------ Уменьшение затрат маны бонусом LowerManaCost --------------------->
LOCAL.SpellManaUse -= <EVAL (<dLOCAL.SpellManaUse>*<SRC.GetCombatEffect LowerManaCost>)/100>
ENDIF
IF (<dLOCAL.SpellDuration>) // Если у спелла есть значение продолжительности
LOCAL.SpellDuration += <EVAL (<LOCAL.SpellDuration>*<LOCAL.SpellDiff>)/100>
//<[MOD] ---- Применение потери силы замораживающей магии от бонуса ResistCold --------->
IF (<ARGN>==38) || (<ARGN>==47)
LOCAL.SpellDuration -= <EVAL (<LOCAL.SpellDuration>*<GetCombatEffect ResistCold>)/100>
ENDIF
ENDIF
//<[MOD] --------------------- Применение вычислений силы магии ------------------------>
SERV.SPELL.<ARGN>.EFFECT = "<QVAL (<dLOCAL.SpellEffect>)?<dLOCAL.SpellEffect>:0>"
SERV.SPELL.<ARGN>.MANAUSE = "<QVAL (<dLOCAL.SpellManaUse>)?<dLOCAL.SpellManaUse>:0>"
SERV.SPELL.<ARGN>.DURATION = "<QVAL (<dLOCAL.SpellDuration>)?<dLOCAL.SpellDuration>:0>"
//<[MOD] ------------------------------------------------------------------------------->
IF (<SRC.IsGM>)
SRC.SYSMESSAGE @33, Used Spell: <SERV.SPELL.<ARGN>.NAME>
SRC.SYSMESSAGE @73, Spell Diff: <dLOCAL.SpellDiff>%
SRC.SYSMESSAGE @73, Effect: <SERV.SPELL.<ARGN>.EFFECT> pt.
SRC.SYSMESSAGE @73, Mana Use: <SERV.SPELL.<ARGN>.MANAUSE> pt.
SRC.SYSMESSAGE @73, Duration: <SERV.SPELL.<ARGN>.DURATION> secs.
ENDIF
//<[FIX] ------------------------ Применение спеллов на статы -------------------------->
IF (<SpellStatsEffect <ARGN>>)
RETURN 1
ENDIF
//<[MOD] ------------------------------------------------------------------------------->
IF !(<SERV.SPELL.<ARGN>.DURATION>) && !(<SERV.SPELL.<ARGN>.EFFECT>) && (<SERV.SPELL.<ARGN>.FLAGS>&spellflag_harm)
EFFECT 3,<SERV.SPELL.<ARGN>.EFFECT_ID>,15,15
RETURN 1
ENDIF
ENDIF
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<- Melee Combat ---------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//< TRIGGER: HitTry
//<------------------------------------------------------------------------------------->
ON=@HitTry
//<----------------------------- Если аттакуемый Game Master --------------------------->
IF (<SRC.IsGM>)
SYSMESSAGE You can`t attack a Game Master.
//<------------------------ Если на каком нить игроке есть invul ----------------------->
ELIF (<FLAGS>&statf_invul) || (<SRC.FLAGS>&statf_invul)
SYSMESSAGE You can't attack <SRC.NAME> in your state.
//<---------------------------- Если аттакуемый в No PVP зоне -------------------------->
ELIF (<REGION.FLAGS>®ion_flag_safe) || (<REGION.FLAGS>®ion_flag_no_pvp)
SYSMESSAGE You can't attack <SRC.NAME> here.
//<----------------------------- Если аттакуещий в Safe зоне --------------------------->
ELIF (<SRC.REGION.FLAGS>®ion_flag_safe) || (<SRC.REGION.FLAGS>®ion_flag_no_pvp)
SYSMESSAGE You can't attack <SRC.NAME> here.
ELIF (<STAM> < 1)
STAM=0
ELSE
ARGN = 20 // Скорость рукопашного удара (По умолчанию)
IF StrMatch("t_weapon_*","<ARGO.TYPE>")
IF (<EVAL 0<DEF.<UID.<ARGO.UID>.DispID>_speed>>) // Скорость оружий по его дополнительному типу
ARGN = <FVAL <DEF.<UID.<ARGO.UID>.DispID>_speed>>
ELIF (<EVAL 0<DEF.<UID.<ARGO.UID>.BaseID>_speed>>) // Скорость оружий по его главному типу
ARGN = <FVAL <DEF.<UID.<ARGO.UID>.BaseID>_speed>>
ELSE // Если предмет не прописан в базе оружий то сообщяем игроку
SYSMESSAGEUA 32 0 0 0` If you have seen this message, speed of your
SYSMESSAGEUA 32 0 0 0` weapon is not registered, call Game Master!
SERV.LOG [<NAME>] use weapon <ARGO.NAME>[<ARGO.UID>], is not registered.
RETURN 1
ENDIF
ENDIF
//<[MOD] ---------- Каждые 10 ловкости увеличиывают/уменьшают скорость на 0.1 ---------->
ARGN = <ARGN> + <EVAL (100-<DEX>)/10>
//<[MOD] --------------- Применение эффекта боя на скорость с предметов ---------------->
ARGN = <ARGN> - <FVAL (<ARGN>*<GetCombatEffect DamageSpeed>)/100>
//<[MOD] ----------------- Потеря стамины в зависимости от типа оружия ----------------->
STAM = <STAM> - <ARGO.LAYER>
IF (<FVAL <ARGN>> < 0.1)
ARGN=0.1
ENDIF
IF (<SRC.IsGM>)
SYSMESSAGE @0c2, Weapon speed: <FVAL <ARGN>>
ENDIF
RETURN 0
ENDIF
RETURN 1
//<------------------------------------------------------------------------------------->
//< TRIGGER: HitMiss
//<------------------------------------------------------------------------------------->
ON=@HitMiss
// Blank, used default missed message.
//<------------------------------------------------------------------------------------->
//< TRIGGER: Hit
//<------------------------------------------------------------------------------------->
ON=@Hit
//<[MOD]----------------------------- Нету промахов ------------------------------------>
ACTDIFF=0
//<[MOD]--------------------------- PvM система для NPC -------------------------------->
IF (<NPC>)
ARGN = <QVAL StrMatch("t_weapon_*","<ARGO.TYPE>")?RAND({<ARGO.DAM>}):RAND({<DAM>})>
//<[MOD] --------------- Критический удар оружием от оружия ближнего боя --------------->
IF (<ARGN> > 0) && (RAND(50)==0)
TAG.Critical=<EVAL (<ARGN>*135)/100>
ENDIF
RETURN 0
ENDIF
//<[MOD]------------------- Получение базового урона персонажа ------------------------->
IF StrMatch("t_weapon_*","<ARGO.TYPE>") || StrMatch("t_wand","<ARGO.TYPE>")
ARGN = RAND({<ARGO.DAM>})
//<[MOD] ----------------- Уменьшение урона от потери прочности --------------------->
ARGN = (<ARGN>*<ARGO.MORE1L>)/<ARGO.MORE1H>
ELSE
ARGN = <EVAL ((<STR>*10)/100) + RAND(2)>
ENDIF
//<[MOD] ------------------ Увеличение урона от силы персонажа ------------------------->
//ARGN += <EVAL (<STR>-100)/5>
ARGN += <EVAL (<STR>+10)/10> // Default of Client Formula
//<[MOD] --------------- Увеличение урона от бонуса увеличения урона ------------------->
ARGN += <EVAL (<ARGN>*<GetCombatEffect DamageIncrease>)/100>
//<[MOD] ------------------- Потеря урона луков от дистанции --------------------------->
IF StrMatch("t_weapon_bow","<ARGO.TYPE>") || StrMatch("t_weapon_xbow","<ARGO.TYPE>")
IF (<ARGO.ID>==013b1) // Если это bow (лук)
ARGN = <ARGN> - <EVAL (<DISTANCE>*135)/100>
ELIF (<ARGO.ID>==0f4f) // Если это crossbow (арбалет)
ARGN = <ARGN> - <EVAL (<DISTANCE>*120)/100>
ELIF (<ARGO.ID>==013fc) // Если это heavy crossbow (тяжолый арбалет)
ARGN = <ARGN> - <EVAL (<DISTANCE>*105)/100>
ENDIF
ELSE
//<[MOD] -------- Дополнительный удар со спины (backstab) от оружия ближнего боя ------->
IF (<ARGN> > 0) && (<SRC.DIR>==<DIR>) && (RAND(3)==0)
TAG.Backstab=<EVAL (<ARGN>*75)/100>
ENDIF
//<[MOD] --------------- Критический удар оружием от оружия ближнего боя --------------->
IF (<ARGN> > 0) && (RAND(50)==0)
TAG.Critical=<EVAL (<ARGN>*135)/100>
ENDIF
ENDIF
//<[FIX] ----------------- Поломка одетых предметов оружия при ударе ------------------->
IF !(<R75>)
DamageEquipedWeapon
ENDIF
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//< TRIGGER: GetHit >
//<------------------------------------------------------------------------------------->
ON=@GetHit
//<[MOD] ------------------- Получаемый урон является магическим ----------------------->
IF (<ARGN2>&dam_magic) || (<ARGN2>&dam_fire)
//<[MOD] ----------------- Применение потери силы магии от резиста --------------------->
IF (<ARGN2>&dam_magic)
ARGN -= <EVAL (<ARGN>*<EVAL <ResistSpells>/25>) / 100>
ENDIF
//<[MOD] ------- Применение потери силы огненной магии от бонуса ResistFire ------------>
IF (<ARGN2>&dam_fire)
ARGN -= <EVAL (<ARGN>*<GetCombatEffect ResistFire>)/100>
ENDIF
//<[MOD] ---- Применение потери силы энергетической магии от бонуса ResistEnergy ------->
IF (<ARGN2>&dam_lightning)
ARGN -= <EVAL (<ARGN>*<GetCombatEffect ResistEnergy>)/100>
ENDIF
//<[MOD] ----- Применение потери силы отравляющей магии от бонуса ResistPoison --------->
IF (<ARGN2>&dam_poison)
ARGN -= <EVAL (<ARGN>*<GetCombatEffect ResistPoison>)/100>
ENDIF
//<[MOD] ------------------- Получаемый урон является физическим ----------------------->
ELSE
//<[MOD] -------- Дополнительный удар со спины (backstab) от оружия ближнего боя ------->
IF (<SRC.TAG0.Backstab>)
SRC.SAY @33, Backstab Damage!
Effect=3,i_fx_glow_spike,6,15,1
ARGN += <EVAL <SRC.TAG.Backstab>>
SRC.TAG.Backstab =
ENDIF
//<[MOD] --------------- Критический удар оружием от оружия ближнего боя --------------->
IF (<SRC.TAG0.Critical>)
SRC.SAY @33, Critical Damage!
Effect=3,i_fx_glow_spike,6,15,1
ARGN += <EVAL <SRC.TAG.Critical>>
SRC.TAG.Critical =
//<[MOD] --------------------------- Генерирование крови ------------------------------->
SERV.NEWITEM={0122a 1 0122b 1 0122c 1 0122d 1 0122e 1 0122f 1}
NEW.P=<P>
NEW.ATTR=012
NEW.TIMER=3
ENDIF
//<[MOD] -------------------- Уменьшение урона от количества брони --------------------->
ARGN -= <EVAL (<AC>*45)/100>
//<[MOD] -------------------- Сопративляемость к физическому урону --------------------->
ARGN -= <EVAL (<ARGN>*<GetCombatEffect ResistPhysical>)/100>
//<[MOD] ---------------- ворот от удара бонусом "увернуться от удара" ----------------->
IF (<ARGN> > 0) && (RAND(100) < <EVAL <GetCombatEffect DefenseChance>>)
//<[FIX] ----------- Выводим игрока из парализа, если он в нём ------------------->
TRY FINDID.i_rune_paralyze.REMOVE
TRY FINDID.i_rune_paralyze_field.REMOVE
SYSMESSAGE @73, You perform a masterful defense!
SRC.SYSMESSAGE @33, <NAME> perform a masterful defense.
ARGN=0
RETURN 1
ENDIF
//<[MOD] --------------------------- Генерирование крови ------------------------------->
IF !(<R4>)
SERV.NEWITEM={0122a 1 0122b 1 0122c 1 0122d 1 0122e 1 0122f 1}
NEW.P=<P>
NEW.ATTR=012
NEW.TIMER=3
ENDIF
//<[FIX] ------------- Поломка одетых предметов брони при получении урона -------------->
IF !(<R25>)
DamageEquipedArmor
ENDIF
ENDIF
//<[MOD] ---------------------- Выполнение результатов урона --------------------------->
IF (<ARGN> > 0)
//<[MOD] --------------- Прерывание каста с книшки, при получении удара ---------------->
IF (<SRC.UID>!=<UID>) && !(<TAG0.IsScroll>) && (<ACTION>==Skill_Magery)
ACTION=-1
ENDIF
//<[FIX] ---------------- Выводим игрока из парализа, если он в нём -------------------->
TRY FINDID.i_rune_paralyze.REMOVE
TRY FINDID.i_rune_paralyze_field.REMOVE
//<[MOD] ------------------- Вывод информации о получении урона ------------------------>
SAY @<QVAL (<ARGN2>&dam_magic)?0c2:021>, -<EVAL <ARGN>>
ENDIF
//<[MOD] ---------- Установка GOD типа урона, так как сделали все вычисления ----------->
ARGN2=01 // Чтоб урон прошёл на столько, чему равно ARGN
[EOF]
Вывод информации о бонусах у предметов при наведении на предмет курсора, только для клиентов 5.0.x+
Код
[EVENTS e_weapons]
//<[MOD] ------------------------ Вывод Tooltip-ов предметов --------------------------->
ON=@ItemClientToolTip
IF (<ARGO.TAG0.Luck>)
ADDCLILOC 1060436,+<dARGO.TAG0.Luck>
ENDIF
IF (<ARGO.TAG0.IncreaseGold>)
ADDCLILOC 1060414,<dARGO.TAG0.IncreaseGold>
ENDIF
IF (<ARGO.TAG0.SelfRepair>)
ADDCLILOC 1060450,<dARGO.TAG0.SelfRepair>%
ENDIF
IF (<ARGO.TAG0.ResistPhysical>)
ADDCLILOC 1060448,<dARGO.TAG0.ResistPhysical>
ENDIF
IF (<ARGO.TAG0.DefenseChance>)
ADDCLILOC 1060408,<dARGO.TAG0.DefenseChance>
ENDIF
IF (<ARGO.TAG0.DamageIncrease>)
ADDCLILOC 1060402,<dARGO.TAG0.DamageIncrease>
ENDIF
IF (<ARGO.TAG0.DamageSpeed>)
ADDCLILOC 1060486,<dARGO.TAG0.DamageSpeed>
ENDIF
IF (<ARGO.TAG0.QuickCast>)
ADDCLILOC 1060413,<dARGO.TAG0.QuickCast>
ENDIF
IF (<ARGO.TAG0.LowerManaCost>)
ADDCLILOC 1060433,<dARGO.TAG0.LowerManaCost>
ENDIF
IF (<ARGO.TAG0.ResistCold>)
ADDCLILOC 1060445,<dARGO.TAG0.ResistCold>
ENDIF
IF (<ARGO.TAG0.ResistEnergy>)
ADDCLILOC 1060446,<dARGO.TAG0.ResistEnergy>
ENDIF
IF (<ARGO.TAG0.ResistFire>)
ADDCLILOC 1060447,<dARGO.TAG0.ResistFire>
ENDIF
IF (<ARGO.TAG0.ResistPoison>)
ADDCLILOC 1060449,<dARGO.TAG0.ResistPoison>
ENDIF
IF (<ARGO.TAG0.IncreaseStr>)
ADDCLILOC 1060659,Strength,+<dARGO.TAG0.IncreaseStr>
ENDIF
IF (<ARGO.TAG0.IncreaseDex>)
ADDCLILOC 1060660,Dexterity,+<dARGO.TAG0.IncreaseDex>
ENDIF
IF (<ARGO.TAG0.IncreaseInt>)
ADDCLILOC 1060661,Intelligence,+<dARGO.TAG0.IncreaseInt>
ENDIF
IF (<ARGO.TAG0.RegenHits>)
// ADDCLILOC 1060659,Life Regeneration,+<dARGO.TAG0.RegenHits>
ADDCLILOC 1060444,+<dARGO.TAG0.RegenHits>
ENDIF
IF (<ARGO.TAG0.RegenStam>)
// ADDCLILOC 1060660,Stamina Regeneration,+<dARGO.TAG0.RegenStam>
ADDCLILOC 1060443,+<dARGO.TAG0.RegenStam>
ENDIF
IF (<ARGO.TAG0.RegenMana>)
// ADDCLILOC 1060661,Mana Regeneration,+<dARGO.TAG0.RegenMana>
ADDCLILOC 1060440,+<dARGO.TAG0.RegenMana>
ENDIF
IF (<ARGO.TAG0.CraftedBy>)
ADDCLILOC 1050043,<dARGO.TAG0.CraftedBy>
ENDIF
//<[MOD] ---------------------- Применение резистов от предметов ------------------------>
ON=@ItemEquip
IF (<ACT.TAG0.Luck>)
SRC.LUCK += <ACT.TAG0.Luck>
ENDIF
IF (<ACT.TAG0.ResistPhysical>)
SRC.MODAC += <EVAL (<ACT.GetRealArmor>*<ACT.TAG0.ResistPhysical>)/100>
ENDIF
IF (<ACT.TAG0.ResistCold>)
SRC.RESCOLD += <ACT.TAG0.ResistCold>
ENDIF
IF (<ACT.TAG0.ResistEnergy>)
SRC.RESENERGY += <ACT.TAG0.ResistEnergy>
ENDIF
IF (<ACT.TAG0.ResistFire>)
SRC.RESFIRE += <ACT.TAG0.ResistFire>
ENDIF
IF (<ACT.TAG0.ResistPoison>)
SRC.RESPOISON += <ACT.TAG0.ResistFire>
ENDIF
IF (<ACT.TAG0.IncreaseStr>)
SRC.MODSTR += <ACT.TAG0.IncreaseStr>
ENDIF
IF (<ACT.TAG0.IncreaseDex>)
SRC.MODDEX += <ACT.TAG0.IncreaseDex>
ENDIF
IF (<ACT.TAG0.IncreaseInt>)
SRC.MODINT += <ACT.TAG0.IncreaseInt>
ENDIF
//<[MOD] ------------------------ Снятие резистов от предметов -------------------------->
ON=@ItemUnequip
IF (<ACT.TAG0.Luck>)
SRC.LUCK -= <ACT.TAG0.Luck>
ENDIF
IF (<ACT.TAG0.ResistPhysical>)
SRC.MODAC -= <EVAL (<ACT.GetRealArmor>*<ACT.TAG0.ResistPhysical>)/100>
ENDIF
IF (<ACT.TAG0.ResistCold>)
SRC.RESCOLD -= <ACT.TAG0.ResistCold>
ENDIF
IF (<ACT.TAG0.ResistEnergy>)
SRC.RESENERGY -= <ACT.TAG0.ResistEnergy>
ENDIF
IF (<ACT.TAG0.ResistFire>)
SRC.RESFIRE -= <ACT.TAG0.ResistFire>
ENDIF
IF (<ACT.TAG0.ResistPoison>)
SRC.RESPOISON -= <ACT.TAG0.ResistFire>
ENDIF
IF (<ACT.TAG0.IncreaseStr>)
SRC.MODSTR -= <ACT.TAG0.IncreaseStr>
ENDIF
IF (<ACT.TAG0.IncreaseDex>)
SRC.MODDEX -= <ACT.TAG0.IncreaseDex>
ENDIF
IF (<ACT.TAG0.IncreaseInt>)
SRC.MODINT -= <ACT.TAG0.IncreaseInt>
ENDIF
[EOF]
Таймеры для ПВП системы и других систем, каждый таймер я писал для глюков/багов на сервере и клиенте. Возможно некоторые могут вам сильно пригодиться.
[code]
//& #60;============================================================================
=========>
//<------------------------------------------------------------------------------------->
//<- Ultima Online: The Odyssey ->
//<- Sphere Version: 56x (56b-Nightly) ->
//<- Script Author: Breaker (Cache) ->
//<- ->
//<- Last edit date: 20.12.2006 ->
//<------------------------------------------------------------------------------------->
//& #60;============================================================================
=========>
//<[MOD] ----------------------- Мемори на Incognito спелл ----------------------------->
[ITEMDEF i_memory_incognito]
DEFNAME=i_memory_incognito
NAME=Memory incognito
ID=020a2
TYPE=t_eq_script
ON=@Create
ATTR=attr_move_never|attr_newbie|attr_invis|attr_magic
ON=@Equip
NAME=<LINK.NAME>
IF !(<LINK.FLAGS>&statf_incognito)
LINK.FLAGS=<LINK.FLAGS>|statf_incognito
ENDIF
LINK.NAME=<QVAL (<LINK.OBODY>==c_man)?#NAMES_HUMANMALE:#NAMES_HUMANFEMALE>
TIMER=<EVAL <SERV.SPELL.35.DURATION>/10>
ON=@Unequip
IF (<LINK.FLAGS>&statf_incognito)
LINK.FLAGS=<LINK.FLAGS>&~statf_incognito
ENDIF
LINK.NAME=<NAME>
ON=@Timer
REMOVE
RETURN 1
//<[MOD] ----------------- Мемори на использование землятресения ------------------------>
[ITEMDEF i_spell_earthquake]
DEFNAME=i_spell_earthquake
NAME=Earthquake
ID=020b8
TYPE=t_eq_script
ON=@Create
ATTR=attr_move_never|attr_newbie|attr_invis|attr_magic
//MORE = Damage argn
//LINK = Attacker UID
//MOREM = Time Tick
ON=@Timer
IF (<MOREM>)
OBJ=<UID>
FORCHARS 15
IF (<FLAGS>&statf_dead) || (<FLAGS>&statf_invul)
ELIF (<REGION.FLAGS>®ion_flag_safe)
ELIF (<REGION.FLAGS>®ion_flag_no_pvp)
ELIF (<EVAL 0<ACCOUNT.PLEVEL>> > 1)
ELSE
UID.<OBJ.LINK>.SYSMESSAGE <NAME> damaged on <EVAL <OBJ.MORE>>
DAMAGE <EVAL <OBJ.MORE>> 0004 <OBJ.LINK>
ENDIF
ENDFOR
MOREM=<MOREM> - 1
TIMER=2
ELSE
REMOVE
ENDIF
RETURN 1
//<[MOD] -------------------------- Мемори на использование яда ------------------------>
[ITEMDEF i_memory_poison]
ID=02093
TYPE=t_eq_script
NAME=Memory poison
ON=@Create
ATTR=attr_move_never|attr_newbie|attr_invis|attr_magic
//MORE1 = Poison damage
//MORE2 = Attacker UID
ON=@Equip
LINK.SYSMESSAGE You have been poisoned!
IF !(<LINK.FLAGS>&statf_poisoned)
LINK.FLAGS=<LINK.FLAGS>|statf_poisoned
ENDIF
LINK.UPDATE
TIMER=3
ON=@Unequip
IF (<LINK.FLAGS>&statf_poisoned)
LINK.FLAGS=<LINK.FLAGS>&~statf_poisoned
ENDIF
LINK.UPDATE
ON=@Timer
IF (<LINK.FLAGS>&statf_dead) || !(<MOREM>)
REMOVE
ELIF !(<LINK.FLAGS>&statf_invul)
LINK.DAMAGE <EVAL <MORE>> 0000c <MORE2>
DOSWITCH <EVAL <MORE>/10>
LINK.SYSMESSAGE You feel sickly
LINK.SYSMESSAGE You feel sickly
LINK.SYSMESSAGE You feel very ill
LINK.SYSMESSAGE You feel extremely sick
LINK.SYSMESSAGE You feel deadly sick
LINK.SYSMESSAGE You feel lethaly sick
ENDDO
MOREM=<MOREM> - 1
TIMER=3
ENDIF
RETURN 1
//<[MOD] ------------------------ Мемори на изменение статов --------------------------->
[ITEMDEF i_memory_spell_stats]
DEFNAME=i_memory_spell_stats
NAME=memory spell stats
ID=02093
LAYER=32
TYPE=t_eq_script
ON=@Create
ATTR=attr_decay|attr_newbie|attr_invis
ON=@Equip
IF (<MOREM>)
CONT.MODSTR += <MOREX>
CONT.MODDEX += <MOREY>
CONT.MODINT += <MOREZ>
ELSE
CONT.MODSTR -= <MOREX>
CONT.MODDEX -= <MOREY>
CONT.MODINT -= <MOREZ>
ENDIF
ON=@Unequip
CONT.RemoveSpellBuff <dMORE1>
IF (<MOREM>)
CONT.MODSTR -= <MOREX>
CONT.MODDEX -= <MOREY>
CONT.MODINT -= <MOREZ>
ELSE
CONT.MODSTR += <MOREX>
CONT.MODDEX += <MOREY>
CONT.MODINT += <MOREZ>
ENDIF
ON=@Timer
REMOVE
RETURN 1
//<[MOD] -------------------------- Мемори на лечение с бинтов ------------------------->
[ITEMDEF i_memory_healing]
DEFNAME=i_memory_healing
ID=i_memory
NAME=Memory Healing
TYPE=t_eq_script
CATEGORY=Memory Objects
SUBSECTION=Bandage
DESCRIPTION=Healing
ON=@Create
ATTR=attr_move_never|attr_newbie|attr_invis
ON=@Equip
CONT.EVENTS +e_healing
ON=@Unequip
IF (<CONT.IsEVENT.e_healing>)
CONT.SYSMESSAGE You apply the bandeges, but they barely help.
CONT.EVENTS -e_healing
ENDIF
ON=@Timer
IF !(<EVAL <SERV.UID.<LINK>.UID>>)
CONT.SYSMESSAGE You apply the bandeges, but they barely help.
ELIF (<LINK.FLAGS>&statf_dead)
CONT.SYSMESSAGE You apply the bandeges, but they barely help.
ELIF (<LINK.FLAGS>&statf_freeze)
LINK.SYSMESSAGE You apply the bandeges, but they barely help.
ELIF (RAND(<EVAL <CONT.Healing>/10>) < 5)
IF (<CONT.UID>==<LINK.UID>)
CONT.SYSMESSAGE You apply the bandeges, but they barely help.
ELSE
LINK.SYSMESSAGE <CONT.NAME> fail to heal you.
CONT.SYSMESSAGE You fail to heal <LINK.NAME>.
ENDIF
ELSE
//<---------------- Если игрок лечит игрока, то юзаем формулу хелинга ------------------>
IF !(<MOREM>)
MORE1=<EVAL (<CONT.Healing>/25) + (<CONT.Anatomy>/25) + (<CONT.FOOD>/10)>
MORE2=<EVAL RAND(<CONT.Healing>/25) + (<CONT.Anatomy>/25) + (<CONT.FOOD>/10)>
ELSE
//<-------------- Если игрок лечит существо, то юзаем формулу ветеринарии -------------->
MORE1=<EVAL (<CONT.Veterinary>/25) + (<CONT.Anatomy>/25) + (<CONT.FOOD>/10)>
MORE2=<EVAL RAND(<CONT.Veterinary>/25) + (<CONT.Anatomy>/25) + (<CONT.FOOD>/10)>
ENDIF
//<------------------------------- Хелим результатом игрока ---------------------------->
LINK.HITS=<LINK.HITS> + <MORE2>
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
ENDIF
//<------------------------------ Создаём оидн грязный бинт ---------------------------->
// CONT.SYSMESSAGE @93 Maximum Heal: <EVAL <MORE1>>
IF (<CONT.UID>==<LINK.UID>)
CONT.SYSMESSAGE @93 You healed on <EVAL <MORE2>> hits.
ELSE
CONT.SYSMESSAGE @93 You healed <LINK.NAME> on <EVAL <MORE2>> hits.
LINK.SYSMESSAGE @93 <CONT.NAME> healed you on <EVAL <MORE2>> hits.
ENDIF
IF !(<MOREZ>) // Bandage Type? 0-Clean / 1-Bloody
CONT.SYSMESSAGE You put the bloody bandage in your pack.
SERV.NEWITEM=i_bandage_bloody
NEW.CONT=<CONT.FINDLAYER.21.UID>
ENDIF
CONT.EVENTS -e_healing
ENDIF
REMOVE
RETURN 1
//<[MOD] -------------------------- Мемори на навык медитации -------------------------->
[ITEMDEF i_memory_meditation]
DEFNAME=i_memory_meditation
NAME=memory meditation
ID=i_memory
TYPE=t_eq_script
ON=@Create
ATTR=attr_decay|attr_newbie|attr_invis
ON=@Timer
CONT.SYSMESSAGE @73, You restore <EVAL (<CONT.Meditation>/75)+1> mana points.
CONT.MANA=<CONT.MANA> + (<CONT.Meditation>/75)+1
IF (<CONT.MANA> > <CONT.INT>)
CONT.MANA=<CONT.INT>
ENDIF
//<----------------------------- Формула SkillGain медитации --------------------------->
IF (<CONT.Meditation> < 1000) && (<EVAL RAND(<CONT.Meditation>)> < 50) && !(<CONT.REGION.FLAGS>®ion_flag_safe) && !(<CONT.REGION.FLAGS>®ion_flag_no_pvp)
CONT.Meditation=<CONT.Meditation> + 1
ENDI
Сообщение отредактировал Narayan - 8.4.2014, 19:55