mIRC Home    About    Download    Register    News    Help

Print Thread
#245648 30/04/14 08:15 PM
Joined: Apr 2014
Posts: 4
B
Self-satisified door
OP Offline
Self-satisified door
B
Joined: Apr 2014
Posts: 4
i got everything to work but the ticket roll. if i change the name that is allowed and try, it will say i'm not allowed only admins but if i change it back to my name it does nothing. Can someone please help

here is the raffle script

Quote:
on *:text:!ticket:#:{
if ($hget($+(tickets.,#),$nick)) { msg # $nick You already have a ticket! | return }
var %topic = $+(#,.,$nick)
; Check if enough points
if ($readini(Points.ini,%topic,Points) >= 1000) {
; Deduct the points
var %a = $v1 - 1000
writeini Points.ini %topic Points %a
; Add the user to tickets.#channel hash table, creating the table if it doesn't exist
hinc -m $+(tickets.,#) $nick
msg # $nick You bought a ticket, you now have %a points.
}
else msg # $nick Sorry, you only have $v1 points.
}
on *:text:!ticket roll:#:{
if ($nick == BeavisXtreme) {
if ($hget($+(tickets.,#))) {
var %i = $r(1,$hget(,0).item
msg # The winner is $hget($+(tickets.,#),%i).item
; The next line frees the table (all data in it is gone)
(hfree $+(tickets.,#))
}
else msg # Sorry $nick there is no such table $+(tickets.,#)
}
else msg # $nick Only Mods can use that command.
}


Joined: Jan 2004
Posts: 1,358
L
Hoopy frood
Offline
Hoopy frood
L
Joined: Jan 2004
Posts: 1,358
Originally Posted By: /help on text
Note: You cannot test out these events by typing text to yourself. They can only be initiated by someone else saying something in a channel or in a private message.

Joined: Apr 2014
Posts: 191
B
Vogon poet
Offline
Vogon poet
B
Joined: Apr 2014
Posts: 191
hinc -m $+(tickets.,#) $nick add hashtable with numbers as item and $nick as data, while you $hget($+(tickets.,#),$nick) using $nick as item which is never exists.

Also, this line var %i = $r(1,$hget(,0).item is incorrect.

Joined: Apr 2014
Posts: 4
B
Self-satisified door
OP Offline
Self-satisified door
B
Joined: Apr 2014
Posts: 4
i know, i have a seperate account for my bot, and i use my actual channel name for testing

Joined: Apr 2014
Posts: 4
B
Self-satisified door
OP Offline
Self-satisified door
B
Joined: Apr 2014
Posts: 4
Originally Posted By: blessing
hinc -m $+(tickets.,#) $nick add hashtable with numbers as item and $nick as data, while you $hget($+(tickets.,#),$nick) using $nick as item which is never exists.

Also, this line var %i = $r(1,$hget(,0).item is incorrect.


how would i go about fixing that i'm a complete noob at this trying to learn and thank you for you guy's input, i can buy a ticket and all that works but its the roll that does nothing i've just been banging my head and googling to no avail

Last edited by beavisxtreme; 01/05/14 02:54 PM.
Joined: Apr 2014
Posts: 191
B
Vogon poet
Offline
Vogon poet
B
Joined: Apr 2014
Posts: 191
Change hinc -m $+(tickets.,#) $nick with hadd -m $+(tickets.,#) $nick 1 and var %i = $r(1,$hget(,0).item with var %i = $r(1,$hget($+(tickets.,#),0).item)

Also remove () from (hfree $+(tickets.,#)) --> hfree $+(tickets.,#)

Joined: Apr 2014
Posts: 4
B
Self-satisified door
OP Offline
Self-satisified door
B
Joined: Apr 2014
Posts: 4
k ill give this a try and thanx a bunch for helping
UPDATE: OMG i love you thank you so much

Last edited by beavisxtreme; 01/05/14 07:24 PM.
Joined: May 2014
Posts: 27
E
Ameglian cow
Offline
Ameglian cow
E
Joined: May 2014
Posts: 27
Is there any way I can make it so they can buy more than 1 ticket with their points? To give them a better chance of winning?

Joined: Apr 2014
Posts: 191
B
Vogon poet
Offline
Vogon poet
B
Joined: Apr 2014
Posts: 191
I wrote this code some time ago. someone asked me to help him/her to turn this raffle into giveaway where users can buy tickets using points they have and also the user can buy more than one time.

Here is the code.
Code:
on *:text:!ticket *:#:{
  var %owner NICK1 NICK2 NICK3
  var %hash $+(ticket.,#) 
  if $istok(%owner,$nick,32) && $2 == on && !$hget(%hash) { 
    hmake %hash 
    msg # Ticket now is open. Use !ticket <point> to join.
  }
  elseif $2 isnum && $2 > 0 && $hget(%hash) {
    var %topic $+(#,.,$nick), %point $readini(points.ini,%topic,points)
    if %point >= $2 {
      var %p $calc(%point - $2)
      writeini points.ini %topic points %p 
      var %i $hget(%hash,0).item, %t $calc(%i + $2) 
      while %i < %t { inc %i | hadd %hash %i $nick }
      msg # $nick $+ , You bought $2 ticket, you now have %p points
    }
    else { msg # $nick Sorry, you only have %point points }
  }
  elseif $istok(%owner,$nick,32) && $2 == roll && $hget(%hash) {
    var %i $rand(1,$hget(%hash,0).data)
    msg # The winner is $hget(%hash,%i).data $+ . 
    hfree %hash
  }
}

change NICK1 NICK2 NICK3 with yournick, yourfriendnick, othernickyoutrust to do !ticket on and !ticket roll

here is how the script works.
user1 buy 20 ticket
bot will give him ticket no 1-20 (20 tickets)
user2 buy 70 ticket
bot will give him ticket no 21-90 (70 tickets)
user1 buy again 10 ticket
bot will give him ticket no 91-100 (10 tickets)
.. so on..

when you close it.
user1 has 30/100 = 30% chance to win
user2 has 70/100 = 70% chance to win

The code was tested by him/her and he/she said it works fine.

Joined: May 2014
Posts: 27
E
Ameglian cow
Offline
Ameglian cow
E
Joined: May 2014
Posts: 27
Thanks a lot Blessing. I'm guessing !ticket roll closes the raffle.

I currently have the code you posted plus this one

Code:
on *:text:!ticket roll:#:{
  if ($nick == forgottenheroes) {
    if ($hget($+(tickets.,#))) {
      var %i = $r(1,$hget($+(tickets.,#),0).item)
      msg # The winner is $hget($+(tickets.,#),%i).item
      ; The next line frees the table (all data in it is gone)
      hfree $+(tickets.,#)
    }
    else msg # Sorry $nick there is no entries at the moment. 
  }
  else msg # $nick Only Mods can use that command.
}


But when I added in your code It not longer says Sorry there is no entries. It just says nothing. and if I do !ticket on then type !ticket roll it just says the winner is 0 since nobody entered.

My old script allowed users to do !ticket once and it would enter them into the raffle just 1 time only. Then I did !ticket roll to pick a winner.

I'm gonna have to make it more neat looking so I can do !ticket on and it lets ppl know the raffle is now accepting points. Then I can do !ticket off to let the users know the raffle has ended and not accepting any new entries. Then I can do !ticket roll it gives the winner and clears the names.

Joined: Apr 2014
Posts: 191
B
Vogon poet
Offline
Vogon poet
B
Joined: Apr 2014
Posts: 191
This is modified version, but untested yet. It really does check here and there, responds this and that. So your channel might get flooded. You've been warned. wink

Usage:
!ticket <open/close/roll/end>

In this version, !ticket can be rolled/drawn more than one time.
Code:
on *:text:!ticket *:#:{
  var %owner NICK1 NICK2 NICK3
  var %hash $+(ticket.,#)
  if !$istok(%owner,$nick,32) && $istok(open close roll end,$2,32) { msg # You cant use this command. | return }
  if !$hget(%hash) && ($istok(close roll end,$2,32) || $2 isnum) {  msg # There is no open ticket. | return }
  if !$hget(%hash,close) && $istok(roll end,$2,32) { msg # !ticket is not closed yet. | return }
  if $hget(%hash,close) && ($2 == close || $2 isnum) { msg # !ticket is already closed by $hget(%hash,close) $+ . | return }  
  if $2 == open {
    if $hget(%hash) { msg # !ticket is still active | return }
    hmake %hash 
    msg # Ticket now is open. Use !ticket <point> to join.
  }
  if $2 isnum && $2 > 0 {
    var %topic $+(#,.,$nick), %point $readini(points.ini,%topic,points)
    if %point < $2 { msg # $nick Sorry, you only have %point points | return }
    var %p $calc(%point - $2)
    writeini points.ini %topic points %p 
    var %i $hget(%hash,0).item, %t $calc(%i + $2) 
    msg # $nick $+ , You bought $2 ticket ( no. $calc(%i + 1) - %t ), you now have %p points
    while %i < %t { inc %i | hadd %hash %i $nick }
  }
  if $2 == close {
    var %i 1 | while $hget(%hash,%i).data { var %d $addtok(%d,$v1,32) | inc %i }  
    msg # !ticket now is closed. ( total entries : $calc(%i - 1) tickets - $numtok(%d,32) users )
    hadd %hash close $nick
  }
  if $2 == roll {
    var %c $hget(%hash,close)
    hdel %hash close
    var %d $hget(%hash,0).item
    if !%d { msg # There is no ticket to draw. }
    else {
      var %i $rand(1,%d), %w $hget(%hash,%i).item
      msg # The winner is ticket no. %w ( $hget(%hash,%w) ) $+ .
      hdel %hash %w 
    }
    hadd %hash close %c
  }
  if $2 == end {
    hfree %hash
    msg # All tickets data now is cleared.
  }
}

Joined: May 2014
Posts: 16
R
Pikka bird
Offline
Pikka bird
R
Joined: May 2014
Posts: 16
Is there a way to add commands like !raffle on and !raffle off so people can't randomly buy tickets when there's no raffle going on?

I'm pretty new to scripting.

~Arden

Joined: May 2014
Posts: 10
Pikka bird
Offline
Pikka bird
Joined: May 2014
Posts: 10
Originally Posted By: radmux
Is there a way to add commands like !raffle on and !raffle off so people can't randomly buy tickets when there's no raffle going on?

I'm pretty new to scripting.

~Arden


I am pretty sure that every script posted here has exactly what you are looking for. They are just labeled as !ticket start and !ticket close.

Joined: May 2014
Posts: 16
R
Pikka bird
Offline
Pikka bird
R
Joined: May 2014
Posts: 16
Here's what I have:
Code:
;Raffle System (Beavis)
on *:text:!raffle on:*: {

  if ($nick isop #) {
    .enable !ticket | /msg $chan A raffle/giveaway is now in progress. To enter the giveaway, type "!ticket"; only 1 ticket is allowed per user. Each ticket costs 200 points. Good luck!
  }
  else { msg $chan This command is only available to moderators. }

}
on *:text:!raffle off:*: {
  if ($nick isop #) {
  .disable !ticket | /msg $chan Raffle/giveaway system is now OFF. }
  else { msg $chan This command is only available to moderators. }

}
on *:text:!ticket:#:{
  if ((%floodraffle) || ($($+(%,floodraffle.,$nick),2))) { return }
  set -u3 %floodraffle On
  set -u60 %floodraffle. $+ $nick On
  if ($hget($+(tickets.,#),$nick)) { msg # $nick , you already have a ticket! | return }
  var %topic = $+(#,.,$nick)
  ; Check if enough points
  if ($readini(Points.ini,%topic,Points) >= 200) {
    ; Deduct the points
    var %a = $v1 - 200
    writeini Points.ini %topic Points %a
    ; Add the user to tickets.#channel hash table, creating the table if it doesn't exist
    hadd -m $+(tickets.,#) $nick 1
    msg # $nick spent 200 points on a raffle ticket.

  }
else msg #  Sorry $nick , you don't have enough points to join this raffle. }

on *:text:!roll:#:{
  if ($nick isop #) {
    if ($hget($+(tickets.,#))) {
      var %i = $r(1,$hget($+(tickets.,#),0).item)
      msg # The winner is $hget($+(tickets.,#),%i).item
      ; The next line frees the table (all data in it is gone)
      hfree $+(tickets.,#)
    }
    else msg # There are no ticket entries at this time. 
  }
  else msg # $nick, only moderators can use that command.
  }


Note: My on and off commands are not working for me.

Also, I don't quite understand blessing's script, but I'll give it a whirl...

Joined: Jan 2004
Posts: 1,358
L
Hoopy frood
Offline
Hoopy frood
L
Joined: Jan 2004
Posts: 1,358
/enable is to enable groups (/help groups), not to enable or disable specific events.

Joined: May 2014
Posts: 16
R
Pikka bird
Offline
Pikka bird
R
Joined: May 2014
Posts: 16
Originally Posted By: Loki12583
/enable is to enable groups (/help groups), not to enable or disable specific events.

Well then what can I use?

I'm new to this scripting stuff...

Joined: Apr 2014
Posts: 191
B
Vogon poet
Offline
Vogon poet
B
Joined: Apr 2014
Posts: 191
Code:
on *:text:!raffle on:*: {

  if ($nick isop #) {
    .enable #ticket 
  }

}

#ticket off

on *:text:!ticket:#:{
  ...
}
on *:text:!roll:#:{
  ...
}

#ticket end



Link Copied to Clipboard