|
Joined: Feb 2005
Posts: 27
Ameglian cow
|
OP
Ameglian cow
Joined: Feb 2005
Posts: 27 |
Heya all again , ok i posted this small !rob thing before about a timer for it and it worked great..But this time i need it to able to not rob when someone has typed - !away - within the game any ideas ?? on *:text:!rob*:#Battle: { if (%rob [ $+ [ $nick ] ] == on) { msg $nick You Have Already Robbed Someone Within 5 mins! halt } if (%rob [ $+ [ $nick ] ] != on) && ($2 ison #) && (%account [ $+ [ $2 ] ] == on) { msg $chan $nick Attempts To Rob $2 set %attempt $rand(1,5) } if (%attempt == 1) { set %tthier-money $round($calc(%money [ $+ [ $2 ] ] / 2),0) msg $chan $nick SuccessFully Robs $2 msg $chan $nick Has Robbed $2 by %tthier-money Money From $2 inc %money [ $+ [ $nick ] ] %tthier-money dec %money [ $+ [ $2 ] ] %tthier-money set -u300 %rob [ $+ [ $nick ] ] on } else { msg $chan $nick Has Failed To Rob $2 ! set -u300 %rob [ $+ [ $nick ] ] on } } thx for your time here , many thx
|
|
|
|
Joined: Aug 2004
Posts: 7,252
Hoopy frood
|
Hoopy frood
Joined: Aug 2004
Posts: 7,252 |
on *:text:!away:#: set %account [ $+ [ $nick ] ] == off
Based on your code given, that should stop someone from robbing them. Hope it works
|
|
|
|
Joined: Feb 2005
Posts: 27
Ameglian cow
|
OP
Ameglian cow
Joined: Feb 2005
Posts: 27 |
Nope i still rob them , thx any ways..
Last edited by omen_253; 20/03/05 04:18 PM.
|
|
|
|
Joined: Apr 2003
Posts: 701
Hoopy frood
|
Hoopy frood
Joined: Apr 2003
Posts: 701 |
It's probably on *:text:!away:#:set %account [ $+ [ $nick ] ] off without the == But I would use another set of %vars for that, just to prevent unintended account or rob status changes... on *:text:!away:#Battle: set %rob.AWAY. [ $+ [ $nick ] ] on on *:text:!rob*:#Battle: { if (%rob. [ $+ [ $nick ] ] == on) { msg $nick You Have Already Robbed Someone Within 5 mins! halt } if (%rob.AWAY. [ $+ [ $2 ] ] == on) { msg $nick $2 is away! halt } if (%rob. [ $+ [ $nick ] ] != on) && ($2 ison #) && (%account [ $+ [ $2 ] ] == on) { msg $chan $nick Attempts To Rob $2 if (!$rand(0,4)) { set %tthier-money $round($calc(%money [ $+ [ $2 ] ] / 2),0) msg $chan $nick SuccessFully Robs $2 msg $chan $nick Has Robbed $2 by %tthier-money Money From $2 inc %money [ $+ [ $nick ] ] %tthier-money dec %money [ $+ [ $2 ] ] %tthier-money set -u300 %rob. [ $+ [ $nick ] ] on } else { msg $chan $nick Has Failed To Rob $2 ! set -u300 %rob [ $+ [ $nick ] ] on } } } What's still missing I guess: a way to get back after someone types !away on *:text:!back:#Battle: set %rob.AWAY. [ $+ [ $nick ] ] And some assorted tips and tricks: - I'm personally fan of using 1 for "on" and 0 for "off": //if (%var) is the same as //if (%var == on) if you use 0 (or $null, %var doesn't exist) for false and 1 for true. It's shorter too - Replaced your $rand(1,5) with !$rand(0,4) -> !0 = 1(true), !1 (or !4) = 0(false) - I used %rob.AWAY. -> the . makes the separation between the constant part (%rob) and the changing part ($nick) more clear. Not that it matters much since you're probably not reading your Variables section daily
|
|
|
|
Joined: Aug 2004
Posts: 7,252
Hoopy frood
|
Hoopy frood
Joined: Aug 2004
Posts: 7,252 |
basically it shouldn't matter what was assigned to %account [ $+ [ $nick ] ] as long as it was something other than ON, which is one of the parameters checked in the original script. So while you are correct, the == wasn't required, in theory, it shouldn't have mattered, since the value of %account [ $+ [ $nick ] ] was being changed from ON, therefore making the comparison false
|
|
|
|
Joined: Dec 2002
Posts: 3,547
Hoopy frood
|
Hoopy frood
Joined: Dec 2002
Posts: 3,547 |
Nope i still rob them , thx any ways.. I shall inform the police because of your theiving.
|
|
|
|
Joined: Sep 2003
Posts: 4,230
Hoopy frood
|
Hoopy frood
Joined: Sep 2003
Posts: 4,230 |
IF your going for preventing uninteneded side effects like I assume you were by using %rob.AWAY.$nick Then you should not have gone and changed the code so much.
Side effects I saw... (1) A likely uninteneded logic hole has been patched (this in fact my be good) .. Say that if (%rob [ $+ [ $nick ] ] != on) && ($2 ison #) && (%account [ $+ [ $2 ] ] == on) { Failed but global var %Attempt was 1 at the time, then if (%attempt == 1) { should succeed, it no longer does. (2) Game logic has been altered, originally If you attempt a !rob and you have not robbed in 30 mins, regardless of what happens you can not attempt a !rob again for 30 mins (changed to 5 mins now) (3) Global var %Attempt is no longer set, this may or may not be used else where to report the success or failure of the last !rob attempt
Personally, If it had been me , I would have just taken a punt that It would have been ok to do and use /set %account$nick away
|
|
|
|
Joined: Apr 2003
Posts: 701
Hoopy frood
|
Hoopy frood
Joined: Apr 2003
Posts: 701 |
for 1) and 3) I hate strange global %vars that noone knows what they're for and change seemingly randomly. In this case, if the %attempt is set or even used somewhere else, the logic behind it is most likely unintended or (intended and) just plain wrong So if that %attempt was indeed used elsewhere, he should thank me for breaking it and making him use something that has at least some chance of being correct. :tongue: I have the strong feeling that the OP always uses /set for local vars (like %attempt, %tthier-money) etc, where it's really better to use /var %attempt = bleh for those, so that they don't interfere with other scripts, giving strange results and that your %variables sections does not look like a collection of counters and stuff for 2) I don't see any half hours in the original code or in mine
|
|
|
|
Joined: Feb 2005
Posts: 27
Ameglian cow
|
OP
Ameglian cow
Joined: Feb 2005
Posts: 27 |
OK thx , I have not tried it yet but i will .. Also this Script which is a game has a - !away !back - part to it i was not sure i you needed it , sorry. I seem to think it will work from this part within the script. The - !away !back - part: on *:text:!Away:#Battle: { if (%away [ $+ [ $nick ] ] == on) { msg $nick You Are Already set As Away! halt } else { msg $nick You Are Now Away!! set %away [ $+ [ $nick ] ] on } } on *:text:!Back:#Battle: { if (%away [ $+ [ $nick ] ] != on) { msg $nick Your Trying To Get back from what?!?!? Your Already Back } else { msg $nick You Are Now Set To Back unset %away [ $+ [ $nick ] ] } } Also when you try to - !fight - someone in the game who's NIC is set to - !away - you cant which is good It tells you that you cant - !fight - that nic.. I seem to think that is needs to be change to help with not bein able to - !rob - someone when - !away - on *:text:!fight*:#Battle: { if (%account [ $+ [ $nick ] ] != on) { msg $nick You Have NO Account | halt } if (%account [ $+ [ $2 ] ] != on) { msg $nick $2 Has No Account | halt } if (%away [ $+ [ $nick ] ] == on) { msg $nick You Are Away You Cannot Battle! | halt } if (%away [ $+ [ $2 ] ] == on) { msg $nick $2 Is Away You cannot Battle | halt } if (%battle == on) { msg $nick Sorry A Battle Is Already on! | halt } if (%account [ $+ [ $nick ] ] == on) && (%account [ $+ [ $2 ] ] == on) { if ($2 ison #) && (%battle != on) { set %turner $rand(1,2) if (%turner == 1) { set %turn $nick } if (%turner == 2) { set %turn $2 } Thx so much for your time and help here ...
|
|
|
|
Joined: Feb 2005
Posts: 27
Ameglian cow
|
OP
Ameglian cow
Joined: Feb 2005
Posts: 27 |
Ok thx i have tried, done this .. } on *:text:!Away:#Battle: set %rob.AWAY. [ $+ [ $nick ] ] on on *:text:!back:#Battle: set %rob.AWAY. [ $+ [ $nick ] ] on *:text:!rob*:#Battle: { if (%rob [ $+ [ $nick ] ] == on) { msg $nick You Have Already Robbed Someone Within 5 mins! halt } if (%rob [ $+ [ $nick ] ] != on) && ($2 ison #) && (%account [ $+ [ $2 ] ] == on) { msg $chan $nick Attempts To Rob $2 set %attempt $rand(1,5) } if (%attempt == 1) { set %tthier-money $round($calc(%money [ $+ [ $2 ] ] / 2),0) msg $chan $nick SuccessFully Robs $2 msg $chan $nick Has Robbed $2 by %tthier-money Money From $2 inc %money [ $+ [ $nick ] ] %tthier-money dec %money [ $+ [ $2 ] ] %tthier-money set -u300 %rob [ $+ [ $nick ] ] on } else { msg $chan $nick Has Failed To Rob $2 ! set -u300 %rob [ $+ [ $nick ] ] on } } I think it works but not sure as it tells you --- 'omen Has Failed To Rob God !' Which is in the esle part - else { msg $chan $nick Has Failed To Rob $2 ! set -u300 %rob [ $+ [ $nick ] ] on } } Thx for your time and help again ..
|
|
|
|
Joined: Apr 2003
Posts: 701
Hoopy frood
|
Hoopy frood
Joined: Apr 2003
Posts: 701 |
Just a few tips first, I hope you don't mind...
The /halt is not required in the on *:text:!Away:#Battle: trigger. The else part is skipped anyway, and a return is done automatically at the end of the code. It can change if you are going to add some code after that, and for those cases I'd use /return instead of /halt. /halt also sets $halted for other scripts (.mrc files) and can stop mIRC from displaying the text if it's an on ^*:TEXT
Try to use /var %turn = blah instead of /set %turn blah for those %variables that you only need during the trigger itself. This makes it more clear which variables are for storing information about nicks and which variables are only used to keep some info during the processing of the on TEXT event. For your case: use /set for %away [ $+ [ $nick ] ] and %rob [ $+ [ $nick ] ] but /var for %turn, %turner and such...
set %turner $rand(1,2) if (%turner == 1) { set %turn $nick } if (%turner == 2) { set %turn $2 } You can replace all this with (assuming you only use %turn in this on TEXT event) if ($rand(0,1)) var %turn = $nick else var %turn = $2 or even: var %turn = $iif($rand(0,1),$nick,$2)
|
|
|
|
Joined: Apr 2003
Posts: 701
Hoopy frood
|
Hoopy frood
Joined: Apr 2003
Posts: 701 |
You can remove those %rob.AWAY. stuff since you have your own away stuff. The green text is the code to check if $nick or $2 is away. The red text is really made difficult, and it's probably incorrect: if someone successfully robs someone, everyone will be able to unless they are away or robbed less than 300 seconds ago. %attempt == 1 and it's done with /set so it's kept and never changed to 0... wrong: set %attempt $rand(1,5) } if (%attempt == 1) {
on *:text:!rob*:#Battle: { if (%rob [ $+ [ $nick ] ] == on) { msg $nick You Have Already Robbed Someone Within 5 mins! return } if (%away [ $+ [ $nick ] ] == on) { msg $nick You're away, no robbing when you're away! return } if (%away [ $+ [ $2 ] ] == on) { msg $nick $2 is away, you cannot rob someone who is away! return }
if (%rob [ $+ [ $nick ] ] != on) && ($2 ison #) && (%account [ $+ [ $2 ] ] == on) { msg $chan $nick Attempts To Rob $2 if ($rand(1,5) == 1) { set %tthier-money $round($calc(%money [ $+ [ $2 ] ] / 2),0) msg $chan $nick SuccessFully Robs $2 msg $chan $nick Has Robbed $2 by %tthier-money Money From $2 inc %money [ $+ [ $nick ] ] %tthier-money dec %money [ $+ [ $2 ] ] %tthier-money } else msg $chan $nick Has Failed To Rob $2 ! set -u300 %rob [ $+ [ $nick ] ] on } }
|
|
|
|
Joined: Sep 2003
Posts: 4,230
Hoopy frood
|
Hoopy frood
Joined: Sep 2003
Posts: 4,230 |
for 1) and 3) I hate strange global %vars that noone knows what they're for and change seemingly randomly. ..... I agree, random vars are hard to work out and also incredibly stupid to have used, like no other script might ever use the word %attempt !??!?!?!? If i need (choose really since u can always do something else) to store a global var, ill name it %djc.scriptname.releventname (djc is my initials) this keeps all mine together for 2) I don't see any half hours in the original code or in mine original code The game logic was effected also if Bill does a !rob then unless his cant rob flag is up then it well be set to up, even if the the rob was invalid values (for ex $2 might not be in channel) While you now allow Bill to repeatedly type !rob untill $2 is not away, is in channel and account is on, and that is a significant change in play ability, part of the game MAY have been that users had to keep a watchfull eye on who was away who wasnt who was in channel who wasnt who had an account and who didnt. But personally? well i just think the original script was full of holes, like it never even checks if $nick's account is on for a start. So you turn your account off and go around and rob people :-)
|
|
|
|
Joined: Apr 2003
Posts: 701
Hoopy frood
|
Hoopy frood
Joined: Apr 2003
Posts: 701 |
Ah, well, I don't go around searching the forum for old versions of code if it's posted again in this thread I can't help it if the OP changes those timers between threads... For the holes stuff: maybe it's better to start on paper, write down all triggers (with their required arguments) and for each trigger, think about what needs to be done, and write down all conditions to check for (away, account, status, etc) and write down the reaction. This can all be in pseudocode or just short text. Also, take another sheet of paper and write down all data structures you need ("for each nick an away status") and how you think to keep that data in mIRC (%vars, hash tables, ini files, recalculate, User list, ...) Then read those things again a few times, check for inconsistencies, omissions, errors, try to do some strange scenario's in your mind and see if they are handled ok. If all that checks out, then you can start scripting in mIRC I know it's a lot of work, but for such complex stuff, it usually pays off.
|
|
|
|
Joined: Feb 2005
Posts: 27
Ameglian cow
|
OP
Ameglian cow
Joined: Feb 2005
Posts: 27 |
Thx m8 have not tried it yet but i will tonite... thx so much for everyones help & time here.... Plus is there any way of adding a limit to !rob what i mean is if i !rob someone they must have more than 1000 money for me to be able to !rob them. No limit on the person doing the !rob... Each nics money and stats are in variables..
%moneyomen_253 1331
Also if unsuccessful in !rob i get - Has Failed To Rob God - can this be set to some type of Chance type punishment for being unsuccessful in a !rob IE: cant !rob for 1hour : pay out 500 money to the person you try to !rob : loss of health Only to happen to nic that is unsuccessful in !rob Health is also in variables
else msg $chan $nick Has Failed To Rob $2 !
%healthomen_253 130
How can i set it so that you have to /notice botnic !rob <nic> so ppl cant tell who is robbing them.. Thx for your time & help here...
Last edited by omen_253; 22/03/05 11:02 AM.
|
|
|
|
Joined: Feb 2005
Posts: 27
Ameglian cow
|
OP
Ameglian cow
Joined: Feb 2005
Posts: 27 |
Welldone it stop ppl from !rob when set to !away..... thx for your help here thx thx .. Welldone it working Great thx a million.....
Last edited by omen_253; 22/03/05 12:44 PM.
|
|
|
|
Joined: Apr 2003
Posts: 701
Hoopy frood
|
Hoopy frood
Joined: Apr 2003
Posts: 701 |
Plus is there any way of adding a limit to !rob what i mean is if i !rob someone they must have more than 1000 money for me to be able to !rob them. See red stuff: Also if unsuccessful in !rob i get - Has Failed To Rob God - can this be set to some type of Chance type punishment for being unsuccessful in a !rob IE: cant !rob for 1hour : pay out 500 money to the person you try to !rob : loss of health Only to happen to nic that is unsuccessful in !rob See blue stuff: How can i set it so that you have to /notice botnic !rob <nic> so ppl cant tell who is robbing them.. See green stuff. [color:green]on *:NOTICE:!rob *:?: {
if (($nick !ison #Battle) || ($2 !ison #Battle)) {
; $nick or $2 isn't on #battle, so do nothing
return
}
[/color] if (%rob [ $+ [ $nick ] ] == on) {
msg $nick You Have Already Robbed Someone!
return
}
if (%away [ $+ [ $nick ] ] == on) {
msg $nick You're away, no robbing when you're away!
return
}
if (%away [ $+ [ $2 ] ] == on) {
msg $nick $2 is away, you cannot rob someone who is away!
return
}
[color:red] if (%money [ $+ [ $2 ] ] < 1000) {
msg $nick $2 hasn't got enough money.
return
}[/color]
if (%rob [ $+ [ $nick ] ] != on) && (%account [ $+ [ $2 ] ] == on) {
msg $chan $nick Attempts To Rob $2
[color:blue] ; 20 % chance of success robbing $2
if ($rand(0,99) < 20) {
var %tthier-money = $round($calc(%money [ $+ [ $2 ] ] / 2),0)
msg $chan $nick SuccessFully Robs $2
msg $chan $nick Has Robbed $2 by %tthier-money Money From $2
inc %money [ $+ [ $nick ] ] %tthier-money
dec %money [ $+ [ $2 ] ] %tthier-money
}
else {
; this is the other 80% chance of not successfully robbing $2
; make him lose 10-20 health with a 10% chance
if (($rand(0,99) < 10) && ($rand(10,20)) {
msg $nick $2 saw you and hit you with a trout, you lose $v1 health
set -u300 %rob [ $+ [ $nick ] ] on
dec %health [ $+ [ $nick ] ] $v1
; you should check if $nick has still got health left :)
}
; OR 5% chance of having to pay 500 money back (or all his money)
else if ($rand(0,99) < 5) {
if ((%money [ $+ [ $nick ] ] < 500) || (500)) { }
dec %money [ $+ [ $nick ] ] $v1
inc %money [ $+ [ $2 ] ] $v1
msg $nick $2 saw you and took $v1 money from you!
set -u300 %rob [ $+ [ $nick ] ] on
}
; OR 15% chance of being unable to rob for 1 hour
else if ($rand(0,99) < 15) {
msg $nick $2 saw you and keeps watching you for 1 hour
set -u3600 %rob [ $+ [ $nick ] ] on
}[/color]
msg $chan $nick Has Failed To Rob $2 !
}
}
}
|
|
|
|
Joined: Feb 2005
Posts: 27
Ameglian cow
|
OP
Ameglian cow
Joined: Feb 2005
Posts: 27 |
Thats working good but for some reason it lets you keep robbing . The limit is not working ?? But hey its awesome working good..
|
|
|
|
Joined: Feb 2005
Posts: 27
Ameglian cow
|
OP
Ameglian cow
Joined: Feb 2005
Posts: 27 |
Ok thx again .. the red part - works great The blue part - it seems that it that it only like's 1 esle in there , i dont now i have no clue ... but i i'n useing most of it .. and the green part dont like to work... thx very much i'll keep playing around with it ... thx again... this is what i have: on *:NOTICE:!rob *:?: { if (($nick !ison #Battle) || ($2 !ison #Battle)) { ; $nick or $2 isn't on #battle, so do nothing return } if (%rob [ $+ [ $nick ] ] == on) { msg $nick You Have Already Robbed Someone Within 5 mins! return } if (%away [ $+ [ $nick ] ] == on) { msg $nick You're away, no robbing when you're away! return } if (%away [ $+ [ $2 ] ] == on) { msg $nick $2 is away, you cannot rob someone who is away! return } if (%money [ $+ [ $2 ] ] < 1000) { msg $nick $2 hasn't got enough money. return } if (%rob [ $+ [ $nick ] ] != on) && ($2 ison #) && (%account [ $+ [ $2 ] ] == on) { msg $chan $nick Attempts To Rob $2 if ($rand(0,99) < 20) { var %tthier-money = $round($calc(%money [ $+ [ $2 ] ] / 2),0) msg $chan $nick SuccessFully Robs $2 msg $chan $nick Has Robbed $2 by %tthier-money Money From $2 inc %money [ $+ [ $nick ] ] %tthier-money dec %money [ $+ [ $2 ] ] %tthier-money } else msg $chan $nick Has Failed To Rob $2 ! set -u300 %rob [ $+ [ $nick ] ] on } } ..wont work with the notice part ... when i put all that you made it works .. but can !rob all the time and some it just says - Attempts To Rob God and thats it it stops.. ..... Its kool you did great .. i'm trying to make it work .. thx again
|
|
|
|
Joined: Apr 2003
Posts: 701
Hoopy frood
|
Hoopy frood
Joined: Apr 2003
Posts: 701 |
Delete the red part, # has no meaning in a private notice, there is no channel. You could replace # with #Battle, but it's already tested on earlier. if (%rob [ $+ [ $nick ] ] != on) && ($2 ison #) && (%account [ $+ [ $2 ] ] == on) { I'm not sure what you mean about multiple else's, so here's an answer to what I think you mean. An //if can have only one else part, that is correct BUT in the else part you can have another //if and another else, so If (test1) echo test1 else if (test2) echo test2 else if (test3) echo test3 else echo no test succeeded can be written (and is parsed by mIRC as) if (test1) echo test1
else {
if (test2) echo test2
else {
if (test3) echo test2
else {
echo no test succeeded
}
}
}
} The first notation is ofcourse best, since the indentation doesn't keep growing...
|
|
|
|
|