Author Topic: Adding Command Levels (keeping level ordering - GUS/FBS/WSV/SANSAN/PSY)  (Read 3067 times)

0 Members and 1 Guest are viewing this topic.

Offline ricardo

  • Street Thug
  • *
  • Posts: 14
    • View Profile
As you know, using mIRC's !writini command will add the item and its value to the end of the section, causing the values to be unordered.

By using the filter command, we can retain the numerical sequence of the "level" (value) every time a "command" (item) is added, replaced or removed.


Code: [Select]
/*
** NOTE:
**
** The following alias adds, replaces or removes
** a command and its admin level in cmd.ini,
** keeping the levels in numerical sequence.

** Syntax:
** SetCommandLevel <NewCmd> <NewCmdLvl>

** Examples:
** SetCommandLevel !givecash 5 ; Add or Replace
** SetCommandLevel !givecash DEL  ; Delete
*/

alias SetCommandLevel {

  var %NewCmd = $1, %NewCmdLvl = $2

  var %file = cmd.ini, %section = COMMANDS

  ; Create Hidden Window
  window -h @cmds

  var %a = 1, %b = 2, %c = 1, %t

  ; Total Commands
  %t = $ini(%file,%section,0)

  ; Hold %file in buffer
  while (%a <= %t) { echo @cmds $ini(%file,%section,%a) $readini(%file,%section,$ini(%file,%section,%a)) | inc %a }

  ; Insert, Replace or remove
  ; New-Command to buffer
  if ($2 isnum) {
    $iif( $fline(@cmds,$+(*,%NewCmd,*),1), !rline @cmds $fline(@cmds,$+(*,%NewCmd,*),1) %NewCmd %NewCmdLvl, !aline @cmds %NewCmd %NewCmdLvl )
  }
  elseif ($2 == DEL) { dline @cmds $fline(@cmds,$+(*,%NewCmd,*),1) }

  ; Remove original section/values
  !remini %file %section

  ; Readd Section
  !write -il1 %file $+([,%section,])

  ; Sort by level
  filter -wwcut 2 32 @cmds @cmds

  ; Loop through buffer and write back contents
  while $line(@cmds,%c) { var %cmd = $gettok($v1,1,32), %lvl = $gettok($v1,2,32) | !write -il $+ %b %file $+(%cmd,=,%lvl) | !inc %b | !inc %c }

  ; Close window
  window -c @cmds
}


By having knowledge of string manipulation, we can also pass multiple values to our custom procedure.

Code: [Select]
alias SetMultipleCmds {
  ; Commands to add (separated by space)
  var %a, %strCmds = !buycar=1 !sellcar=1 !mycars=1

  ; Loop through strCmds and pass to "SetCommandLevel"
  while (%a <= $numtok(%strCmds,32)) { SetCommandLevel $replace($gettok(%strCmds,%a,32),$chr(61),$chr(32)) | inc %a }

  ; Remove multipe commands from cmd.ini
  ; while (%a <= $numtok(%strCmds,32)) { SetCommandLevel $replace($gettok(%strCmds,%a,32),$mid($gettok(%strCmds,%a,32),$pos($gettok(%strCmds,%a,32),=), $len($gettok(%strCmds,%a,32))), $chr(32) DEL) | inc %a }
}


Offline thijn

  • LU testers
  • VC:MP Veteran
  • *
  • Posts: 667
  • Im proud to be pro.
    • View Profile
    • Vice Underdogs
Re: Adding Command Levels (keeping level ordering - GUS/FBS/WSV/SANSAN/PSY)
« Reply #1 on: January 17, 2010, 12:09:26 pm »
I don't see why this is needed...

Offline Skirmant

  • Made Man
  • ***
  • Posts: 134
    • View Profile
Re: Adding Command Levels (keeping level ordering - GUS/FBS/WSV/SANSAN/PSY)
« Reply #2 on: January 18, 2010, 07:06:32 pm »
Nice work I guess..