Added CCOH and missing areas Changed some areas to be craftable, Fixed some on death issues, Fixed the Gaurd
298 lines
13 KiB
Plaintext
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;
|
|
}
|