/* comroomenv.pkg */ defcom ChatACK = ChatACK S;; defcom NewUser = NewUser S I S;; defcom DelUser = DelUser S I S;; defcom Hear = Hear S;; defcom GetAudio= GetAudio S;; defcom Info = Info S S;; typeof thischn=Chn;; typeof thisenv=Env;; var servernick="";; var serverIP="";; var MyNick="";; var Nusers=0;; var IsAServer=1;; struct TPlayer = [ PlayerChannel : Chn, PlayerNick : S , PlayerID : I , PlayerIP : S ] Const_Player ;; typeof Players=[TPlayer r1];; typeof CurrentUser=TPlayer;; typeof tempuser=TPlayer;; fun AddPlayer(player)= { set Players=player::Players; };; fun PlayerNickcmp (player,nick)= if !(strcmp player.PlayerNick nick) then 1 else 0;; fun PlayerIPcmp (player,IP) = if !(strcmp player.PlayerIP IP) then 1 else 0;; fun PlayerIDcmp (player,ID) = if player.PlayerID==ID then 1 else 0;; fun PlayerChcmp (player,ch) = if player.PlayerChannel==ch then 1 else 0;; fun GetPlayerByNick (s) = searchlist Players @PlayerNickcmp s;; fun GetPlayerByChannel (s)= searchlist Players @PlayerChcmp s;; fun GetPlayerByID (s) = searchlist Players @PlayerIDcmp s;; fun GetPlayerByIP (s) = searchlist Players @PlayerIPcmp s;; fun DelPlayerByID(id) = set Players=deletelist Players GetPlayerByID id;; fun DelPlayerByIP(ip) = set Players=deletelist Players GetPlayerByIP ip;; fun DelPlayerByNick(n) = set Players=deletelist Players GetPlayerByNick n;; fun DelPlayerByChannel(ch)= set Players=deletelist Players GetPlayerByChannel ch;; fun UpdateCurrentUser ()= { 0 };; fun print(s)= { _status s; };; typeof temptext=S;; fun BroadHear (p,p2)= { if (p!=p2) then _on p.PlayerChannel Hear [temptext] else nil };; fun __Hear (s)= { set temptext=s; apply_on_list Players @BroadHear GetPlayerByChannel _channel; };; fun __Info (s1,s2)= { let GetPlayerByChannel _channel -> player in print strcat strcat strcat s1 player.PlayerNick s2 "\n"; };; fun BroadUser (p,p2)= { _on p.PlayerChannel NewUser [p2.PlayerNick p2.PlayerID p2.PlayerIP]; };; fun BroadDelUser (p,p2)= { _on p.PlayerChannel DelUser [p2.PlayerNick p2.PlayerID p2.PlayerIP]; };; fun BroadList (p,p2)= { _on p2.PlayerChannel NewUser [p.PlayerNick p.PlayerID p.PlayerIP]; };; typeof tempaudio =S;; fun BroadAudio (p,p2)= { if (p!=p2) then _on p.PlayerChannel GetAudio [tempaudio] else nil };; defcom AddLink = AddLink S S;; fun __NewUser (nick,ID,IP)= { print strloc loc "JOIN" nick::IP::(_channelIP _channel)::nil; set tempuser=Const_Player [_channel nick ID IP]; apply_on_list Players @BroadUser tempuser; apply_on_list Players @BroadList tempuser; AddPlayer tempuser; set Nusers=Nusers+1; };; fun GetUserInfos (obj,r)= { 0 };; defcom PhoneOK=PhoneOK;; defcom PhoneDENY=PhoneDENY;; var AskPhone=0;; typeof PhoneChn=Chn;; fun __GetPhone ()= { if (AskPhone==0) then { _on _channel PhoneOK []; set PhoneChn=_channel; set AskPhone=1 } else { _on _channel PhoneDENY []; 0 } };; fun __ReleasePhone ()= { if PhoneChn==_channel then { set AskPhone=0 } else 0 };; fun InitChat (nick,room)= { set servernick=nick; set serverIP=_channelIP _channel; set MyNick=_GETtext nickname; _status strcat strcat "On server: " nick ".\n"; set thischn=_channel; set thisenv=_envchannel _channel; _status "Module OK\n"; _on _channel ChatACK [MyNick]; 0 };; fun __ChatACK (nick)= { 0 };; fun _connected ()= { _fooS "comroomenv connected"; _status "Connected.\n" };; fun _closed ()= { _fooS "SERVER PART CLOSE"; let GetPlayerByChannel _channel->p in { _status strcat strcat strcat strcat "Disconnected from " p.PlayerNick " (" p.PlayerIP ").\n"; set Nusers=Nusers-1; DelPlayerByChannel _channel; apply_on_list Players @BroadDelUser p; } };; fun __GetAudio (audio)= { set tempaudio=audio; apply_on_list Players @BroadAudio GetPlayerByChannel _channel; };; fun __ChatStart (nick)= { InitChat nick ChatRoom; };;