Thread Rating:
- 0 Votes - 0 Average
- 1
- 2
- 3
- 4
- 5
About the new combat system
|
Author |
Message |
Lazarus 
Master
 
Posts: 352
Likes Given: 11
Likes Received: 7 in 6 posts
Joined: Jun 2012
Reputation: 1
Hybris Ultima Online
![]()
|
RE: About the new combat system
Edited with some changes that XuN made because something was wrong:
Code:
[function f_hitchance]
// src should be my target
if !(<src.isChar>)
return <r31>// must be a training dummy
endif
if ((<brain>==brain_guard) && (<serv.GuardsInstantKill>==1))
return 0
endif
// Frozen targets should be easy.
if ((<src.flags>&statf_freeze) || (<src.flags>&statf_sleeping))
return <r10>
endif
local.iSkillVal = <i.<serv.skill.<action>.key>> //<i.<action>> // value of the skill whe are using to hit.
// Offensive value mostly based on your skill and TACTICS.
// 0 - 1000
local.iSkillAttack = <local.iSkillVal> + <eval <tactics>/2>
// Defensive value mostly based on your tactics value and random DEX,
// 0 - 1000
local.iSkillDefend = <src.tactics>
// Make it easier to hit people havin a bow or crossbow due to the fact that its
// not a very "mobile" weapon, nor is it fast to change position while in
// a fight etc. Just use 90% of the statvalue when defending so its easier
// to hit than defend == more fun in combat.
local.iStam= <src.dex>
if (<serv.skill.<action>.flags>&skf_ranged)
// The defender uses ranged weapon and the attacker is not.
// Make just a bit easier to hit.
local.iSkillDefend = (<local.iSkillDefend> + (<local.iStam>*9))/2
else
// The defender is using a nonranged, or they both use bows.
local.iSkillDefend = (<local.iSkillDefend> + (<local.iStam>*10))/2
endif
local.iDiff = <eval (<local.iSkillAttack> - <local.iSkillDefend>) /5>
local.iDiff /= 10
if (<local.iDiff> < 0)
local.iDiff = 0 // just means it's very hard.
elseif (<local.iDif>> 100)
local.iDiff = 100 // just means it's very easy.
endif
return <r<local.iDiff>> //always need to have some chance.
still working weird. A Attacker with 0 all skills and a defender with 100 tactics still hits him 10/10 chances o.O
Actdiff = 0
Actdiff = 100
is the same in hittry.  something is there that we don't know.
XuN asked me to test it in ON=@Start, for example in swordsmanship.
There works perfectly
Actdiff = 0 (fails almost every hit)
actdiff = 100 (hit everytime)
(This post was last modified: 07-21-2015 06:50 AM by Lazarus.)
|
|
07-21-2015 04:35 AM |
|
|
Lazarus 
Master
 
Posts: 352
Likes Given: 11
Likes Received: 7 in 6 posts
Joined: Jun 2012
Reputation: 1
Hybris Ultima Online
![]()
|
RE: About the new combat system
(07-24-2015 01:07 AM)Rizz Wrote: Lazarus, is this code ok now? How should I use it? Why @start and not @hittry?
On the bugtracker you said "Something weird is happening there"
No, the code is without *ERRORS* but the <actdiff> is not changing, something weird is happening in the calculations.
I tried all what I can with my brain haha  but nothing happens.
Tried on=@start of sword but still the calculations are wrong. There you can change the actdiff but triggers too when you try to attack someone (without attacking him with the weapon)
so... I'm just waiting for a God who can help us.
I will try now a on=@hittry
if sword... if mace... etc.
skillgain.
|
|
07-24-2015 03:50 AM |
|
|
Lazarus 
Master
 
Posts: 352
Likes Given: 11
Likes Received: 7 in 6 posts
Joined: Jun 2012
Reputation: 1
Hybris Ultima Online
![]()
|
RE: About the new combat system
(07-24-2015 04:09 AM)Rizz Wrote: Mine is correct... but check it anyway
Code:
[function f_HitChance]
REF1=<args>
// REF1 should be my target
if !(<REF1.isChar>)
return <r31>// must be a training dummy
endif
if ((<brain>==brain_guard) && (<serv.GuardsInstantKill>==1))
return 0
endif
// Frozen targets should be easy.
if ((<REF1.flags>&statf_freeze) || (<REF1.flags>&statf_sleeping))
return <r10>
endif
local.iSkillVal = <<serv.skill.<action>.key>> // value of the skill whe are using to hit.
// Offensive value mostly based on your skill and TACTICS.
// 0 - 1000
local.iSkillAttack = <eval (<local.iSkillVal> + ( <tactics>/2))>
serv.b local.iSkillAttack <dlocal.iSkillAttack>
// Defensive value mostly based on your tactics value and random DEX,
// 0 - 1000
local.iSkillDefend = <REF1.tactics>
// Make it easier to hit people havin a bow or crossbow due to the fact that its
// not a very "mobile" weapon, nor is it fast to change position while in
// a fight etc. Just use 90% of the statvalue when defending so its easier
// to hit than defend == more fun in combat.
local.iStam= <REF1.dex>
if (<serv.skill.<action>.flags>&skf_ranged)
// The defender uses ranged weapon and the attacker is not.
// Make just a bit easier to hit.
local.iSkillDefend = (<dlocal.iSkillDefend> + (<dlocal.iStam>*9))/2
serv.b local.iSkillDefend1 <dlocal.iSkillDefend>
else
// The defender is using a nonranged, or they both use bows.
local.iSkillDefend = (<dlocal.iSkillDefend> + (<dlocal.iStam>*10))/2
serv.b local.iSkillDefend2 <dlocal.iSkillDefend>
endif
local.iDiff = ((<dlocal.iSkillAttack> - <dlocal.iSkillDefend>) /5)
serv.b local.iDiff <dlocal.iDiff>
local.iDiff /= 10
serv.b local.iDiff <dlocal.iDiff>
if (<local.iDiff> < 0)
local.iDiff = 0 // just means it's very hard.
elseif (<local.iDiff>> 100)
local.iDiff = 100 // just means it's very easy.
endif
return <r<local.iDiff>> //always need to have some chance.
How do you call it?
ON=@HITTRY
actdiff = <f_hitchance>
??
Thanks, trying.
(This post was last modified: 07-24-2015 04:36 AM by Lazarus.)
|
|
07-24-2015 04:30 AM |
|
|
User(s) browsing this thread: 3 Guest(s)