Re: CMUD
: 10 lis 2011 18:33
Jakoś nie dostrzegam w czym regexp jest lepszy od pattern matchingu CMUDa.
Oficjalne forum Arkadii, polskiego MUD-a, tekstowej gry fabularnej.
https://arkadia.rpg.pl/forum/
Room script powinien być w lokacji, w której jest to wyjście, nie w docelowej.Fruef pisze:Na nie których lokacjach są nietypowe opisy, jak np.
"Wraz z Xxx podazasz za Yyy przez kladke." - taki sam opjs jest w obie strony.
Kod: Zaznacz cały
#VAR nonstd_exit_desc "" "" {Wyjscia}
#VAR nonstd_exit_cmd "" "" {Wyjscia}
#ALIAS nonstd_exit {nonstd_exit_desc = %1; nonstd_exit_cmd = %2; #SH Wyjscie '%1' prowadzi na '%2'}
#TRIGGER podazasz_za {^(?:> |)(?:Wraz z.*|)[Pp]odazasz za (?:@lider\a+|kims|@lider) (.*)\.}
{
$dir = %1;
#IF ( $dir = @nonstd_exit_desc)
{
$dir = @nonstd_exit_cmd;
}
$dir = %replace( $dir, "na ", "");
$dir = %replace( $dir, "gore", "gora");
} {Druzyna} regex
Kod: Zaznacz cały
#TRIGGER podazasz_za {^(?:> |)(?:Wraz z.*|)[Pp]odazasz za (?:@lider\a+|kims|@lider) (.*)\.} {$dir = %1;#IF ( $dir = @nonstd_exit_desc) {$dir = @nonstd_exit_cmd} $dir = %replace( $dir, "na ", ""); $dir = %replace( $dir, "gore", "gora"); } {Druzyna} regex
Kod: Zaznacz cały
nonstd_exit "przez kladke" "polnoc"
Kod: Zaznacz cały
nonstd_exit "przez kladke" "n"
Kod: Zaznacz cały
nonstd_exit "na dno rozpadliny" "d"
Kod: Zaznacz cały
#CLASS Exits
#VAR map_db "D:\Soft\Cmud333\Arkadia\Mapa.mdb"
#VAR nonstd_exits "" {}
#TEMPVAR sql_map_check_table "SELECT name FROM sqlite_master WHERE type='table' AND name='NonStdTbl'"
#TEMPVAR sql_map_create_table "CREATE TABLE NonStdTbl ([ExitId] INTEGER PRIMARY KEY AUTOINCREMENT,[RoomId] INTEGER,[DirDesc] VARCHAR(40),[DirCmd] VARCHAR(10))"
#FUNCTION sql_map_query($query)
{ #SQLDB @map_db; #RETURN %sql( @map_db, $query) }
#ALIAS create_tables {
#IF (@sql_map_query(@sql_map_check_table).RecordCount = 0) {
#CALL @sql_map_query(@sql_map_create_table) } }
#FUNCTION sql_mapq( $cond) {
#RETURN @sql_map_query( %format( "SELECT * FROM NonStdTbl WHERE (%s)", $cond))}
#FUNCTION sql_map_select( $room, $cmd) {
$cond = %format( "RoomId=%d",$room)
#IF ($cmd) {
$cond = %format( "%s AND DirDesc='%s'", $cond, $cmd)
}
#RETURN @sql_mapq($cond)}
#FUNCTION sql_map_exists( $room, $cmd) {
#RETURN @sql_map_select( $room, $cmd).RecordCount}
#FUNCTION sql_map_insert($room, $desc, $dir) {
$query = "";
#IF (@sql_map_exists( $room, $desc))
{
$query = %format( "UPDATE NonStdTbl SET DirCmd='%s' WHERE (RoomId=%d AND DirDesc='%s')", $dir, $room, $desc)
} {
$query = %format( "INSERT INTO NonStdTbl (RoomId,DirDesc,DirCmd) VALUES (%d,'%s','%s')",$room,$desc,$dir)
}
#RETURN @sql_map_query( $query) }
#ALIAS nonstd_exit_local {
$r = %1
$desc = %2
$cmd = %3
$roomnstd = %db( @nonstd_exits, $r)
$roomnstd = %addkey( $roomnstd, $desc, $cmd)
#ADDKEY nonstd_exits $r $roomnstd
#IF (!%4) {#SH Dodaje wyjscie do lokacji nr $r. Idac '$desc' pojdziesz na '$cmd'} }
#ALIAS nonstd_exit {
$r = %1
$dir = %2
$move = %3
#IF (!$r) {$r = %roomnum}
#SH Num=$r, Dir=$dir, Move=$move
#CALL @sql_map_insert( $r, $dir, $move)
nonstd_exit_local {$r} {$dir} {$move} {%4}}
#ALIAS populate_nonstd_exits {
nonstd_exits = ""
$res = @sql_mapq( "RoomId > 0")
#WHILE ( !$res.Eof) {
$tmp = %json($res.Item)
$r = $tmp.RoomId
$desc = $tmp.DirDesc
$cmd = $tmp.DirCmd
nonstd_exit_local {$r} {$desc} {$cmd} %1
#CALL $res.Next
} }
#VAR exits_long_to_short "dol=d|wschod=e|poludniowy-wschod=se|zachod=w|poludniowy-zachod=sw|polnocny-wschod=ne|poludnie=s|polnoc=n|polnocny-zachod=nw|gore=u|gora=u" {} {Exits}
#TRIGGER podazasz_za_liderem {^(?:> |)(?:Wraz z.*|)[Pp]odazasz za (?:@lider\a+|kims|@lider) (.*)\.} {
$nonstd = @nonstd_exits.%roomnum
$cmd = %db( $nonstd, %1)
#IF ($cmd) {#MOVE $cmd} {
$tmp = %replace( %1, "na ", "")
#IF ($tmp = "gore") {$tmp = "gora"}
$tmp = @exits_long_to_short.$tmp
#IF (!$tmp) {$tmp = %1}
#move $tmp } } {Exits} regex
#CLASS 0
Kod: Zaznacz cały
nonstd_exit %roomnum "na dno rozpadliny" "d"
nonstd_exit %roomnum "przez kladke" "n"
Kod: Zaznacz cały
populate_nonstd_exits
Kod: Zaznacz cały
<trigger priority="2001" id="1224">
<pattern>(%w) (%w) {@rasy}{%p|%s}</pattern>
<value>#cw peru,black</value>
</trigger>
<var name="rasy" Autotype="A" id="1223">kobieta|polelfem|polelf|elfka|halflingiem|halfling|krasnoludem|krasnolud|niziolka|mutantka|halflinka|gnomem|gnom|krasnoludka|elfem|elfa|elf|gnomke|gnomka|niziolkiem|niziolek|mezczyzne|mezczyzna|polelfka|mutantem|mutanta|mutant|mutantke|mutantka|ogrem|ogra|ogr|ogrzyca</var>
Kod: Zaznacz cały
(*) zrecznie zaslania (*) przed ciosami (*).$
#SUB {--->> > %1 < - !!ZASLANIA!! - >> %2 << PRZED >> %3 <<}