The following warnings occurred:
Warning [2] Use of undefined constant SAPI_NAME - assumed 'SAPI_NAME' (this will throw an Error in a future version of PHP) - Line: 3388 - File: inc/functions.php PHP 7.4.33-nmm7 (Linux)
File Line Function
/inc/functions.php 3388 errorHandler->error
/showthread.php 116 build_archive_link
Warning [2] Use of undefined constant IN_ARCHIVE - assumed 'IN_ARCHIVE' (this will throw an Error in a future version of PHP) - Line: 3331 - File: inc/functions.php PHP 7.4.33-nmm7 (Linux)
File Line Function
/inc/functions.php 3331 errorHandler->error
/inc/functions.php 3324 build_forum_breadcrumb
/showthread.php 195 build_forum_breadcrumb
Warning [2] Use of undefined constant IN_ARCHIVE - assumed 'IN_ARCHIVE' (this will throw an Error in a future version of PHP) - Line: 3331 - File: inc/functions.php PHP 7.4.33-nmm7 (Linux)
File Line Function
/inc/functions.php 3331 errorHandler->error
/showthread.php 195 build_forum_breadcrumb






Post Reply 
 
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

Post: #11
RE: About the new combat system
something to add: IF you don't hit them you will not get skillgain from that weapon.

0 skill = fail everytime = 0 skill
10 skill = fail everytime = 0 skill
50 skill = fail everytime = 0 skill

Really, maybe it is because I don't use hit chance increase (because I use old formulas without props in weapons)
If you can do something like this, will be a bless:
use old hit chance formula(rescripted) /new hit chance formula option.

[Image: 2hy9q0y.png]
07-19-2015 07:53 AM
Visit this user's website Find all posts by this user Like Post Quote this message in a reply
Coruja
Sphere Developer
*****

Posts: 987
Likes Given: 5
Likes Received: 226 in 187 posts
Joined: Jul 2012
Reputation: 7

Dimension Shard

Post: #12
RE: About the new combat system
since there's many ppl each one wanting different combat formulas, maybe the best solution is use triggers (eg: custom block chance formula on @Hit, custom swing speed on @HitTry, ...) or even move to the softcoded combat engine instead use the hardcoded engine

because if we add a select switch to each internal formula, the code will become a real mess (and also heavy) Tongue
07-20-2015 02:34 AM
Find all posts by this user Like Post Quote this message in a reply
Lazarus
Master
**

Posts: 352
Likes Given: 11
Likes Received: 7 in 6 posts
Joined: Jun 2012
Reputation: 1

Hybris Ultima Online

Post: #13
RE: About the new combat system
(07-20-2015 02:34 AM)Coruja Wrote:  since there's many ppl each one wanting different combat formulas, maybe the best solution is use triggers (eg: custom block chance formula on @Hit, custom swing speed on @HitTry, ...) or even move to the softcoded combat engine instead use the hardcoded engine

because if we add a select switch to each internal formula, the code will become a real mess (and also heavy) Tongue

Maybe update some sphere_combat_formulas.scp were you can activate them with a single option in sphere.ini (Speed formula is now in Sphere.ini, and that is perfect)
Of course, you will need that .scp in your sphere scripts folder. Is not hardcoded. (you just need a switch in the original code of sphere)

If you play some old shard, this hit chance formula is bad for you. Because the skill didn't increase when you fail (is hard to train in old shards) and you can't hit anyone with 30 or 40 weapon skill, even creatures like zombies :'(

[Image: 2hy9q0y.png]
(This post was last modified: 07-20-2015 03:13 AM by Lazarus.)
07-20-2015 03:13 AM
Visit this user's website Find all posts by this user Like Post Quote this message in a reply
XuN
Sphere Developer
*****

Posts: 852
Likes Given: 102
Likes Received: 156 in 119 posts
Joined: Jul 2013
Reputation: 30



Post: #14
RE: About the new combat system
Well, you are right in the part we should update sphere_combat.scp but to be honest it's a pain in the ass to softcode such a large script, even more when more changes are coming and coming to the combat engine ... it will be done once it reached some kind of final state.

But for now you can take a look on sphere_combat.scp (for this old shard) and use the formula I pasted you here, since speed formulas were added as a switchable option in the ini, damage is being calculated in the script, and you have the hitchance formula here too ... you have the whole old combat at your disposal.
07-20-2015 05:22 PM
Find all posts by this user Like Post Quote this message in a reply
Lazarus
Master
**

Posts: 352
Likes Given: 11
Likes Received: 7 in 6 posts
Joined: Jun 2012
Reputation: 1

Hybris Ultima Online

Post: #15
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. Tongue 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)

[Image: 2hy9q0y.png]
(This post was last modified: 07-21-2015 06:50 AM by Lazarus.)
07-21-2015 04:35 AM
Visit this user's website Find all posts by this user Like Post Quote this message in a reply
Rizz
Master
**

Posts: 396
Likes Given: 21
Likes Received: 14 in 9 posts
Joined: Oct 2012
Reputation: 0



Post: #16
RE: About the new combat system
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"
07-24-2015 01:07 AM
Find all posts by this user Like Post Quote this message in a reply
Lazarus
Master
**

Posts: 352
Likes Given: 11
Likes Received: 7 in 6 posts
Joined: Jun 2012
Reputation: 1

Hybris Ultima Online

Post: #17
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 Tongue 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.

[Image: 2hy9q0y.png]
07-24-2015 03:50 AM
Visit this user's website Find all posts by this user Like Post Quote this message in a reply
Rizz
Master
**

Posts: 396
Likes Given: 21
Likes Received: 14 in 9 posts
Joined: Oct 2012
Reputation: 0



Post: #18
RE: About the new combat system
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.
(This post was last modified: 07-24-2015 04:27 AM by Rizz.)
07-24-2015 04:09 AM
Find all posts by this user Like Post Quote this message in a reply
Lazarus
Master
**

Posts: 352
Likes Given: 11
Likes Received: 7 in 6 posts
Joined: Jun 2012
Reputation: 1

Hybris Ultima Online

Post: #19
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.

[Image: 2hy9q0y.png]
(This post was last modified: 07-24-2015 04:36 AM by Lazarus.)
07-24-2015 04:30 AM
Visit this user's website Find all posts by this user Like Post Quote this message in a reply
Rizz
Master
**

Posts: 396
Likes Given: 21
Likes Received: 14 in 9 posts
Joined: Oct 2012
Reputation: 0



Post: #20
RE: About the new combat system
Should be if I can remember well

actdiff = <f_hitchance <src.uid>>

I am not using it right now and I replaced the script lol
07-24-2015 04:39 AM
Find all posts by this user Like Post Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 2 Guest(s)