mIRC Home    About    Download    Register    News    Help

Print Thread
#205822 01/11/08 07:32 PM
Joined: Oct 2008
Posts: 167
S
Vogon poet
OP Offline
Vogon poet
S
Joined: Oct 2008
Posts: 167
I am creating bar (activated by typing !bar)

When the user types !bar they are presented with a menu. I am wondering if it is possible to have a price for each item on the menu. Then when they type: !bill, they are presented with a final price.

e.g.
Quote:
<User> !bar
<Bot> Hello user , Welcome to the bar, on todays menu we have, !coke , !coffee , !chips
<User> !coffee
<Bot> That will be £1.99, do you want !white or !black?
<User> !White
* Bot hands User a white coffee
<Bot> Any !milk or !sugar?
<User> !chips
<Bot> That will be £0.86
* Bot Hands User a plate of chips
<User> !bill
<Bot> You bought: White Coffee with chips which cost a total of: £2.85.
<Bot> Do you wish to pay by !cash or !card?
<User> !ca...

Last edited by seanturner70; 01/11/08 07:39 PM.
Joined: Aug 2004
Posts: 7,252
R
Hoopy frood
Offline
Hoopy frood
R
Joined: Aug 2004
Posts: 7,252
Yes it's possible.
A few questions.. Do you want to allow them to pay in a different currency than the posted currency?
If payment is in a different currency, how do you want exchange handled?
Are there any taxes on the items? If so, what and how much?
Is there a different tax rate for drinks versus food?
Is there a different tax rate for alcoholic drinks?
Is there a different rate if the bill is over a certain amount?
Do you want to limit how high the bill can get before being presented for payment?
Do you want to retain bills between sessions, in case someone runs a bill and leaves without paying?
Do you want them to be able to carry a bill from one session to the next if they don't have enough money to pay the bill?
Do you want a surcharge for using the !card option?
Do you want to accept only certain cards?
Do you want Paypal as an alternative?

That's all I can think of at the moment, but it'll give you some things to think about that you might not have considered.

Joined: Oct 2008
Posts: 167
S
Vogon poet
OP Offline
Vogon poet
S
Joined: Oct 2008
Posts: 167
Yes, if possible I would like the currency to be able to be changed.

I would like it if the bills could be retained.

But really, it is only to have a "cool" bot... Not a REAL payment system.

Joined: Nov 2006
Posts: 1,559
H
Hoopy frood
Offline
Hoopy frood
H
Joined: Nov 2006
Posts: 1,559
My suggestion: don't dare something too "big" at once, but go for it step by step. Practice using if-then-else conditions, $calc-ulations, how to store data in global variables and maybe ini files later, etc.
Then, start with a simple structure, think about possible things to add later, but don't add it all at once. Let it grow instead.

You may start with a "plaintext" sketch of your script before you translate it to actual code, allowing to "play" different scenarios in your mind (and with your finger on the screen or paper), to find loopholes etc. Something like:
Code:
on text event {
  if its a valid order {
    if A orders coffee { ask white or black }
    elseif A orders white { pass white and increase %bill.of.A by ammount x }
    elseif A orders black { pass black and increase %bill.of.A by ammount x }
    elseif A orders peanuts {
      pass peanuts
      inform about the advantages of having a cold beer with the nuts
      increase %bill.of.A by ammount y
    }
    elseif... { ... }
  }
  elseif A orders the bill {
    if theres a %bill.of.A {
      inform A about the total of %bill.of.A 
      ask about payment method
    }
    else { laugh at A }
  }
  elseif A pays the bill {
    if he pays more {
      say thanks for the tip
      delete the %bill.of.A
    }
    elseif he pays less {
      decrease the %bill.of.A respectively
      inform A about the remaining debt
    }
    else {
      delete the bill.of.A
      bitch that there was no tip at all
    }
  }
}





Joined: Oct 2008
Posts: 167
S
Vogon poet
OP Offline
Vogon poet
S
Joined: Oct 2008
Posts: 167
ok, thanks smile

Joined: Oct 2008
Posts: 167
S
Vogon poet
OP Offline
Vogon poet
S
Joined: Oct 2008
Posts: 167
If its not too much bother, what would the "working" version look like?

Joined: Nov 2006
Posts: 1,559
H
Hoopy frood
Offline
Hoopy frood
H
Joined: Nov 2006
Posts: 1,559
My personal experience is that one always will find something to add, change, or remove in "bot scripts" like this one - it's open ended, and thus it's of little use to write it down for you - 'cause first of all it should be/stay your script/bot, reflecting your own ideas and preferences.
You should write it, or try it at least. smile
We can/will provide help to solve specific problems you encounter and come along with, but it's inevitable that you learn (practise) e.g. to build your own "if-then-else" trees, which are indispensable in a bot script with a lot of varieties. You can find some examples e.g. in the "/help", or reading through similar scripts. Other catchwords for the /help file: if then else, /set, /inc, $calc

Joined: Oct 2008
Posts: 167
S
Vogon poet
OP Offline
Vogon poet
S
Joined: Oct 2008
Posts: 167
Ok, I am sort of following it...

Would I change all those A's to $nick or similar?


Joined: Aug 2004
Posts: 7,252
R
Hoopy frood
Offline
Hoopy frood
R
Joined: Aug 2004
Posts: 7,252
Yes

Joined: Oct 2008
Posts: 167
S
Vogon poet
OP Offline
Vogon poet
S
Joined: Oct 2008
Posts: 167
Ok, So far I have:
Code:
on text event {
  if its a valid order {
    if $nick orders coffee { ask white or black }
    elseif $nick orders white { pass white and increase %bill.of.$nick by ammount £0.82 }
    elseif $nick orders black { pass black and increase %bill.of.$nick by ammount £0.82 }
    elseif $nick orders peanuts {
      pass peanuts
      inform about the advantages of having a cold beer with the nuts
      increase %bill.of.$nick by ammount y
    }
    elseif... { ... }
  }
  elseif $nick orders the bill {
    if theres a %bill.of.$nick {
      inform $nick about the total of %bill.of.$nick 
      ask about payment method
    }
    else { laugh at $nick }
  }
  elseif $nick pays the bill {
    if he pays more {
      say thanks for the tip
      delete the %bill.of.$nick
    }
    elseif he pays less {
      decrease the %bill.of.$nick respectively
      inform $nick about the remaining debt
    }
    else {
      delete the bill.of.$nick
      bitch that there was no tip at all
    }
  }
}


Am I going wrong so far?

Last edited by seanturner70; 02/11/08 11:48 PM.
Joined: Aug 2004
Posts: 7,252
R
Hoopy frood
Offline
Hoopy frood
R
Joined: Aug 2004
Posts: 7,252
Looks good so far.
Next step is to convert it from pseudocode (which is what the kind of code you've been doing) to mIRC code.

You'll want to ensure that the help file is available, as it will be your best reference when changing it to a code that mIRC will understand.

Good luck, and if you run into something you can't figure out, don't hesitate to ask.

Joined: Jul 2007
Posts: 1,129
T
Hoopy frood
Offline
Hoopy frood
T
Joined: Jul 2007
Posts: 1,129
This is my version of script based on what you requested for originally, but there's a drawback, that is, it can only calculate the total cost of two items purchased. I think I've covered all of the trigger commands you depicted. Nevertheless, this script could be further improved.

Code:
alias bill {
  var %b = %x + %y
  return %b
}
on $*:TEXT:$(/[!](coffee|chips)/Si):#: {
  if ($regml(1) == coffee) { 
    msg # that will be £1.99, do you want !white or !black?
    set %coffee coffee | set %x 1.99
  }
  if ($regml(1) == chips) { 
    msg # That will be £0.86. Thank you.
    .timerchips 1 3 describe # Bot hands $nick a plate of chips.
    set %chips chips | set %y 0.86 
  }
}
on *:TEXT:*:#: {
  if ($1 == !bar) { msg # Welcome $nick $+ , welcome to the bar! On today's menu we have, !coke , !coffee , and !chips }
  if ($1 == !milk) { describe # Bot hands $nick a teaspoon of milk. }
  if ($1 == !sugar) { describe # Bot hands $nick a teaspoon of sugar. }
  if ($1 == !bill) && (coffee isin %coffee) { msg # $nick $+ , you bought %coffee which cost: £ $+ %x | msg # $nick !cash or !card ? }
  if ($1 == !bill) && (chips isin %chips) { msg # $nick $+ , you bought %chips which cost: £ $+ %y | msg # $nick !cash or !card ? }
  if (coffee isin %coffee) && (chips isin %chips) { 
    msg # $nick $+ , your total comes down to: £ $+ $bill | Do you wish to pay by !cash or !card ?
  }
  if ($1 == !cash) { describe # Bot took $nick $+ 's cash for the purchase and gave $nick a receipt. }
  if ($1 == !card) { describe # Bot took $nick $+ 's card for the purchase and match $nick $+ 's ID and signature. }
  elseif ($1 == !bill) && (coffee !isin %coffee) && (chips !isin %chips) { 
    msg # $nick $+ , you haven't bought anything yet. 
  }
  if ($regex($1-,[!](black|white))) {
    if ($regml(1) == black) { 
      describe # Bot hands $nick a cup of black coffee.
      .timerwb1 1 3 msg #  Any !milk or !sugar? 
    } 
    if ($regml(1) == white) { 
      describe # Bot hands $nick a cup of white coffee.
      .timerwb1 1 3 msg #  Any !milk or !sugar? 
    }
  }
}

Joined: Oct 2008
Posts: 167
S
Vogon poet
OP Offline
Vogon poet
S
Joined: Oct 2008
Posts: 167
Ok, I am starting to struggle.

I think I need to drop doing the Full thing at first...

So, I am starting with:
Code:
on 1:text:*:#: {
 if ($me == no-nick) {
  if !bar { msg $chan 11 Hello $nick Welcome To Bullets Bar We Have on the menu today || $&
      !Beer , !Coffee , !Nuts , !Haribos , !Water , !Coke , !Pepsi , !Cola , !Chips , !ChickenWings , !Pizza.6 We also have !desserts 3 Remember to pay by typing, !bill } 
  if !Beer { msg $chan Heres13 Your Beer 11 $nick }
 {
{   


I am unsure how you would make the bill go up, and if I am doing it right just now.

Joined: Oct 2008
Posts: 167
S
Vogon poet
OP Offline
Vogon poet
S
Joined: Oct 2008
Posts: 167
Thanks Tomao, But I think I will follow Horstl's advice.

Also, that script seems to flood - idk why.

Joined: Jul 2007
Posts: 1,129
T
Hoopy frood
Offline
Hoopy frood
T
Joined: Jul 2007
Posts: 1,129
I just have an idea that you can convert the code you've shown here into something as such:

Code:
on *:TEXT:!bar:#: { 
  msg # $nick $+ , welcome to Bullets Bar! Here are what we have on the menu today:
  var %m = !Beer !Coffee !Nuts !Haribos !Water !Coke !Pepsi !Cola !Chips !ChickenWings !Pizza !desserts
  var %x = 1 | while $gettok(%m,%x,32) { inc %x | msg # 4 $+ $v1 }
} 

Last edited by Tomao; 04/11/08 07:19 AM.
Joined: Oct 2008
Posts: 167
S
Vogon poet
OP Offline
Vogon poet
S
Joined: Oct 2008
Posts: 167
Hmm... I don't understand that.

Joined: Jan 2007
Posts: 1,156
D
Hoopy frood
Offline
Hoopy frood
D
Joined: Jan 2007
Posts: 1,156
Originally Posted By: seanturner70
Ok, I am starting to struggle.

I think I need to drop doing the Full thing at first...

So, I am starting with:
Code:
on 1:text:*:#: {
 if ($me == no-nick) {
  if !bar { msg $chan 11 Hello $nick Welcome To Bullets Bar We Have on the menu today || $&
      !Beer , !Coffee , !Nuts , !Haribos , !Water , !Coke , !Pepsi , !Cola , !Chips , !ChickenWings , !Pizza.6 We also have !desserts 3 Remember to pay by typing, !bill } 
  if !Beer { msg $chan Heres13 Your Beer 11 $nick }
 {
{   


I am unsure how you would make the bill go up, and if I am doing it right just now.



Floods? Look at your brackets... also ... !bar ? !beer? These are not variables or custom identifiers.

Allow me to explain the basic idea. With scripting the toughest part is figuring out how you want to do things. Once you have this figured out it's very easy to find the commands and identifiers and events you need to make it happen.

Let's make it real easy using an ini file to store customers purchases. Let's just assume money is unlimited and they can order whatever they like first.

A person orders a milk, script knows milk is $5. So you would want to $calc their existing bill PLUS $5.

Let's name the ini file bar.ini. We can name the section after the room later if you like, in case you want a seperate bill for each room you run it in. For now let's just make one big section for all customers. Name it bar.

Quote:
bar.ini

[bar]
Johnny=5
Mary=10


So! $readini(bar.ini,bar,Johnny) == 5

Johnny orders a beer that costs $7. So then the script will ...

Code:
/writeini bar.ini bar Johnny $calc($readini(bar.ini,bar,Johnny) + 7)


Now JOhnny's bill is:

$readini(bar.ini,bar,Johnny) == 12

/msg $chan Here you go $nick ! Your total bill is now $readini(bar.ini,bar,Johnny) $+ ! Thank You!

Not too tough yeah?

Now JOhnny wants to pay so you give him a command. "!pay 7"

When Johnny does this command the script will basically use $calc to subtract the amount he chose to pay from the amount in the ini file. You will want to check to make sure he has a balance owed and make sure his payment doesn't exceed it. Or maybe you will allow them to pay forward and give themselves a negative balance (future credit).

That's pretty much it! Keep it simple at first. Create the infrastructure, the basic engine for the bar game. Once it is smoothly running you can start adding features.

Joined: Oct 2008
Posts: 167
S
Vogon poet
OP Offline
Vogon poet
S
Joined: Oct 2008
Posts: 167
Kinda understanding... I will try.


Link Copied to Clipboard