Aschbourne_PRC8/_module/nss/_uoa_drunk.nss
GetOffMyYarn 69879d6957 Areas and Fixes
Added CCOH and missing areas
Changed some areas to be craftable,
Fixed some on death issues,
Fixed the Gaurd
2024-08-30 11:38:44 -04:00

298 lines
13 KiB
Plaintext

location GetNewLocation(object oPC);
void DrunkPC(int iValue, object oPC);
void main()
{
object oPC = OBJECT_SELF;
int iDrunk = GetLocalInt(oPC,"iDrunk");
int iCon = GetAbilityScore(oPC,ABILITY_CONSTITUTION);
int iSave = GetFortitudeSavingThrow(oPC);
int iSaveBonus = iCon/6;
if (GetRacialType(oPC)==RACIAL_TYPE_DWARF) iSaveBonus = iCon;
if (GetRacialType(oPC)==RACIAL_TYPE_ELF) iSaveBonus = iCon/2;
if (GetRacialType(oPC)==RACIAL_TYPE_HALFELF) iSaveBonus = iCon/3;
if (GetRacialType(oPC)==RACIAL_TYPE_HALFLING) iSaveBonus = iCon/3;
if (GetRacialType(oPC)==RACIAL_TYPE_HALFORC) iSaveBonus = iCon/3;
if (GetRacialType(oPC)==RACIAL_TYPE_GNOME) iSaveBonus = iCon/4;
if (Random(1000)<950) //decay drunk state chance
{
iDrunk--;
SetLocalInt(oPC,"iDrunk",iDrunk);
}
int iSaveRoll = iDrunk-iSaveBonus;
iSaveRoll=iSaveRoll-d4(1);
if (iSaveRoll<0) iSaveRoll=0;
string sMessage;
switch (iSaveRoll)
{
case 0:{sMessage="you feel sober.";break;}
case 1:{sMessage="You feel sober.";break;}
case 2:{sMessage="You feel good.";break;}
case 3:{sMessage="You feel happy.";break;}
case 4:{sMessage="You feel lightheaded.";break;}
case 5:{sMessage="You are tipsy.";break;}
case 6:{sMessage="You are drunk.";break;}
case 7:{sMessage="You are drunk.";break;}
case 8:{sMessage="You are very drunk.";break;}
case 9:{sMessage="You are very drunk.";break;}
case 10:{sMessage="You are very drunk.";break;}
case 11:{sMessage="You are inebriated.";break;}
case 12:{sMessage="You are inebriated.";break;}
case 13:{sMessage="You are unable to walk properly.";break;}
case 14:{sMessage="You are unable to walk properly.";break;}
case 15:{sMessage="You are unable to walk properly.";break;}
case 16:{sMessage="You are unable to stand.";break;}
case 17:{sMessage="You are unable to stand.";break;}
case 18:{sMessage="You are unable to stand.";break;}
case 19:{sMessage="You are unable to stand.";break;}
case 20:{sMessage="You pass out...";break;}
default:{sMessage="You pass out....";break;}
}
if (iSaveRoll<20)FloatingTextStringOnCreature(sMessage,oPC,FALSE);
if (iDrunk-iCon>5)
{
if (Random(1000)<600)
{
AssignCommand(oPC,SpeakString("*Hic!*",TALKVOLUME_TALK));
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_FIREFORGET_DODGE_DUCK,1.0));
}
else
{
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_DRUNK,1.0,5.0));
}
}
location lSelf = GetLocation(oPC);
location lSelf2;
object oTemp = CreateObject(OBJECT_TYPE_PLACEABLE,"temporaryplaceho",lSelf);
float fTemp = 1.0;
int iCount = 29;
DestroyObject(oTemp,60.0);
if (iSaveRoll>19) //Pass Out
{
DrunkPC(1,oPC);
AssignCommand(oPC,ClearAllActions());
if (Random(1000)<950) //decay drunk state chance
{
iDrunk--;
SetLocalInt(oPC,"iDrunk",iDrunk);
}
AssignCommand(oTemp,DelayCommand(30.0,ExecuteScript("_uoa_drunk",oPC)));
AssignCommand(oTemp,DelayCommand(3.0,FadeToBlack(oPC,FADE_SPEED_MEDIUM)));
AssignCommand(oTemp,DelayCommand(2.0,FloatingTextStringOnCreature(sMessage,oPC,FALSE)));
AssignCommand(oTemp,DelayCommand(27.0,FadeFromBlack(oPC,FADE_SPEED_SLOW)));
lSelf2 = GetNewLocation(oPC);
//Move a little bit
if (Random(1000)<500)
{
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,SpeakString("*Hic!*",TALKVOLUME_TALK))));
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_FIREFORGET_DODGE_DUCK,1.0))));
}
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionMoveToLocation(lSelf2,FALSE))));
//Fall Down Drunk and pass out
if (Random(1000)<501)
{
AssignCommand(oTemp,DelayCommand(3.0,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT,1.0,26.0))));
}
else
{
AssignCommand(oTemp,DelayCommand(3.0,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_DEAD_BACK,1.0,26.0))));
}
AssignCommand(oTemp,DelayCommand(4.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_IMP_SLEEP,FALSE),oPC,24.0)));
AssignCommand(oTemp,DelayCommand(1.0,SetCutsceneMode(oPC,TRUE)));
AssignCommand(oTemp,DelayCommand(28.0,SetCutsceneMode(oPC,FALSE)));
return;
}
if (iSaveRoll>15) //Knockdown & random Walk
{
DrunkPC(2,oPC);
AssignCommand(oPC,ClearAllActions());
AssignCommand(oTemp,DelayCommand(30.0,ExecuteScript("_uoa_drunk",oPC)));
AssignCommand(oTemp,DelayCommand(0.5,SetCutsceneMode(oPC,TRUE)));
AssignCommand(oTemp,DelayCommand(28.0,SetCutsceneMode(oPC,FALSE)));
for (iCount; iCount>0; iCount--)
{
fTemp=fTemp+1.0;
if (Random(1000)<800)
{
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS,1.0,1.2))));
}
else
{
lSelf2 = GetNewLocation(oPC);
if (Random(1000)<500)
{
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,SpeakString("*Hic!*",TALKVOLUME_TALK))));
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_FIREFORGET_DODGE_DUCK,1.0))));
}
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionMoveToLocation(lSelf2,FALSE))));
}
}
return;
}
if (iSaveRoll>12) //RandomWalk
{
DrunkPC(3,oPC);
AssignCommand(oPC,ClearAllActions());
AssignCommand(oTemp,DelayCommand(30.0,ExecuteScript("_uoa_drunk",oPC)));
AssignCommand(oTemp,DelayCommand(0.5,SetCutsceneMode(oPC,TRUE)));
AssignCommand(oTemp,DelayCommand(28.0,SetCutsceneMode(oPC,FALSE)));
for (iCount; iCount>0; iCount--)
{
fTemp=fTemp+1.0;
if (Random(1000)<200)
{
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS,1.0,1.2))));
}
else
{
if (Random(1000)<500)
{
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,SpeakString("*Hic!*",TALKVOLUME_TALK))));
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_FIREFORGET_DODGE_DUCK,1.0))));
}
lSelf2 = GetNewLocation(oPC);
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionMoveToLocation(lSelf2,FALSE))));
}
}
return;
}
if (iSaveRoll>7) //RandomWalk 50%
{
DrunkPC(4,oPC);
AssignCommand(oTemp,DelayCommand(30.0,ExecuteScript("_uoa_drunk",oPC)));
for (iCount; iCount>0; iCount--)
{
fTemp=fTemp+1.0;
if (Random(1000)<500)
{
if (Random(1000)<200)
{
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,SpeakString("*Hic!*",TALKVOLUME_TALK))));
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_FIREFORGET_DODGE_DUCK,1.0))));
}
lSelf2 = GetNewLocation(oPC);
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionMoveToLocation(lSelf2,FALSE))));
}
}
return;
}
if (iSaveRoll>4) //RandomWalk 25%
{
DrunkPC(5,oPC);
AssignCommand(oTemp,DelayCommand(30.0,ExecuteScript("_uoa_drunk",oPC)));
for (iCount; iCount>0; iCount--)
{
fTemp=fTemp+1.0;
if (Random(1000)<250)
{
if (Random(1000)<200)
{
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,SpeakString("*Hic!*",TALKVOLUME_TALK))));
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionPlayAnimation(ANIMATION_FIREFORGET_DODGE_DUCK,1.0))));
}
lSelf2 = GetNewLocation(oPC);
AssignCommand(oTemp,DelayCommand(fTemp,AssignCommand(oPC,ActionMoveToLocation(lSelf2,FALSE))));
}
}
return;
}
if (iDrunk>1)
{
AssignCommand(oTemp,DelayCommand(30.0,ExecuteScript("_uoa_drunk",oPC)));
}
SetLocalInt(oPC,"iAmDrunk",0);
}
location GetNewLocation(object oPC)
{
location lPC = GetLocation(oPC);
vector vSelf = GetPosition(OBJECT_SELF);
object oArea = GetArea(OBJECT_SELF);
int vDirection;
float fSelf;
float fDistance;
location lSelf2;
fSelf = GetFacing(OBJECT_SELF)+Random(360);
fDistance = (IntToFloat(d4(2)+1)/6.0);
vSelf = vSelf + (AngleToVector(fSelf) * fDistance);
lSelf2 = Location(oArea,vSelf,fSelf);
return lSelf2;
}
void DrunkPC(int iValue, object oPC)
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATED,FALSE),oPC,31.0);
if (iValue==1)
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_DEXTERITY,10),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_INTELLIGENCE,10),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_WISDOM,10),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectACDecrease(5),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowDecrease(SAVING_THROW_REFLEX,5),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowIncrease(SAVING_THROW_FORT,5),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillDecrease(SKILL_ALL_SKILLS,10),oPC,31.0);
if (GetCurrentHitPoints(oPC)<=GetMaxHitPoints(oPC))ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectTemporaryHitpoints(20),oPC,31.0);
}
if (iValue==2)
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_DEXTERITY,6),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_INTELLIGENCE,6),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_WISDOM,6),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectACDecrease(4),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowDecrease(SAVING_THROW_REFLEX,4),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowIncrease(SAVING_THROW_FORT,4),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillDecrease(SKILL_ALL_SKILLS,6),oPC,31.0);
if (GetCurrentHitPoints(oPC)<=GetMaxHitPoints(oPC))ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectTemporaryHitpoints(10),oPC,31.0);
}
if (iValue==3)
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_DEXTERITY,3),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_INTELLIGENCE,3),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_WISDOM,3),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectACDecrease(3),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowDecrease(SAVING_THROW_REFLEX,3),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowIncrease(SAVING_THROW_FORT,3),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillDecrease(SKILL_ALL_SKILLS,3),oPC,31.0);
if (GetCurrentHitPoints(oPC)<=GetMaxHitPoints(oPC))ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectTemporaryHitpoints(5),oPC,31.0);
}
if (iValue==4)
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_DEXTERITY,2),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_INTELLIGENCE,2),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_WISDOM,2),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectACDecrease(2),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowDecrease(SAVING_THROW_REFLEX,2),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowIncrease(SAVING_THROW_FORT,2),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillDecrease(SKILL_ALL_SKILLS,2),oPC,31.0);
if (GetCurrentHitPoints(oPC)<=GetMaxHitPoints(oPC))ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectTemporaryHitpoints(3),oPC,31.0);
}
if (iValue==5)
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_DEXTERITY,1),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_INTELLIGENCE,1),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectAbilityDecrease(ABILITY_WISDOM,1),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectACDecrease(1),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowDecrease(SAVING_THROW_REFLEX,1),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowIncrease(SAVING_THROW_FORT,1),oPC,31.0);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSkillDecrease(SKILL_ALL_SKILLS,1),oPC,31.0);
if (GetCurrentHitPoints(oPC)<=GetMaxHitPoints(oPC))ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectTemporaryHitpoints(1),oPC,31.0);
}
return;
}