Gondor vs Mordor 2 logo
Home Forum Wiki Map Downloads
Become part of the community!
 
 
User Info
Welcome, Guest. Please login or register.
Did you miss your activation email?
28 March 2024, 22:57

Login with username, password and session length

Search:     Advanced search
News Box
Welcome to (Gondor vs Mordor)².

Key Stats
13122 Posts in 1336 Topics by 1240 Members
Latest Member: azihohaloyen
Home Help Search Calendar Login Register
Gondor vs Mordor  |  Gondor vs Mordor 1  |  GvM1 Future Talk (Moderator: Rade)  |  proposal: HIPS capability
Pages: [1] 2 Print
Author Topic: proposal: HIPS capability  (Read 11617 times)
Lief
Poster
**
Offline Offline

Plays: Gondor
Posts: 133



View Profile
« on: 14 August 2010, 03:51 »

Howdy all,

A suggestion was made to move the HIPS capability to a higher SD level. The author opposes such a move. Among other things, such a suggestion would cause issues with existing toons that only have 1 level of SD. 

This proposal takes a different approach to an earlier mechanism, i.e. if not 10+ sd, then timer is imposed. As the author is not well versed in scripting, the objective is not to outline the implementation, but rather to provide a method of approaching the issue. Indeed, this proposal is primarily aimed at generating debate on an approach that does not involve moving the HIPS capability to a higher SD level.

The core of this proposal is the fact that testing in a leveler mod revealed the following:

Question1: if a sneak toon (level 21 - monk 16 F 4 sd 1 with 0 hide and 0 move silently (modified, not naked)) tries to HIPS, can he/she/it cause action cancels?
Answer1: testing in leveler mod against a human monk opponent and later against human fighter opponent and finally against an AA (i.e. elf) - RESULT: spamming hips does nothing; the three NPCs appear to ignore the HIPS spamming.

Question2: similar to Question1, but toon has 10 hide and 10 ms (modified, not naked)
Answer2: in each case against the three NPCs, the NPCs stopped attacking; this suggests that in the GvM setting, if hide and ms are positive numbers, then action cancelling is possible.

Absent confirmation or contradiction in the GvM setting, this proposal will work under the theory that a presumption can be made. Accordingly, the proposal will impose a hide/ms skill penalty that would bring these skills to zero (0).




Proposal Overview:
AA. This proposal affects HIPSing toons, whether SD or shifter, only to the extent that their time in HIPS mode (and re-entry) are timed.
BB, After time runs out (or if the player sneak voluntarily leaves HIPS mode), the toon sneak will incur a temporary penalty to the hide/ms skills so that these skills are reduced to zero (0).
CC. The duration of the hide/ms skill penalty depends in part on the value derived in part AA.



Proposal Details:

AA. HIPS_Duration
Objective: determine how long HIPS will last before the skill penalty applies

    HIPS_Duration = 1d20 + Factor_Class + Factor_RaceFeats + Factor_Skills

Factor_Class =  { SD lvl + (shifter - 7) + roundDown[(assassin - 14) / 2] + roundDown[(ranger - 21) / 3] + roundDown[(rogue - 13 ) / 3 ]  }

Factor_RaceFeats = smallStature + stealthy + skFoc_hide + EskFoc_hide + skFoc_ms + EskFoc_ms + Lucky + SelfConcealment

Factor_Skills = roundDown((Skill_Hide + Skill_MS)/10)


HIPS_Duration min: 1 round (i.e. 6 sec)
HIPS_Duration max: 100 rounds (= 10 turns = 10 min)

Factor_Class: 1 minimum to 30 max

smallStature: 0 or 2 (halflings and gnomes get this "feat")
stealthy: 0 or 5
skFoc_hide: 0 or 1
EskFoc_hide: 0 or 1
skFoc_ms: 0 or 1
EskFoc_ms: 0 or 1
Lucky: 0 or 4
SelfConcealment: 0 or 2 or 4 or 6 or 8 or 10

Notes:
1. classes:
  shftr 7: kobald kommander can HIPS (lowest level shifter that can hips)
  assassin14: toon can get keen senses with alertness feat
  ranger21: toon can take bane of enemies as a general epic feat
  rogue 13: if not monk, nor sd, then 13 rogue levels is minimum needed for qualifying for epic dodge


2. Skill_Hide and Skill_MS is the modified skill (i.e. with items/buffs/dex mod)
  (a) Skills (hide/ms) are assigned a lower weight in the formula for the simple reason that any sneak will logically have high values for these two skills.

  (b) The author is uncertain whether nwn will consider the existence of skFoc_hide, for example, if the toon also has EskFoc_hide. If not, then assign 0 or 2 to EskFoc_hide. Ultimately, the purpose is to give a max of 2 for having both skFoc_hide and EskFoc_hide.


3. The feats stealthy and Lucky are given greater weight because they are relevant to the idea of sneaking, but yet are not normally selected for builds. 




BB: HIPS_Penalty_[Skill]
  Objective: after time runs out (i.e. HIPS_Duration) or if the player sneak voluntarily leaves HIPS mode, script should apply penalty to hide/ms skills of player sneak so that he/she/it temporarily will have have hide and ms = 0

  Penalty_Skill_Hide = Penalty[result of GetSkillRank] - Player_Skill_Hide = 0
  Penalty_Skill_MS = similar to above

  comments:
  1. ?? use GetSkillRank with FALSE nBaseSkillRank to get modified skills (hide/ms), i.e. do NOT use the base/naked skills

  2. ?? use EffectSkillDecrease(int, int) to apply the penalty (http://www.nwnlexicon.com/compiled/function.effectskilldecrease.html)
   Possible issues:
    (a) for GvM players, is there a concern re: "Immunity: Skill decrease?"

    (b) "limit for nValue is unknown" - if this function has a hardwired max, then there might be an issue with trying to bring the player sneak's hide/ms skills to zero (since the GetSkillRank value will likely exceed the allowable max under this function).


  3. player counter - bard song
    (a) Can players do an endrun around this temporary penalty to hide/ms by using bard song ? See the above web link and note the language: "It is unknown if these stack or counter Increases in skills."

    (b) If so, perhaps make the player deaf via EffectDeaf() for a duration to equal to the HIPS_Wait ? If this route is used, would it unnecessarily handicap sneaking mages?




CC: HIPS_Wait
Objective: sets an end to the temporary penalty to the hide/ms skills

    HIPS_Wait = ROUNDDOWN([max(HIPS_Duration) - HIPS_Duration] / 5, 0)

max(HIPS_Duration) = 100 rounds
min: 1 round (i.e. 6 sec)
max: 20 rounds (i.e. 120 sec)
 
HIPS_Duration   HIPS_Wait
100   0
95   1
90   2
85   3
80   4
75   5
70   6
65   7
60   8
55   9
50   10
45   11
40   12
35   13
30   14
25   15
20   16
15   17
10   18
5   19
1   19
0   20


Notes:

1. scripting
It is unclear to the author by which method step CC might best be achieved. Perhaps one or more of the following is appropriate:

  (a) for bloated script, one could use EffectSkillIncrease(int, int) to remove the effect of the skills penalty. But, KISS is probably best.

  e.g. in any event, one possibility:
  - use DelayCommand(6.0, ExecuteScript("script_name_here", oNPC))
  - use the HIPS_wait instead of the 6.0 value in the formula above
  - for "script_name_here," one could utilize EffectSkillIncrease(int, int)

  (b) use the function RemoveSpecificEffect(int, object) ----- but the skills penalty is not an effect per se ?

  (c) use some function that is unknown to the author that sets a time to the skills penalty to hide/ms


2. Naturally, the HIPS_Duration value from step AA that will be used in step CC must be calculated BEFORE the skills penalty to hide/ms (step BB) is applied. Otherwise, there will be cause for complaint.



Example: 30sd 8 f 2 r

max   factors   
30   class      30
25   race+feat   17
25   skill      8
20   dice, 1d20   20
= 100      = 75

With a HIPS_Duration of 75 rounds, this toon can sit around for 7.5 min in HIPS mode. If this toon leaves HIPS mode, whether voluntarily or not, the skills penalty to hide/ms will persist for 5 rounds, i.e. HIPS_wait is 30 sec.

 


Alternatives:

1. Higher level SD are exempted from the script
For example, the script could be written to exempt a toon with 14+ SD levels from steps AA, BB and CC. Effectively, such a toon would enjoy all the benefits that SD toons have atm.

The 14th SD is targeted because SD 13 grants a bonus feat. Also, 10 SD seems too low given that the exemption from the script can be a powerful advantage under the proposed HIPS scheme.


2. tweaking the duration of HIPS_Wait
If DMs deem that the HIPS_Wait value is unreasonably long, one could modify the "5" divisor. So, one could use "10" instead and get the following:

HIPS_Duration   HIPS_Wait
100   0
90   1
80   2
75   2
70   3
60   4
50   5
40   6
30   7
20   8
10   9
1   9
0   10
Logged
ollebroc
GvM1 Admin
Poster
****
Offline Offline

Plays: Both Factions
Posts: 913



View Profile
« Reply #1 on: 14 August 2010, 05:24 »

The larger the server the more timing scripts don't work correctly. We've tried many timing scripts and they just don't work on this server very well, especially when its been running for a whole day.  BangHead

Another alternative is to give SDs a hide amd Move Silent penalty. This penalty would be lowered with each SD level until like level 10 SD.  cussing
Logged

(\__/)
(='.'=) This is Bunny. Copy and paste bunny into
(")_(") your signature to help him gain world domination.
Lief
Poster
**
Offline Offline

Plays: Gondor
Posts: 133



View Profile
« Reply #2 on: 14 August 2010, 09:59 »

Howdy,

All right. Having built a model based upon your suggested alternative, the resulting formula is certainly much simpler and undoubtedly it will be less stressful on the server than the original HIPS capability proposal.


Presumptions:
1. There is no interest in allowing race (i.e. small stature), nor any of the feats that are enumerated in the original HIPS capability proposal to have an impact on the determination of the hide/ms penalty.

2. As the use of absolute numbers for the penalty likely will raise complications, the model utilised a percentage based formula for determining the hide/ms skills penalty.  

3. It is not appropriate to insert a 1d20 dice into the formula.




Points for consideration:

1. Add shifter class
If the SD class is deemed to be the pivotal factor for determining the hide/ms penalty because of its inherent HIPS capability, then one must add shifter levels into the mix as well. Specifically, just as SD1 gets HIPS capability, Shifter7 also gets HIPS through the Kobold Kommander shape; one certainly does not want a situation where kobald kommanders can do an endrun around this modification to the HIPS capability.

2. set start/end points for the two classes

  Starting points: SD1 and sh7
  End Points: SD10 and sh17  

  Sh7 and sh17, respectively, grant the kobold kommando and epic kobold kommando shapes.

  Although undead shape can be taken at sh10, use of sh10 as an end point would result in a window that is too narrow.

  SD10 was chosen as the "breakeven" level for one primary reason - DMs. Unfortunately (or fortunately), dexer sneaks will take 10 SD levels anyway since this would fulfill the prerequisites for epic dodge.




Amended Proposal HIPS Capability  

The amended formula uses nested if,then,else statements. There likely is a better, nwn solution, but the following formula produces the desired outcome in the simplest way under ... Excel.


Penalty% = subT_Comb x 9

subT_Comb = if((10 - lvl_SD - subT_Sh)<=0,0,(10 - lvl_SD - subT_Sh))

subT_Sh = if((lvl_sh - 7)<=0,0,(lvl_sh - 7))


Penalty% = percentage that will be used to determine the hide/ms skills penalty  
     The product of the Penalty% and the sneak toon's hide/ms is rounded down !

subT_Comb = sub total that takes into account the sneak toon's total SD and shifter levels

subT_Sh = sub total that takes into account the sneak toon's shifter levels


Table AA
sd   sh   subT_sh   subT_Comb   Penalty%
0   0   0   10   90
1   0   0   9   81
2   0   0   8   72
3   0   0   7   63
4   0   0   6   54
5   0   0   5   45
6   0   0   4   36
7   0   0   3   27
8   0   0   2   18
9   0   0   1   9
10   0   0   0   0
11   0   0   0   0

 
Table BB            
sd   sh   subT_sh   subT_Comb   Penalty%
0   0   0   10   90
0   1   0   10   90
0   2   0   10   90
0   3   0   10   90
0   4   0   10   90
0   5   0   10   90
0   6   0   10   90
0   7   0   10   90
0   8   1   9   81
0   9   2   8   72
0   10   3   7   63
0   11   4   6   54
0   12   5   5   45
0   13   6   4   36
0   14   7   3   27
0   15   8   2   18
0   16   9   1   9
0   17   10   0   0
0   18   11   0   0


Table CC
sd   sh   subT_sh   subT_Comb   Penalty%
0   0   0   10   90
1   0   0   9   81
2   1   0   8   72
3   2   0   7   63
4   3   0   6   54
5   4   0   5   45
6   5   0   4   36
7   6   0   3   27
8   7   0   2   18
9   8   1   0   0
10   9   2   0   0
11   10   3   0   0


Table DD
sd   sh   subT_sh   subT_Comb   Penalty%
0   0   0   10   90
0   1   0   10   90
1   2   0   9   81
2   3   0   8   72
3   4   0   7   63
4   5   0   6   54
5   6   0   5   45
6   7   0   4   36
7   8   1   2   18
8   9   2   0   0
9   10   3   0   0
10   11   4   0   0
11   12   5   0   0
12   13   6   0   0
13   14   7   0   0
14   15   8   0   0
15   16   9   0   0
16   17   10   0   0
17   18   11   0   0



Example1:
- player's sneak (Wabbit) is ranger23 Fighter4 SD8 and has 100 hide and 100 ms.
- The Penalty% is 18%.
- This means that until Wabbit takes the next level of SD, his hide and ms will be reduced to 82 hide/82 ms.

Example2:
- player's sneak (Bunny) is ranger21 Fighter4 SD3 and has 75 hide and 75 ms.
- The Penalty% is 63%.
- Applying the Penalty%, Bunny has 27.75 hide and 27.75 ms.
- However, the above number is rounded down; this means that until Bunny takes the next level of SD, her hide and ms will be reduced to 27 hide/ 27 ms.


Comments:

1. The amended formula has the advantage of being simple. However, the primary weakness of this amended formula is that a toon need not have either SD10, nor shifter17 in order to avoid the skills penalty to hide/ms. Of course, if DMs merely selected the SD10 and implicitly shifter17 under the author's interpretation to require more pureness in a build, then the aforementioned issue is moot.

Although there are other permuations, tables CC and DD are merely illustrative of the minimum build for zero skills penalty to hide/ms. Of course, tableAA shows the "fastest" way out of the hide/ms skills penalty.

 tableAA: SD10
 tableBB: Sh17
 tableCC: SD9 (Dr5) Sh8 = 22 total levels
 tableDD: SD8 (Dr5) Sh9 = 22 total levels


2. the "9" in the Penalty% formula
Although a toon with neither SD1, nor shifter7 will not have the HIPS capability, such a toon may still be capable of corner sneaking. Notwithstanding the serious penalty of 90%, the formula as written allows the player to corner sneak.


3. Bunny doesn't really want world domination, but rather her doudou; this video is dedicated to Endless: http://www.youtube.com/watch?v=IaV7hhsfqHU
Logged
Terrorble
GvM1 Admin
Poster
****
Offline Offline

Posts: 765


View Profile
« Reply #3 on: 14 August 2010, 18:54 »

The old HiPS timer we used would run every second and check to see if a player was in stealth mode.  If they were, it would flag them.  That flag would remain for 1 round after HiPS was cancelled.  If the timer saw that they were hiding again, but already had the flag, it would cancel their stealth mode.

The timer didn't quite work for a couple reasons.  First, it didn't affect NPCs.  Second, in PvP you could still hit HIDE again and cause an action cancel, even though the timer script would cancel your stealth mode immediately.  This was because the timer works after the fact (i.e. it has to see that you're in stealth mode first before it can cancel stealth mode).  So, a person could just spam the HiPS button and their attacker could never target them long enough to accomplish any sort of action against them.  Even with keen sense and superior spot skills, targets that spam HiPS enough will still disappear.

So the critical point of all this is: if their skills are 0, do/can they still disappear and cause an action cancel and disappear (even if it's for 0.2 seconds)???

Your testing indicates that with 0 skills, they do not disappear.

So the timer might be improved by reducing skills to 0 so that spamming HiPS would have no effect, until the skills were restored.  The time until the skills are restored would be based on class levels and feats and all that.


Possibly possible!
Logged
NLawson
Poster
**
Offline Offline

Posts: 503


View Profile
« Reply #4 on: 14 August 2010, 22:53 »

Speaking purely from my gut here, I think 81% is too big a penalty to apply for a single instance of hipsing. That means, if a guy with 1 lvl of SD is surprised and tries to hide, it'll have essentially no effect. Hipsers also have lower toe-to-toe combat ability than normal, so they're much more likely to die in a straight fight than if it was a fighter, bard, or even a mage who was surprised.
Basically, it cripples sneaks to the point that they can't move around anywhere remotely dangerous unless there are handy obstacles to hide behind. Taking the fighting ability of standard mobs into consideration, it makes them virtually useless for anything other than jumping lowbies in PvP - like we don't have enough problems with this tactic already, I like to see sneaks being used at levels other than 20-27, thanks.



I think the penalty is a good idea, but I think you're approaching it from the wrong direction. You propose penalising people with low SD with a large skill-loss for using hips a single time - why not penalise them a small skill-loss for using it a lot?
Say, a 5% penalty every time they hips, similar to circle of death's increasing damage. I'm not sure how to implement the difference between "hipsing" and "normal hiding", in terms of not removing skill from a non-hips hide action. Regardless:
If they hips once, they lose 5% of their skills.
If they hips twice, they lose another 5%(option a), or they lose 10%(option b), depending on how harsh you want to be. This would be a choice to be made by the DMs, whose job it is to balance such things fairly, rather than by me - because I'm biased and also know nothing about the balance.

Make the skill decrease go down by 1% at level 2, and every 2 levels thereafter, stopping at 10.
2 SD gets 4% penalty per hips,
4 SD gets 3%,
6 SD gets 2%,
8 SD gets 1%, and
10 SD gets 0%.




This way, using hips once would only lower the skill a small amount, allowing a surprised sneak to run away without compromising his skills, as if nothing had been changed.
Using hips twice would bring either a 10%(a) or 15%(b) penalty down on the sneak. Three times would be either 15%(a) or 30%(b). By the sixth time (6 attempts at hiding is NOT a lot for a hips spammer, they eat through this quickly), the sneak would be at a 30%(a) or 105%(b) penalty. Under option (b), a sneak with 1 level of SD would be limited to 6 hips uses before he lost the ability to hide. Under option (a) it would take 20 attempts at hiding. The penalty could always be increased slightly if option (a) was chosen, say 9% with a 1% penalty drop per level. Then it would take 10 hips attempts for the hider to become useless, with 1 level of SD. Even somebody with 9 levels of SD, and a 1% penalty, would be penalised if they hipsed constantly.




I've had a couple of ideas about ways to restore the lost skills, but I'm not sure how well they would work. Terror mentioned this at the end of his post, so I can only assume he has some ideas...here are mine.
1) Restore the skills upon resting. I have no idea how this would work, but I'm sure someone with a better knowledge of coding could work out some way to remove the drain upon resting. This would also stop rogues from simply running in circles until their ability to hide returned - since the losses will stack until they rest.
2) Restore the skills slowly over time. This is what Terror meant, I think. It would probably be more difficult to implement, but since most sneaks would rest after a difficult fight (where they had to use hips a lot), the resting idea might work better. If the hipser has just had a hard fight, he won't be very effective at hiding until he catches his breath and tends to his injuries (ie, rests).




The rest of this post is not important, unless you want to hear how I would rationalise the small skill loss.

For those who like things to be rationalised - the small accumulation of skill-loss would make more narrative sense than a large, instant skill-loss:
A standard patrolling guard walks in on a hipser, in a usually deserted room. The hipser, always on guard, immediately hides in one of the many spots he scoped out when entering the room. The guard, not expecting him, might dismiss this as a trick of the light, lack of sleep, or an illusion, or one of about a billion other things, since as soon as he turned to look at the hipser - he was gone. The hipser sneaks up behind him and jumps him, and as the defender tries to fight him, he vanishes again.
This happens repeatedly - as the guard is watching the hipser more and more closely, he becomes more adept at spotting where he hides, and his hiding effectiveness decreases. Eventually the hipser can't hide anymore, because the guard has seen his technique enough. More experienced hipsers will be able to stave off the inevitable for longer - eventually reaching a point where they never lose the ability to hide.
Basically, the more you show a technique to somebody, the more likely they are to find a way around it. It's common sense. I don't know about you guys, but I certainly prefer if the limitations on my toons can be explained in real-world terms, even if this is a world where people throw fireballs at each other.


For the tl;dr people:
Read my signature an' awa' an bile yer heids ya bunch of scunners.
Logged

I know I write long posts, but you would think if something was important there would be a lot to say about it, no?
ollebroc
GvM1 Admin
Poster
****
Offline Offline

Plays: Both Factions
Posts: 913



View Profile
« Reply #5 on: 15 August 2010, 04:00 »

Applying any penalties on players everytime they HIPS will just not work here. Anyone that would spam HIPS constantly will drive the server to crash.

The simplest and safest way is to give everyone big skill penalties. To lower the penalties is too add more SD levels. When entering areas at night or dark not so well lit areas can also add bonuses. This will solve the HIPS spamming in broad daylight out in an open field.

Rangers and Druids would need to receive bonuses in the not so civilized outdoor areas.

Remember the highest penalty or bonus one can receive is 50 points.
Logged

(\__/)
(='.'=) This is Bunny. Copy and paste bunny into
(")_(") your signature to help him gain world domination.
Terrorble
GvM1 Admin
Poster
****
Offline Offline

Posts: 765


View Profile
« Reply #6 on: 15 August 2010, 07:43 »

The limitation on the penalty to -50 really *edit* hurts this idea

@Lawson:

I envisioned the script checking every second to see if you're hiding and have HiPS.  If you do, you get flagged as hiding.

(or if you already have a penalty, then do nothing)

The penalty is only applied at the first second it notices that you are no longer hiding (it removes the hiding flag, and replaces it with a NOT_HIDING_ANYMORE_AND_PROBABLY_CANT_UNTIL_MY_PENALTY_PERIOD_IS_OVER flag).  The penalty is applied for a short amount of time, which decreases with more class/skill/feat dedication.  That way, your ability to hide during the penalty period is unlikely;  the point of which, would limit HiPS spam.

...but the real problem that still exists is: even with a very low hide score versus very high spot score with keen sense, NPCs and some PCs still manage to disappear.  So applying a penalty may not actually achieve the effect we want.  

In theory, there is no difference between practice and theory.  In practice, there is.

I do like the idea of the penalty increasing as you use it more... hadn't considered that before, but from a scripting standpoint, it might be labor intensive to keep track of how many times you've used a certain ability within the sight of a specific target while everyone is running around.
« Last Edit: 15 August 2010, 20:55 by Terrorble » Logged
Lief
Poster
**
Offline Offline

Plays: Gondor
Posts: 133



View Profile
« Reply #7 on: 15 August 2010, 10:10 »

Howdy,

Please note that any references to nwn functions does NOT mean that I know how to use such functions; in fact, I have no idea how to script. However, the functions are inserted to provide reference should DMs/others wish to more accurately follow my line of reasoning.

So, here is a T.O.N. (Terrorble.Ollebroc.NLawson) of comments:

Terrorble's comments:

1. Let me clarify the results of my testing in a leveler mod. If the sneaking toon had zero hide and zero ms, then spamming the HIPS button does not cause the opponent to have action cancels. However, if the sneaking toon had 10 hide and 10 ms, then spamming the HIPS button seems to cause action cancels, although the NPC may pick up the "scent" of the sneaking toon very quickly after having its action being canceled.

What is needed is for "someone" to do actual testing of this in the leveler mod. Since the critical number appears to be zero hide and zero ms and since there is no way for me to lower my sneak toon's hide and ms to zero, I cannot test it in GvM. Without testing in the GvM world, we are only speculating - full stop.


2. flags
It sounds like the flag can hold the temporary penalty to the hide/ms skills, whether limited to 50 as implied by Olle or is limited only by the value obtained by the function GetSkillRank. This is very interesting.


3. I realize that the phrase "script checking every second" applies to an earlier implementation. However, you continue to refer to flagging within the context of the script execution as if it is something that will not cause unnecessary lag. Is this the case ?

So, if you think that you can tweak the current timer script:
- to account for the sneaking toon's build, e.g. number of levels of SD and/or shifter and possibly to account for specific feats; and
- without creating a significant source of lag
Then, get back in the laboratory and make it work !!!

You can always re-tweak the script post hoc.



Olle's comments:

1. A percentage based system for the hide/ms skills penalty may be better than a system that uses raw numbers. While a "raw numbers" approach can account for the number of SD and shifter levels, there is concern that it will not account for how many hide/ms points a toon actually has at a specific level. In other words, the percentage based system can account for BOTH the number of SD/shifter levels and the number of hide/ms skills of a toon. The latter ultimately means that the quality of the build does make a difference (in addition to what classes are chosen and how many levels of each class a toon has).


2. I forgot about the 50 skills cap.

I wonder if the GetSkillRank function can be used to do an endrun around the 50 skills cap (as noted in the original proposal, Step BB)?? 


3. I oppose giving any advantage to rangers or druids vis-a-vis the HIPS related penalty to the hide/ms skills. Any HIPS advantage re: the skills penalty script should only benefit those builds that have the two classes that have inherent HIPS capability, i.e. SD1+ and shifter7+.

Incidentally, you will note that the Amended HIPS Capability Proposal includes 7th shifter as a floor to the calculation:

   subT_Sh = if((lvl_sh - 7)<=0,0,(lvl_sh - 7))

Notwithstanding the fact that I have MANY ranger toons, I oppose giving these benefits to them; and I oppose giving rangers the HIPS ability, regardless of any level requirement or setting requirement, e.g. must be in "natural" tile map. Similarly, druids should also be unable to have any advantage vis-a-vis the HIPS related penalty to the hide/ms skills.


4. parade of horribles
Hmm, I thought that calls to weather and time of day functions would cause unnecessary lag. If you know how to implement this (i.e. time of day, weather can be used as factors in determination of the hide/ms skills penalty) without introducing concern about server lag, then this would be cool - very cool. [If you give me the factors involved and an agreed upon formula, I would be glad to model it.]

interesting functions:
 - day or night --- GetIsNight()
 - outdoors map or not --- GetIsAreaNatural(object)
 - everpresent combat factor --- GetIsInCombat(object)
 - clear, rain or snow --- GetWeather(object)
 - artificial lighting --- there must be functions that determines presence of artificial lighting ( ?? GetPlaceableIllumination(object)?? )and accounts for the strength of such lighting (??); I reckon that throwing in a calculation of distance between the sneaking PC to the artificial lighting via the function GetDistanceToObject(object) would cause too much server lag ?

       Roll Eyes and one needs to know whether there is a line of sight between the sneaking toon and the artificial lighting (via LineOfSightVector(vector, vector))

        Evil One should also decide whether the strength of the obstructed artificial lighting (in consideration to the size of the room in which the sneaking toon is located and the reflectiveness of any and all surfaces that are relevant and the size of the obstruction surface ... and its angle .... and whether the sneaking toon is running (i.e. hasted) or is walking .... or is encumbered .... or has a loose pebble in his/her/its left boot .... what about the right boot ?


NLawson's comments: 
A. Your counter proposal seems reasonable, but for two points.

1. it is not feasible 
In a single player environment, you'd have a great idea. Your anecdotal line of reasoning was both entertaining and sound.

Alas, GvM is a multiplayer environment; your counter proposal likely cannot be implemented without serious lag issues. Olle already noted that MERELY using a timer script raises concerns about lag and implicitly about script integrity, in a manner of speaking, over time. And the timer approach of the original proposal only involves reading data from the toon, afaik.

Specifically, the timer approach of the original proposal merely requires that the script utilise such "reading" functions as GetClassByPosition(int, object) and GetLevelByPosition(int, object) in order to get the build of the toon and calculate the hide/ms skills penalty, the duration of the HIPS mode and the HIPS_wait value. Other than incidental writing to disk, if any, the time approach should have minimal impact on server resources. Unfortunately, Olle predicts that the timer component, i.e. calculating the duration and implementing the two time periods (HIPS duration and HIPS_wait), is just too much for the server to handle.

Conversely, your counterproposal, which would not use a timer, would require that the server not only determine the build of the toon (reading) and calcaulte the appropriate percentage, but also write this data and save it for use in subsequent calculation if the toon HIPSes again. Since under your counter proposal, a sneak can HIPS 6x (or 20x) before losing the ability to HIPS, the server likely must read from the toon (1x) and from the stored data (6x to 20x) and write data (6x to 20x).

In addition, one can only imagine the effect of the reading and writing when hipsing NPCs are included !!



2. it does not take into account the shifter class
Your counter proposal does not account for shifters. Shifter 7 gets the kobold kommander shape, which has free HIPS. At shifter 10, a player can choose to take undead shape for spectres, which also has free HIPS. At shifter 17, a toon would have epic kobold kommander.

If you amend your counter proposal, you must account for shifters that sneak. Shifters that do not sneak could care less about a HIPS script. On the other hand, shifters that do sneak, like Endless's kobold toon, would love to be ignored by the HIPS script while SD toons would be affected by the HIPS script. This naturally would be unfair.



B. monks and rogues vs. grunts

On an unrelated note, You (NLawson) make a great point that should be inserted into the PvP Statistics thread vis-a-vis the "cowardly" Fraunck (sd monk), who utilised hit-and-run tactics:

"Hipsers also have lower toe-to-toe combat ability than normal, so they're much more likely to die in a straight fight than if it was a fighter, bard, or even a mage who was surprised."



C. Other comments

1. sole intent
The intent of the HIPS proposal is not to punish sneaks, but to save them; the author has many toons that only have 1 or 2 levels of SD. In any event, if DMs implemented the aforementioned suggestion, then SDs (and presumably shifters that sneak) will not be able to HIPS at all ..... until they have a minimum number of SD levels, e.g. 5 or 7. Presumably, for shifters, it is hardwired to shifter 7 for kobold kommander. Note that the term HIPS means HIPS while standing in front of your opponent and NOT corner sneaking, which is to run around the corner and out of the line of sight of an opponent so that one can utilise the hide command.

The proposal in this thread is offering a compromise that would keep the HIPS capability at SD1 (and shifter7), but allow DMs to impose penalties to the hide and ms skills depending on the build, e.g. number of levels of SD and shifter.


 
2. numbers
Have no fear about the big, bad 81% number, NLawson. The DMs will save you !

The formula and resulting numbers are merely starting points for discussion. The purpose of disclosing the numbers is to provide proof that the formula does work and to give a general idea of its impact.
Logged
Lief
Poster
**
Offline Offline

Plays: Gondor
Posts: 133



View Profile
« Reply #8 on: 15 August 2010, 10:25 »

addendum:

NLawson's comment about removing the penalty to hide/ms when a toon rested just gave me an idea. Perhaps do not have the penalty applied every time the sneak toon successively HIPSes (NLawson - cumulative skills penalty) or even when the player sneaks (MDR - non-cumulative skills penalty).

Instead, one could use battlemusic as the trigger. Perhaps one could use the function MusicBattlePlay(object) as the trigger to impose the hide/ms skills penalty and use the function MusicBattleStop(object) as the trigger to remove the hide/ms skills penalty ? Here the determination of the hide/ms skills penalty would occur just 1x per battle per toon. This could solve the concern about server lag.

In any event, working off Olle's idea about applying the skills penalty to EVERYONE, one could apply the PERCENTAGE based hide/ms skills penalty to all toons on the map, whether already on the map or entering the map, as soon as the battle music starts. This would mean that the script would fire less frequently than the proposals made by NLawson or MDR. At the same time, the penalty would not be a perpetual burden on sneaks - so long as they are not in combat mode.



*cough*
We still need someone to test this statement in a GvM setting with a sneak toon that has 0 hide and 0 ms:

"even with a very low hide score versus very high spot score with keen sense, NPCs and some PCs still manage to disappear.  So applying a penalty may not actually achieve the effect we want. In theory, there is no difference between practice and theory."

Logged
ollebroc
GvM1 Admin
Poster
****
Offline Offline

Plays: Both Factions
Posts: 913



View Profile
« Reply #9 on: 15 August 2010, 17:19 »

If ya want to test it out, try it on a horse.  bill

It would be easier to give those specific shifter shapes more skill points than to give shifters bonuses. A shifter may never use or choose those shapes yet you want to give them a bonus at those levels. Then you would have to add the the Get Appearance() to any HIPS timing script.

Let me clarify my approach:
  • Everyone gets the same penalties on logging in written on their skins
  • Every area would be given bonus numbers to counter these penalties
  • These bonuses are applied only once when you enter an area
  • More bonus points are awarded by the number of SD levels
  • Bonus points to Rangers and Druids in forest areas only based on levels

Area Bonuses
  • Natural Dark areas such as Moria Mines and Underdark would receive the highest bonus
  • If it was nighttime when you entered an area
  • If it is raining

Builders would have to add these numbers they feel each area deserves based on openess, number of places to hide, in or outdoor, and lighting. Hide and Move skills would not be given the same bonuses for each area. You might be able to walk quietly on the sand but your footprints give you away. Every area would be different.

We are in the process of removing all timing events such as encounters and respawn times to ease the burdens on the server. We don't want to add any more.
Logged

(\__/)
(='.'=) This is Bunny. Copy and paste bunny into
(")_(") your signature to help him gain world domination.
NLawson
Poster
**
Offline Offline

Posts: 503


View Profile
« Reply #10 on: 15 August 2010, 19:35 »

Just so everybody knows where I stand - as soon as Olle pointed out that running a script every time somebody used hide would lag the server I accepted that my idea, as written, wouldn't work. I just want to throw a few things around still and see if there's no way it couldn't be...tweaked.

Marcus:
A.
1) Agreed - it's not feasable for the reasons you mentioned...I didn't consider the fact that unlike hp, skills have no "max skill" for the game to consider, they only have "modified skill" to read. I was thinking along the same lines as Circle of Death for the hipsing toon. Every time circle of death hits, your death counter is increased by one. After the counter increases, the server takes the counter value, multiplies it by the % damage to be dealt, and then multiplies that by he max hp of the character.
So a toon with 1k hp and a death counter of 3 fails another save, with a 9% penalty. His death counter goes up to 4 - the server takes that info and hits him for 360 (4*0.09*1000).
I pictured a similar system - with the skills not being restored until the hipser rested.
Alternatively, you could use a raw numbers approach (less friendly, especially since it doesn't take hide bonus into account) and take 5 skillpoints off each time, from whatever he currently has. So everyone gets 10 hipses before they hit the -50 penalty.

Unfortunately, "modified ranks" includes the losses from previous penalties, and so a % penalty would not apply in the way I envisage.
I mentioned a way around this above - using small raw numbers - but as you said:

While a "raw numbers" approach can account for the number of SD and shifter levels, there is concern that it will not account for how many hide/ms points a toon actually has at a specific level. In other words, the percentage based system can account for BOTH the number of SD/shifter levels and the number of hide/ms skills of a toon. The latter ultimately means that the quality of the build does make a difference (in addition to what classes are chosen and how many levels of each class a toon has).

So yeah, a % penalty definitely looks like the fairest way to do things.

Here's the crux of the matter. With a cap of 50 to the penalty, it's impossible for anybody with over 50 ranks in the hide skill to have hips taken away from them, even if they only have 1 sd level. They will still have at least 1 rank in hide and move, and so they will still be able to action-cancel their opponent...all this leads to is even more hips spamming than we currently have, as people rapidly break combat to sneak up again.

2) I didn't take into account shifters, but that was because I was focussed on what I was trying to get from my head to the page...I wasn't purposefully leaving them out. The penalties could be worked out in the same way for shifters, using levels 7-17 as you said. There's no way in hell I'd let a shifter get away from a penalty. XD

B.
Yep - they're weaker toe-to-toe. The difference is that when I talked about sneaks I was thinking "Rogues" and "Assassins" because they lose their extra sneak damage and typically have low strength - monks do the same damage coming out of hiding as they would do in a straight fight, for the most part, and they also have their "super run away speed", whereas almost any other sneak build needs to rely entirely on hide to get them out of trouble. The hide penalty wouldn't bother a monk, because without hide, they'd just leg it to the nearest friendly map and have the NPCs mob you. And you wouldn't catch them either.
They don't need their hide to run away, they need their hide to get close...as you said, corner sneaks would be fine - the hips is just a bonus to prevent the monk having to run a long distance to hide again. If monks couldn't take SD levels because of alignment restrictions, I'm sure you would still have just as many monks jumping lowbies...they would just have different third classes.

Olle:
My concern about applying an area bonus is the sheer amount of time and effort it would take to work out and apply the bonuses you mentioned to each individual area in the mod. Not only would it need to be tailored to the outdoors/indoors part of the area, but also the tileset (dark and gloomy vs bright and cheery), as well as the volume of debris lying around.
Think about how difficult it would be to work out how hard it is to hide in different areas relative to each other, when you have to consider:
Haradrim HQ, the Harad Road, MT, MM, Moria, Underdark, Drow lands, Shelobs, Spirits, Crypts, Osgiliath, Mirkwood, Nindalf, Emyn Muin, the Temple of Doom, and at least 50 other maps...

And that's not even considering places like the City of the Corsairs, where you have sand (low move penalty, high hide penalty) only 10 steps away from buildings and debris (low hide penalty, low move penalty). As you said - every area would be different...

I just feel that, rather than applying a penalty to HIPS (which isn't THAT big a problem right now) aren't there better things that could be done with that amount of manpower?

As of now I pretty much give up...all this thinking hurts my brain =P
Logged

I know I write long posts, but you would think if something was important there would be a lot to say about it, no?
Terrorble
GvM1 Admin
Poster
****
Offline Offline

Posts: 765


View Profile
« Reply #11 on: 15 August 2010, 21:47 »

Read last paragraph, the rest is mosty off-topic ramblings:

like Olle says, we have been eliminating many NPCs that spawn in and simply stand there firing heartbeat and perception events for hours while nobody visits their area.

Every NPC that just stands there from the time the mod loads fires a heartbeat script every 6 seconds I believe.  They also fire a perception event every time another PC or NPC comes in or out of range.  Now, those things add up and our server has been growing in size.

That sounds bad, but those events are setup to immediately end if there is nothing worth responding to in the vicinity.  However, by spawning something via an encounter, or only when an area is visited is better since none of that has to be processed at all until someone triggers it.

The other part of that, is that every time a pre-spawned NPC dies, the server records where they died, reads off of them how long until they respawn, their blueprint reference and saves it all on the module.  So after you kill 50 guys, you have 50 entries written on the module of a location, a reference to a blueprint, and then 50 timers set to count down until it should recreate the NPC at its location.  Anyway, with the spawner setup that you see used in Pelargir/HarnenRiverbed/HarnenCrypt/Rivendell/... we don't have to have a timer counting down for every NPC.  Just 1 timer that counts down until the area should be cleaned and respawn should occur.  Encounters are even better in that they need no timer, but there are some subtle differences with encounters that makes me like using the spawner in certain places more.

In NWN scripting, when you want something to occur later, you execute a delayed command and tell it how long to delay before executing the action.  I do this with all the AoE spells.  I run the spell and inside it, tell it to run itself again in 6.0 seconds.  Each time, it decrements the amount of times it should operate, and each time it checks to see if there are enough times left so that it should run.  All those delay commands (including when pre-spawned NPCs die and are set to be respawned) add to the "stack".  You can imagine the server processing hundreds of these timers in the stack every second to keep track of when a spell should refire, when an NPC should respawn, or anything else that is delayed.

Surprisingly, it is very fast in NWN to read/write info and store it on a PC/NPC/item etc.  Read/write from the database or from a .2da file for things like saving a character or getting info for shifting is however, sloooooooow.  I think in another server, they realized they could run things very quickly by converting frequently used info they need about a character to variables saved on the character.  So instead of calculating the number of druid levels or SD levels or caster level or other bonuses, they just calculated that all up front, saved it on the character, then retrieved it directly as you go.

I use the variables with the assassin poisons to mark a target as already under the effect of a poison and to therefore not run again.  I know this method of retrieving info is fast because you can swing a couple times a second and it keeps up.

Anyway, to conclude this bit of rambling that I can't remember why it started, I'd remind you that within the game engine locked in  the heart of NWN, it does calculate hide and ms bonuses that take into account if it is night, if the character has a light item equipped, whether the hidden person is behind you or in front, whether you are in combat, whether you are moving or still, line of sight, distance, etc.  When I consider all this and trying to modify HiPS functionality, my head spins.
Logged
radagast
Poster
**
Offline Offline

Posts: 182


View Profile WWW
« Reply #12 on: 16 August 2010, 10:08 »

OR you could just leave SD's alone, marcus has a well known dislike for them  wink its like grapes and his cleric phobia.
Logged

Sancho29
Poster
**
Offline Offline

Posts: 105



View Profile
« Reply #13 on: 16 August 2010, 21:56 »

OR you could just leave SD's alone, marcus has a well known dislike for them  wink its like grapes and his cleric phobia.

Amen,  The class seems fine to me,  with all the TS items around.
Logged

Artificial Intelligence usually beats real stupidity.
-firecracker-
Administrator
Poster
*****
Offline Offline

Posts: 793


View Profile
« Reply #14 on: 17 August 2010, 00:46 »

Firstly I have not read the entire thread...

I have 2 toons with 1 SD level (level 40 and 39) and both with a hide/ms in the 100s, I dont use either for pvp (which I assume is the cause of the problem), as I said to Marcus in-game, I made them for party play, so their 1SD level is there as a defensive purpose (vs NPCs or if attacked in PVP). I hope they don't get nerfed...
« Last Edit: 17 August 2010, 09:04 by -firecracker- » Logged
ollebroc
GvM1 Admin
Poster
****
Offline Offline

Plays: Both Factions
Posts: 913



View Profile
« Reply #15 on: 18 August 2010, 01:34 »

I have no intention of changing HIPS but am open to ideas. Hipsters don't bother me much since most of my toons max out Listen and Spot. What are the odds of both failing?!?
Logged

(\__/)
(='.'=) This is Bunny. Copy and paste bunny into
(")_(") your signature to help him gain world domination.
Lief
Poster
**
Offline Offline

Plays: Gondor
Posts: 133



View Profile
« Reply #16 on: 18 August 2010, 01:41 »

The following was drafted before Olle's comment.
Having said this, it's time to make some more toons with only 1 level of sd  Tongue




Howdy all,

The second sentence in the first posting in this thread states: "The author opposes such a move."

From there, I presumed that some change would be made in due course. Accordingly, without trying to kill the English language, which would likely make NLawson unhappy, I would say that there was a clear implication that the first proposal and by extension all subsequent discussion on the part of the author (i.e. me !) were intended to cushion the fall of the hammer, in a manner of speaking.

So, this thread is a "pre-emptive counter proposal" in response to the possibility, ... nay probability in my mind at the time that the DMs may have an interest in moving HIPS capability from SD1 to SD5 or higher. Other than this basis, I did not state an opinion as to the underling rationale behind the DMs' thinking. Accordingly, my (counter) proposal is not motivated by a concern about any imbalance vis-a-vis the SD class and PvP, nor an argument about class purity. This of course does not eliminate the probability, rather than possibility, that the former in fact may be the basis for the said interest.

In addition, while I may not make strange builds like the hipsing risen lord, I do fancy the SD class. Indeed, as is evident from my comments in my previous postings in this thread as well as the toon listing below, I am the last person who would want to handicap the SD class unnecessarily. 


SD sneaks and current level breakdown:
Anaelle: monk 15 sd 1 assassin 1
Celandine (1st): ranger 23 sd 1
Henri: Ranger 25 fighter 5 sd 10
Isgaard: wiz 37 sd 2
Jehanne (1st): bard 9 sd 2 aa 29
Lucette: rogue 33 fighter 6 sd 1
Meiju (1st): monk 12 sd 1
Mindy (2nd): Ranger 23 sd 1
Nulliette (1st): monk 30 sd 5 assassin 5 (no boss gear on this toon - I need to farm some more)
Nulliette (2nd): monk 30 sd 5 fighter 5
Nulysmal: ranger 6 assassin 24 sd 10
Songul ranger 9 wiz 21 sd 10
Tiphaine: monk 30 sd 5 fighter 5
valeriane: monk 18 wm 14 sd 1
Ysabeau: ranger 27 sd 10 assassin 3


dr/sh sneaks and current level breakdown:
Meiju (2nd): druid 5 Ranger 7 shifter 26 - spectre
Letizia (3rd): druid 28 - caster, but uses epic kobold kommander form


All of the toons listed above are fully geared for PvP and/or PvM unless otherwise noted. Of course, one may question the uberness of their gear. For example, Val does not have the Nazgul qstaff and Songul is using Kerlin's rubbish rapier instead of Mr. Bard's rapier. Oh well ... one must struggle on.

Well, gtg ... 

ciao,
Logged
Red Raisin
GvM1 Admin
Poster
****
Offline Offline

Posts: 93



View Profile
« Reply #17 on: 18 August 2010, 03:15 »


In addition, while I may not make strange builds like the hipsing risen lord, I do fancy the SD class. Indeed, as is evident from my comments in my previous postings in this thread as well as the toon listing below, I am the last person who would want to handicap the SD class unnecessarily. 


SD sneaks and current level breakdown:
Anaelle: monk 15 sd 1 assassin 1
Celandine (1st): ranger 23 sd 1
Henri: Ranger 25 fighter 5 sd 10
Isgaard: wiz 37 sd 2
Jehanne (1st): bard 9 sd 2 aa 29
Lucette: rogue 33 fighter 6 sd 1
Meiju (1st): monk 12 sd 1
Mindy (2nd): Ranger 23 sd 1
Nulliette (1st): monk 30 sd 5 assassin 5 (no boss gear on this toon - I need to farm some more)
Nulliette (2nd): monk 30 sd 5 fighter 5
Nulysmal: ranger 6 assassin 24 sd 10
Songul ranger 9 wiz 21 sd 10
Tiphaine: monk 30 sd 5 fighter 5
valeriane: monk 18 wm 14 sd 1
Ysabeau: ranger 27 sd 10 assassin

Oh this wonton display of hippy attitude definately has my attention!  I move for a complete SD nerf  wink
Logged
NLawson
Poster
**
Offline Offline

Posts: 503


View Profile
« Reply #18 on: 18 August 2010, 16:12 »

I'm sorry Red, it's the little voices in my head that make me do this =P

Wanton display.
Wonton is a kind of chinese dumpling.
Logged

I know I write long posts, but you would think if something was important there would be a lot to say about it, no?
Terrorble
GvM1 Admin
Poster
****
Offline Offline

Posts: 765


View Profile
« Reply #19 on: 19 August 2010, 07:18 »

We really can't move HiPS to any SD level other than where it is now.  That's the kind of thing you have to establish immediately after a vault wipe before people make SDs.

The amazing part of that is you have more chars that are SDs than I have chars in my vault even including the screw-ups.

A "wonton display" sounds yummy. 
Logged
Lief
Poster
**
Offline Offline

Plays: Gondor
Posts: 133



View Profile
« Reply #20 on: 19 August 2010, 09:24 »

Howdy all,

As sneaks comprise about half my active toons, I'm very pleased with these two comments:

1. Ollebroc: I have no intention of changing HIPS ...
  - There are some other words after the word "HIPS," but that's as much as I can read   Grin

2. Terrorble: We really can't move HiPS to any SD level other than where it is now. 

And I never saw the word "nerf" in Red's posting.

One must hope that DMs are too busy to change their minds

ciao,
Logged
Red Raisin
GvM1 Admin
Poster
****
Offline Offline

Posts: 93



View Profile
« Reply #21 on: 19 August 2010, 16:17 »

Soup time!

Well at least that's how my brain felt after going through MDR's detailed proposal.  

Throw-in the wanton wontons too if you like  wink
« Last Edit: 19 August 2010, 17:04 by Red Raisin » Logged
NLawson
Poster
**
Offline Offline

Posts: 503


View Profile
« Reply #22 on: 19 August 2010, 17:00 »

Yeah...we won't be wanting for wanton wontons.

I'm hungry now.

And what sparked this whole "let's change hips" thing? I can appreciate just throwing ideas around, but we have some pretty detailed stuff here - and hips isn't exactly broken. You get the odd person who takes advantage of their computer speed and spams it so fast that your guy won't move to hit them, but for the most part I have no more trouble fighting hipsers than I do with mages, or hitters.

They all kill me equally well.
Logged

I know I write long posts, but you would think if something was important there would be a lot to say about it, no?
Terrorble
GvM1 Admin
Poster
****
Offline Offline

Posts: 765


View Profile
« Reply #23 on: 20 August 2010, 00:51 »

This is the future talk discussion, questioning where the topic came from is going to get you put in the penalty box.   police
Logged
Redaurora
Poster
**
Offline Offline

Posts: 119


View Profile
« Reply #24 on: 20 August 2010, 07:52 »

You know, an alternative to staving off the 'One level of SD disease' is to give HIPS to other classes of a high enough level. Instead of eating up one of your 3 max classes you can take, you have to invest in many levels of another.

Examples would be some classes that under DnD 3.5 rules actually do gain hips.

Ranger and Assassin.
Logged
Pages: [1] 2 Print 
Jump to:  

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines
Theme by Nesianstyles | Buttons by Andrea