发信人: fenking() 
整理人: nhyjq(2003-01-05 15:48:38), 站内信件
 | 
 
 
                  现在讲解制作mudlibSYS的制作原理: 
                  Service: who 
                  The originator will deliver the following packet over  the in-band network (to its router): 
 
                  ({ 
                  (string) "who-req", 
                  (int) 5, 
                  (string) originator_mudname, 
                  (string) originator_username, 
                  (string) target_mudname, 
                  (string) 0 
                  }) 
 
                  The router will route the packet to another router or  to the target mud. The target mud returns: 
 
                  ({ 
                  (string) "who-reply", 
                  (int) 5, 
                  (string) originator_mudname, 
                  (string) 0, 
                  (string) target_mudname, 
                  (string) target_username, 
                  (mixed *) who_data 
                  }) 
 
                  where who_data is an array containing an array of the  following format for each user on the mud: 
 
                  ({ 
                  (string) user_visname, 
                  (int) idle_time, 
                  (string) xtra_info 
                  }) 
 
                  Each user_visname should specify the user's visual na me. idle_time should be measured in seconds
                  and xtra_info should be a string. 
 
                  If the router fails to deliver the packet for some re ason, it will return an error packet. 
 
                  Service: finger 
                  Finger operates similarly to who but returns informat ion about a specific user rather than all
                  users logged into the mud. This service uses the in-b and network; the packet has the following
                  format: 
 
                  ({ 
                  (string) "finger-req", 
                  (int) 5, 
                  (string) originator_mudname, 
                  (string) originator_username, 
                  (string) target_mudname, 
                  (string) 0, 
                  (string) username 
                  }) 
 
                  Note: technically, we could use the target_username f ield to hold the name of the person to
                  finger, but we do not wish to imply that the packet i s destined for that user. The packet is only
                  querying information about the user. 
 
                  The target mud will return: 
 
                  ({ 
                  (string) "finger-reply", 
                  (int) 5, 
                  (string) originator_mudname, 
                  (string) 0, 
                  (string) target_mudname, 
                  (string) target_username, 
                  (string) visname, 
                  (string) title, 
                  (string) real_name, 
                  (string) e_mail, 
                  (string) loginout_time, 
                  (int) idle_time, 
                  (string) ip_name, 
                  (string) level, 
                  (string) extra // eg, a .plan file, or other info 
                  }) 
                  A mud may return 0 for any item if they wish to keep  the information private. In particular, it
                  is suggested that information about players (as oppos ed to wizards) be kept confidential. 
 
                  The returned visname should contain the user's visual  name. loginout_time specifies the (local)
                  time the user logged in (if they are currently on) or  the time the user logged out. The value
                  should be expressed as a string. It should be 0 to in dicate no information. The idle_time is
                  expressed as an integer number of seconds of idle tim e. If this value is -1, then the user is not
                  logged onto the mud at the moment. 
 
                  If extra is given, then it should be terminated with  a carriage return. 
 
                  Service: locate 
                  This service locates a particular user on the Intermu d system. The following packet is delivered
                  over the in-band network (to the mud's router), which  then delivers it to all muds
                  (target_mudname == 0): 
 
                  ({ 
                  (string) "locate-req", 
                  (int) 5, 
                  (string) originator_mudname, 
                  (string) originator_username, 
                  (string) 0, 
                  (string) 0, 
                  (string) username 
                  }) 
                  If the requested user is logged into the receiving mu d, then the following reply is returned: 
 
                  ({ 
                  (string) "locate-reply", 
                  (int) 5, 
                  (string) originator_mudname, 
                  (string) 0, 
                  (string) target_mudname, 
                  (string) target_username, 
                  (string) located_mudname, 
                  (string) located_visname, 
                  (int) idle_time, 
                  (string) status, 
                  }) 
                  located_visname should contain the correct visual nam e of the user. idle_time will have the idle
                  time (in seconds) of the located user. 
 
                  status specifies any special status of the user. This  will typically be zero to indicate that the
                  user has no special status. The values for this strin g are arbitrary, but certain statuses have
                  predefined values that can be used: 
 
                  "link-dead" 
                  "editing" 
                  "inactive" 
                  "invisible" 
                  "hidden" 
 
                  These predefined values are intended to cover those s tatuses that might modify a user's reception
                  of Intermud transmissions; they are not intended to b e all-inclusive (and the string is arbitrary
                  in any case). The predefined way to specify multiple  attributes is with a comma-space-separated
                  list such as: "editing, hidden". The located mud shou ld not attempt to apply special formatting
                  or other characters, instead leaving that to the rece iving mud. 
 
                  Other examples for the status string might be "afk fo r dinner" or "taking a test". 
 
                  Service: channel 
                  There are two types of channels in the Intermud syste m: selective admission and selective
                  banning. All channels are owned by a particular mud a nd are adminstrated by that mud only. The
                  owner of a channel may also choose to filter the chan nel, although this may subject that mud to
                  an increased load for processing the channel contents  and the channel will become unavailable
                  when the host mud is down. 
 
                  The routers maintain three channel lists - one list f or each type of channel (selective admission
                  vs banning) where the channel is unfiltered, and one  list for selective admission, filtered
                  channels. Selectively banned, filtered channels are n ot allowed. For each channel, the router
                  will store which type it is (what list it is on), the  owning mud of the channel, and a list of
                  muds that are admitted/banned. 
 
                  When a mud sends a startup-req-2 packet, it includes  its chanlist-id in the packet. The router
                  will potentially respond with a chanlist-reply messag e to update the mud's channel list. 
 
                  The router will respond to channel list changes with  the chanlist-reply packet. 
 
                  ({ 
                  (string) "chanlist-reply", 
                  (int) 5, 
                  (string) originator_mudname, // the router 
                  (string) 0, 
                  (string) target_mudname, 
                  (string) 0, 
                  (int) chanlist_id, 
                  (mapping) channel_list 
                  }) 
                  channel_list is mapping with channel names as keys, a nd an array of two elements as the values.
                  If the value is 0, then the channel has been deleted.  The array contains the host mud, and the
                  type of the channel: 
 
                  0 selectively banned 
                  1 selectively admitted 
                  2 filtered (selectively admitted) 
 
                  All channel messages are delivered to the router. It  will then pass the message to the
                  appropriate set of muds. If the channel is filtered,  then the packet will be delivered to the
                  host mud for filtering; it will then return to the ro uter network for distribution. It is assumed
                  that a channel packet for a filtered channel that com es from the channel host has been filtered. 
 
                  Channel messages come in three flavors: standard mess ages, emotes, and targetted emotes. These
                  use packets channel-m, channel-e, and channel-t, resp ectively. They are: 
 
                  ({ 
                  (string) "channel-m", 
                  (int) 5, 
                  (string) originator_mudname, 
                  (string) originator_username, 
                  (string) 0, 
                  (string) 0, 
                  (string) channel_name, 
                  (string) visname, 
                  (string) message 
                  }) 
 
                  ({ 
                  (string) "channel-e", 
                  (int) 5, 
                  (string) originator_mudname, 
                  (string) originator_username, 
                  (string) 0, 
                  (string) 0, 
                  (string) channel_name, 
                  (string) visname, 
                  (string) message 
                  }) 
 
                  ({ 
                  (string) "channel-t", 
                  (int) 5, 
                  (string) originator_mudname, 
                  (string) originator_username, 
                  (string) 0, 
                  (string) 0, 
                  (string) channel_name, 
                  (string) targetted_mudname, 
                  (string) targetted_username, 
                  (string) message_others, 
                  (string) message_target, 
                  (string) originator_visname, 
                  (string) target_visname 
                  }) 
                  When a mud receives a channel-m packet, it should del iver it locally to all listeners. The actual
                  message delivered to users should be a composition of  the originator_mudname, visname,
                  channel_name, and message. The message should not be  preformatted with this information before
                  delivery so that individual muds can define the displ ay semantics. A suggested format is: 
 
                  [gwiz] John@Doe Mud: help me! help me! I am a cluebie  newless! 
 
                  This was composed with: 
 
                  sprintf("[%s] %s@%s: %s", channel_name, visname, orig inator_mudname, message); 
 
                  channel-e packets are similar to channel-m packets, b ut the message has a token in it to
                  represent where the originator's name should be. This  token is $N. An example is "$N smiles." 
 
                  ### need more info here ### 
 
                  When a mud receives a channel-t packet, it should del iver the message locally to all listeners.
                  The actual message delivered should be a composition  of the channel_name and one of
                  message_others or message_target. The messages will i nclude $N and $O for the name of the
                  originator and the object/target of their emote. The  appropriate message is selected based on the
                  listener - if the listener matches the targetted mud/ user, then the message_target should be
                  used. A suggested format is: 
 
                  [gwiz] With a flying leap, John@Doe Mud falls into th e pit. 
                  [gwiz] Jane@BlandMud waves to Goober@PutzMud. 
                  [gwiz] Jane@BlandMud waves to you. 
 
                  These were composed with: 
 
                  sprintf("[%s] %s", channel_name, one_of_the_messages) ; 
 
                  ### need a bit more on channel-t ### 
 
                  All messages should not be terminated with a newline  - that will be applied on the receiving mud
                  if necessary. The target_username should be in lower- case if provided. 
 
                  A channel may be added with the following packet: 
 
                  ({ 
                  (string) "channel-add", 
                  (int) 5, 
                  (string) originator_mudname, 
                  (string) originator_username, 
                  (string) target_mudname, // the router 
                  (string) 0, 
                  (string) channel_name, 
                  (int) channel_type 
                  }) 
                  The for channel_type field accepts the same values th at the name server returns for channels.
                  Sending thi 
  -- ()()()()()()()()()()()()()()()()()(()()()()()()()()()()()()
     +                     我的最爱                     +
     +               欢迎来到游戏开发者天堂             +
     +           好的意见,好的方法,好的论题           +
     +                     在这里解决                   +
 ============================================================             
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.101.177.97]
  | 
 
 
 |