Vice City Multiplayer

VC:MP => mIRC/pawn Scripting => Topic started by: ricardo on January 17, 2010, 01:36:37 AM

Title: Adding Command Levels (keeping level ordering - GUS/FBS/WSV/SANSAN/PSY)
Post by: ricardo on January 17, 2010, 01:36:37 AM
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.



/*
** 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.


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 }
}

Title: Re: Adding Command Levels (keeping level ordering - GUS/FBS/WSV/SANSAN/PSY)
Post by: thijn on January 17, 2010, 10:09:26 AM
I don't see why this is needed...
Title: Re: Adding Command Levels (keeping level ordering - GUS/FBS/WSV/SANSAN/PSY)
Post by: Skirmant on January 18, 2010, 05:06:32 PM
Nice work I guess..