@@ -3,129 +3,130 @@ use os;
33use polsys;
44use unicode;
55
6- CONST TYPE_DISPLAY_USERNAME := 0X03EB;
7- CONST TYPE_USERNAME_ACCEPTED := 0x03ED;
8- CONST TYPE_JOIN_CHANNEL := 0X03E8;
6+ const TYPE_DISPLAY_USERNAME := 0X03EB;
7+ const TYPE_USERNAME_ACCEPTED := 0x03ED;
8+ const TYPE_JOIN_CHANNEL := 0X03E8;
99
1010include ":chat:chatIO";
1111include ":chat:packets";
1212include ":chat:functions";
1313include ":chat:settings";
1414
15-
1615program doChat()
17- Print("INSTALLING: Chat PH...");
18-
19- return 1;
16+ Print( "INSTALLING: Chat PH..." );
17+
18+ return 1;
2019endprogram
2120
22- exported function handleChatMessage(character, byref packet)
23- if ( CH_CheckDebug() )
24- Print("handleChatMessage: "+ character.name+ " packet: "+ packet);
25- endif
26-
27- var type := packet.GetInt8(3);
28- Print("handleChatMessage type: "+ type);
21+ exported function handleChatMessage( character, byref packet )
22+ if ( CH_CheckDebug() )
23+ Print( "handleChatMessage: " + character.name + " packet: " + packet );
24+ endif
25+
26+ var type := packet.GetInt8( 3 );
27+ Print( "handleChatMessage type: " + type );
2928endfunction
3029
31- exported function handleChatText(character, byref packet)
32- if ( CH_CheckDebug() )
33- Print("handleChatText: "+ character.name+ " packet: "+ packet);
34- endif
30+ exported function handleChatText( character, byref packet )
31+ if ( CH_CheckDebug() )
32+ Print( "handleChatText: " + character.name + " packet: " + packet );
33+ endif
3534
36- var cmd := packet.GetInt8(3);
37- Print("handleChatText cmd: "+ cmd);
35+ var cmd := packet.GetInt8( 3 );
36+ Print( "handleChatText cmd: " + cmd );
3837endfunction
3938
40- exported function handleOpenChatWindow(character, byref packet)
41- var settings := CH_GetSettingsCfgElem("Settings");
42-
43- if ( CH_CheckDebug() )
44- Print("handleOpenChatWindow: "+character.name+" packet: "+packet);
45- endif
46-
47- var chat_name;
48- if ( settings.PermChatName )
49- chat_name := GetObjProperty(character, "ChatName");
50- Print("Perm chat name enabled, getting chat name: "+chat_name);
51- endif
52-
53- if ( !chat_name )
54- chat_name := CChrZ(packet.GetUnicodeString(2, 31));
55- endif
56-
57- if ( chat_name )
58- // Validate chat name
59- if ( chat_name == character.acctname )
60- SendSysMessage(character, "For security reasons, you can not use your account name for your chat name.");
61- return 0;
62- endif
63-
64- // Chat names are suposed to be permenant, but for now...
65- SetObjProperty(character, "ChatName", chat_name);
66-
67- // Display chat
68- SendChatMessagePacket(character, TYPE_USERNAME_ACCEPTED, chat_name);
69-
70- // Create Add Player packet and send to character
71- // TODO: maybe this should be it's own function
72- var packet := CreatePacket(0xB2, 13 + (Len(chat_name) * 2));
73- packet.SetInt16(1, 13 + (Len(chat_name) * 2)); // length
74- packet.SetInt16(3, 0x03EE); // add user
75- // 0x0030 = user, 0x0031 = moderator, 0x0032 = muted, 0x0034 = me, 0x0035 = system
76- packet.SetInt16(9, 0x0034); // user type
77- packet.SetUnicodeString(11, CAscZ(chat_name), 0); // unicode chat name
78- SendChatPacket(packet, character);
79-
80- // Modify packet and send it to everyone else
81- var user_type;
82- if ( character.cmdlevel )
83- user_type := 0x31;
84- else
85- user_type := 0x30;
86- endif
87- packet.SetInt16(9, user_type);
88-
89- CH_AddPlayerToChat(character.serial); // add user to datafiles
90- SendChatPacket(packet, "", character.serial);
91-
92- // Send character the conferences
93- SendConferences(character);
94- else
95- SendChatMessagePacket(character, TYPE_DISPLAY_USERNAME);
96- endif
39+ exported function handleOpenChatWindow( character, byref packet )
40+ var settings := CH_GetSettingsCfgElem( "Settings" );
41+
42+ if ( CH_CheckDebug() )
43+ Print( "handleOpenChatWindow: " + character.name + " packet: " + packet );
44+ endif
45+
46+ var chat_name;
47+ if ( settings.PermChatName )
48+ chat_name := GetObjProperty( character, "ChatName" );
49+ Print( "Perm chat name enabled, getting chat name: " + chat_name );
50+ endif
51+
52+ if ( !chat_name )
53+ chat_name := packet.GetUnicodeString( 2, 31 );
54+ endif
55+
56+ if ( chat_name )
57+ // Validate chat name
58+ if ( chat_name == character.acctname )
59+ SendSysMessage( character,
60+ "For security reasons, you can not use your account name for your chat name."
61+ );
62+ return 0;
63+ endif
64+
65+ // Chat names are suposed to be permenant, but for now...
66+ SetObjProperty( character, "ChatName", chat_name );
67+
68+ // Display chat
69+ SendChatMessagePacket( character, TYPE_USERNAME_ACCEPTED, chat_name );
70+
71+ // Create Add Player packet and send to character
72+ // TODO: maybe this should be it's own function
73+ var packet := CreatePacket( 0xB2, 13 + ( Len( chat_name ) * 2 ) );
74+ packet.SetInt16( 1, 13 + ( Len( chat_name ) * 2 ) ); // length
75+ packet.SetInt16( 3, 0x03EE ); // add user
76+ // 0x0030 = user, 0x0031 = moderator, 0x0032 = muted, 0x0034 = me, 0x0035 = system
77+ packet.SetInt16( 9, 0x0034 ); // user type
78+ packet.SetUnicodeString( 11, CAscZ( chat_name ), 0 ); // unicode chat name
79+ SendChatPacket( packet, character );
80+
81+ // Modify packet and send it to everyone else
82+ var user_type;
83+ if ( character.cmdlevel )
84+ user_type := 0x31;
85+ else
86+ user_type := 0x30;
87+ endif
88+ packet.SetInt16( 9, user_type );
89+
90+ CH_AddPlayerToChat( character.serial ); // add user to datafiles
91+ SendChatPacket( packet, "", character.serial );
92+
93+ // Send character the conferences
94+ SendConferences( character );
95+ else
96+ SendChatMessagePacket( character, TYPE_DISPLAY_USERNAME );
97+ endif
9798endfunction
9899
99- function SendChatMessagePacket(targ, type, param:="" )
100- var packet := CreatePacket(0xB2, MSGLEN_VARIABLE);
101- packet.SetInt16(3, type);
102-
103- case ( type )
104- TYPE_DISPLAY_USERNAME:
105- packet.SetInt32(5, 0); // unknown
106- packet.SetInt32(9, 0); // unknown
107- break;
108- TYPE_USERNAME_ACCEPTED:
109- packet.SetInt32(5, 0); // unknown
110- packet.SetUnicodeString(9, CAscZ(param), 1); // chat name
111- packet.SetInt32(packet.GetSize() - 1, 0); // unknown
112- break;
113- TYPE_JOIN_CHANNEL:
114- packet.SetInt32(5, 0); // unknown
115- packet.SetUnicodeString(9, CAscZ(param), 1);
116- packet.SetInt16(packet.GetSize() - 1, 0); // unknown
117- packet.SetInt16(packet.GetSize() - 1, 30); // unknown
118- packet.SetInt16(packet.GetSize() - 1, 0); // unknown
119- break;
120- endcase
121-
122- packet.SetInt16(1, packet.GetSize()); // packet length
123-
124- if ( CH_CheckDebug() )
125- Print("SendChatMessagePacket(): "+ type+ " "+ param);
126- Print("Send CM: "+ packet);
127- endif
128-
129- packet.SendPacket(targ);
100+ function SendChatMessagePacket( targ, type, param := "" )
101+ var packet := CreatePacket( 0xB2, MSGLEN_VARIABLE );
102+ packet.SetInt16( 3, type );
103+
104+ case ( type )
105+ TYPE_DISPLAY_USERNAME:
106+ packet.SetInt32( 5, 0 ); // unknown
107+ packet.SetInt32( 9, 0 ); // unknown
108+ break;
109+ TYPE_USERNAME_ACCEPTED:
110+ packet.SetInt32( 5, 0 ); // unknown
111+ packet.SetUnicodeString( 9, CAscZ( param ), 1 ); // chat name
112+ packet.SetInt32( packet.GetSize() - 1, 0 ); // unknown
113+ break;
114+ TYPE_JOIN_CHANNEL:
115+ packet.SetInt32( 5, 0 ); // unknown
116+ packet.SetUnicodeString( 9, CAscZ( param ), 1 );
117+ packet.SetInt16( packet.GetSize() - 1, 0 ); // unknown
118+ packet.SetInt16( packet.GetSize() - 1, 30 ); // unknown
119+ packet.SetInt16( packet.GetSize() - 1, 0 ); // unknown
120+ break;
121+ endcase
122+
123+ packet.SetInt16( 1, packet.GetSize() ); // packet length
124+
125+ if ( CH_CheckDebug() )
126+ Print( "SendChatMessagePacket(): " + type + " " + param );
127+ Print( "Send CM: " + packet );
128+ endif
129+
130+ packet.SendPacket( targ );
130131endfunction
131132
0 commit comments