110 lines
4.2 KiB
Plaintext
110 lines
4.2 KiB
Plaintext
////////////////////////////////////////////////////////////////////////////////
|
|
// hos_alignment - Harvest of Souls - Alignment Shift fix
|
|
// By Deva Bryson Winblood. 10/8/2004
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
////////////////////////////////
|
|
// PROTOTYPES
|
|
////////////////////////////////
|
|
|
|
// FILE: hos_alignment FUNCTION: AdjustAlignmentPartyProtected()
|
|
// This function will allow you to shift the alignment of a target and only
|
|
// team/party members that can perceive him/her when the event occurs will
|
|
// also be shifted. This protects party members from having their alignment
|
|
// shifted by actions they could not perceive or disuade.
|
|
// - oSubject
|
|
// - nAlignment:
|
|
// -> ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_GOOD/ALIGNMENT_EVIL: oSubject's
|
|
// alignment will be shifted in the direction specified
|
|
// -> ALIGNMENT_ALL: nShift will be added to oSubject's law/chaos and
|
|
// good/evil alignment values
|
|
// -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's law/chaos and
|
|
// good/evil alignment values in the direction which is towards neutrality.
|
|
// e.g. If oSubject has a law/chaos value of 10 (i.e. chaotic) and a
|
|
// good/evil value of 80 (i.e. good) then if nShift is 15, the
|
|
// law/chaos value will become (10+15)=25 and the good/evil value will
|
|
// become (80-25)=55
|
|
// Furthermore, the shift will at most take the alignment value to 50 and
|
|
// not beyond.
|
|
// e.g. If oSubject has a law/chaos value of 40 and a good/evil value of 70,
|
|
// then if nShift is 15, the law/chaos value will become 50 and the
|
|
// good/evil value will become 55
|
|
// - nShift: this is the desired shift in alignment
|
|
// * No return value
|
|
void AdjustAlignmentPartyProtected(object oSubject, int nAlignment, int nShift);
|
|
|
|
////////////////////////////////
|
|
// FUNCTIONS
|
|
////////////////////////////////
|
|
|
|
// FUNCTIONS TO USE:
|
|
// AddToParty()
|
|
// RemoveFromParty()
|
|
// AdjustAlignment()
|
|
// GetIsPC()
|
|
// GetObjectSeen()
|
|
// GetCurrentAction()
|
|
// GetNearestCreature()
|
|
// GetFirstFactionMember()
|
|
// GetNextFactionMember()
|
|
|
|
int fnIsAnyoneResting(object oMember)
|
|
{ // RETURN: TRUE if anyone on this faction is resting
|
|
int bRet=FALSE;
|
|
object oFaction=GetFirstFactionMember(oMember);
|
|
while(GetIsObjectValid(oFaction)&&bRet==FALSE)
|
|
{ // check each member
|
|
if (GetCurrentAction(oFaction)==ACTION_REST&&oFaction!=oMember) bRet=TRUE;
|
|
oFaction=GetNextFactionMember(oMember);
|
|
} // check each member
|
|
return bRet;
|
|
} // fnIsAnyoneResting()
|
|
|
|
void fnRejoinFaction(object oSubject, object oLeader)
|
|
{ // PURPOSE: Put the PC back on the team
|
|
/*if (fnIsAnyoneResting(oLeader))
|
|
{ // delay and recurse
|
|
DelayCommand(2.0,fnRejoinFaction(oSubject,oLeader));
|
|
} // delay and recurse
|
|
else
|
|
{ // rejoin */
|
|
AddToParty(oSubject,oLeader);
|
|
//} // rejoin
|
|
} // fnRejoinFaction()
|
|
|
|
void fnAdjustAlignment(object oSubject, int nAlignment, int nShift)
|
|
{ // PURPOSE: Called for individual members
|
|
object oLeader;
|
|
/*if (fnIsAnyoneResting(oSubject))
|
|
{ // delay and recurse
|
|
DelayCommand(2.0,fnAdjustAlignment(oSubject,nAlignment,nShift));
|
|
} // delay and recurse
|
|
else
|
|
{ // do it*/
|
|
oLeader=GetFirstFactionMember(oSubject);
|
|
if (oLeader==oSubject) oLeader=GetNextFactionMember(oSubject);
|
|
RemoveFromParty(oSubject);
|
|
AdjustAlignment(oSubject,nAlignment,nShift);
|
|
if (GetIsObjectValid(oLeader)) fnRejoinFaction(oSubject,oLeader);
|
|
//} // do it
|
|
} // fnAdjustAlignment()
|
|
|
|
void AdjustAlignmentPartyProtected(object oSubject, int nAlignment, int nShift)
|
|
{ // PURPOSE: Handle Alignment shift in a protected manner
|
|
/*object oPC=GetFirstFactionMember(oSubject);
|
|
while(GetIsObjectValid(oPC))
|
|
{ // check to see if anyone can see you
|
|
if (oPC!=oSubject&&GetObjectSeen(oSubject,oPC))
|
|
{ // can see
|
|
SendMessageToPC(oPC,"Your alignment has been shifted due to actions of "+GetName(oSubject)+".");
|
|
DelayCommand(1.0,fnAdjustAlignment(oPC,nAlignment,nShift));
|
|
} // can see
|
|
oPC=GetNextFactionMember(oSubject);
|
|
} // check to see if anyone can see you
|
|
DelayCommand(0.5,fnAdjustAlignment(oSubject,nAlignment,nShift));*/
|
|
AdjustAlignment(oSubject,nAlignment,nShift);
|
|
} // AdjustAlignmentPartyProtected()
|
|
|
|
|
|
//void main(){}
|