Jaysyn904 102ba7dab6 Initial Commit
Initial Commit
2023-09-21 19:51:32 -04:00

375 lines
6.5 KiB
Plaintext

/*
Gambletron 2000 Slot Machine v1.0 for Neverwinter nights.
Written by Steven Hunter (steven_hunter@NOSPAMyahoo.com)
D&D-ized, added Skull "fruit", FX and other butchery - caesarbear
Features
-Easily extendable to include additional wheels or symbols.
-Variable payout scale.
-Variable odds (looseness).
-Works with any size bet (within integer limits).
CustomToken numbers used:
90001 = Results token
90002 = Win/lose/error token
Coming soon:
Video Poker
Also available:
Baccarat
*/
void main()
{
object oPC = GetPCSpeaker();
//object oArea = GetArea(OBJECT_SELF);
object oSlotBox = GetNearestObjectByTag("SlotBox");
location lBox = GetLocation(oSlotBox);
location lNew;
vector vVec;
vector vNew;
effect eWin;
int iFudge = 0; //To be used later for a "fudge factor".
int wheel1 = d100() + iFudge;
int wheel2 = d100() + iFudge;
int wheel3 = d100() + iFudge;
int val = 0;
int payout = 0;
int bet = GetLocalInt(oPC, "bet"); //Must be set from another script
SetCustomToken(90001, "No results to show. ");
if (GetGold(oPC) < bet) //No credit given!
{
SetCustomToken(90002, "You do not have enough GP to cover that bet! Please choose a different amount. Try again?");
return;
}
if (bet < 1) //Should never occur.
{
SetCustomToken(90002,"Wow, somehow you bet less than 1 GP. Bet has been reset to 1GP. Try again?");
SetLocalInt(oPC, "bet", 1);
return;
}
TakeGoldFromCreature(bet, oPC, TRUE);
ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE, 1.0, 1.0);
ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE, 1.0, 1.0);
string fruit1 = "Blank";
string fruit2 = "Blank";
string fruit3 = "Blank";
//if (d6() > 1){//This affects the loose-ness of the machine. The closer to 1=1
//you get the looser it is.
if (wheel1 < 21){
fruit1 = "Skull";
val = val + 0;
}else{
if (wheel1 < 51){
fruit1 = "Orc";
val = val + 1;
}else{
if (wheel1 < 76){
fruit1 = "Torch";
val = val + 2;
}else{
if (wheel1 < 90){
fruit1 = "Sword";
val = val + 3;
}else{
if (wheel1 < 99){
fruit1 = "Wizard";
val = val + 4;
}else{
if (wheel1 < 101 + iFudge){
fruit1 = "Dragon";
val = val + 5;
}
}
}
}
}
}
//}
//if (d6() > 1){
if (wheel2 < 21){
fruit2 = "Skull";
val = val + 0;
}else{
if (wheel2 < 51){
fruit2 = "Orc";
val = val + 10;
}else{
if (wheel2 < 76){
fruit2 = "Torch";
val = val + 20;
}else{
if (wheel2 < 90){
fruit2 = "Sword";
val = val + 30;
}else{
if (wheel2 < 99){
fruit2 = "Wizard";
val = val + 40;
}else{
if (wheel2 < 101 + iFudge){
fruit2 = "Dragon";
val = val + 50;
}
}
}
}
}
}
//}
//if (d6() > 1){
if (wheel3 < 21){
fruit3 = "Skull";
val = val + 0;
}else{
if (wheel3 < 51){
fruit3 = "Orc";
val = val + 100;
}else{
if (wheel3 < 76){
fruit3 = "Torch";
val = val + 200;
}else{
if (wheel3 < 90){
fruit3 = "Sword";
val = val + 300;
}else{
if (wheel3 < 99){
fruit3 = "Wizard";
val = val + 400;
}else{
if (wheel3 < 101 + iFudge){
fruit3 = "Dragon";
val = val + 500;
}
}
}
}
}
}
//}
switch(val){
/*
case XYZ:
X = wheel3
Y = wheel2
Z = wheel1
0 = Skull
1 = Lemon now Orc
2 = Cherry Torch
3 = Orange Sword
4 = Liberty Bell Wizard
5 = Lucky 7 Dragon
payout = the multiplier
Below are the winning combinations:
*/
case 111:
{
payout = 2;
PlaySound("as_an_koboldwee");
break;
}
case 222:
{
payout = 5;
eWin = EffectVisualEffect(60);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWin, lBox);
break;
}
case 333:
{
payout = 10;
eWin = EffectVisualEffect(495);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWin, lBox);
break;
}
case 444:
{
payout = 20;
eWin = EffectVisualEffect(39);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWin, lBox);
break;
}
case 555:
{
payout = 100;
eWin = EffectVisualEffect(464);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWin, lBox);
eWin = EffectVisualEffect(40);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWin, lBox);
break;
}
case 112:
case 113:
case 114:
case 115:
case 211:
case 311:
case 411:
case 511:
case 121:
case 131:
case 141:
case 151:
case 110:
case 101:
case 11:
{
payout = 1;
PlaySound("as_cv_barglass2");
break;
}
case 221:
case 223:
case 224:
case 225:
case 122:
case 322:
case 422:
case 522:
case 212:
case 232:
case 242:
case 252:
case 220:
case 202:
case 22:
{
payout = 2;
PlaySound("as_cv_potclang1");
break;
}
case 331:
case 332:
case 334:
case 335:
case 133:
case 233:
case 433:
case 533:
case 313:
case 323:
case 343:
case 353:
case 330:
case 303:
case 33:
{
payout = 4;
PlaySound("as_cv_bellship1");
break;
}
case 441:
case 442:
case 443:
case 445:
case 144:
case 244:
case 344:
case 544:
case 414:
case 424:
case 434:
case 454:
case 440:
case 404:
case 44:
{
payout = 8;
eWin = EffectVisualEffect(34);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWin, lBox);
break;
}
case 551:
case 552:
case 553:
case 155:
case 255:
case 355:
case 515:
case 525:
case 535:
case 550:
case 505:
case 55:
{
payout = 10;
eWin = EffectVisualEffect(54);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWin, lBox);
break;
}
case 123:
case 132:
case 321:
case 312:
case 231:
case 213:
{
payout = 5;
eWin = EffectVisualEffect(92);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWin, lBox);
break;
}
case 545:
case 455:
case 554:
{
payout = 25;
eWin = EffectVisualEffect(487);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWin, lBox);
break;
}
case 0:
{
payout = 3;
vVec = GetPositionFromLocation(lBox);
vNew = Vector(vVec.x,vVec.y,0.70);
lNew = Location(GetAreaFromLocation(lBox),vNew,GetFacingFromLocation(lBox));
eWin = EffectVisualEffect(218);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWin, lNew);
break;
}
}//End Switch
SetCustomToken(90001, "Here is the result: | " + fruit1 + " | " + fruit2 + " | " + fruit3 + " |");
if (payout > 0)
{
SetCustomToken(90002, "Winner paid " + IntToString(bet * payout) + " GP. Play again?");
GiveGoldToCreature(oPC, (bet * payout)); //Pay the (wo)man.
}
else
{
SetCustomToken(90002, "Sorry, you lost. Play again?");
}
return;
} //End main