Shadow969 converted this script and because it was once shared by Michael Swharz I thought it would be fair to contribute it instead of keeping it for myself. There are much things that could be added, but it's a nice start
UsageTried to Test Run the script, but somehow that didn't worked. The script must be compiled to executable and run with the commands below. Hit enter to type message.
Observer: -sv -cl -pl Observer
Client: -cl -pl YourName
Server: -sv
Client: -cl -pl YourName
Code:
// Original script by Michael Schwarz - www.xware-cg.com
// Converted to Lite-C by Shadow969
// Freeware
#include <acknex.h>
#include <default.c>
FONT* blub ="arial#12";
STRING* MyAppTitle = "Lite-C Chat";
STRING* received_str="#100";
STRING* sent_str="#100";
STRING* input_str="#100";
STRING* chat_line1="#100";
STRING* chat_line2="#100";
STRING* chat_line3="#100";
STRING* chat_line4="#100";
STRING* chat_line5="#100";
TEXT* chat_fenster = // Das ist das "chatfenster"
{
strings=5;
string=chat_line1,chat_line2,chat_line3,chat_line4,chat_line5;
pos_x=10;
pos_y=100;
font=blub;
}
TEXT* chat_input = // Das textobjekt damit wir text eingeben konnen
{
string=input_str;
pos_x=10;
pos_y=250;
font=blub;
}
void NachrichtAnServerSenden() // Da man als client strings NUR an den server schicken kann mussen wir erst an den server schicken
{
// String Vorbereiten
str_cpy(sent_str, player_name); // Zuerst hangen wir den playernamen an den zu sendenen string dran
str_cat(sent_str, ": "); // und ein :
str_cat(sent_str, input_str); // und schlussendlich die eigentliche nachricht
// Senden
send_string_to(NULL, sent_str); // Nun senden wir den String mit unserer Mitteilung an den server
wait(1); // Kurz warten
// Leeren
str_cpy(sent_str,"#100"); // Und machen den Sende string sicherheitshalber leer
str_cpy(input_str,"#100"); // genauso den input string, aber das wegen dem komfort
}
void TextEingeben()
{
if(inkey_active)
{
return;
}
str_cpy(input_str,"#100");
inkey(input_str);
if(result==13)
{
if(str_cmpi(input_str," "))
{
return;
}
NachrichtAnServerSenden();
}
}
void NachrichtEmpfangen() // die function wenn daten vom server an den client reinkommen
{
wait(1); // warten damit die nachricht empfangen werden kann sonst ist received_str = LEER
#ifndef server // damit der server die nachricht nicht doppelt bekommt
if(str_len(received_str)>0) // wenn wir eine chat nachricht bekommen haben
{
// Chat Ordnen
str_cpy(chat_line1,chat_line2); // 2 > 1
str_cpy(chat_line2,chat_line3); // 3 > 2
str_cpy(chat_line3,chat_line4); // 4 > 3
str_cpy(chat_line4,chat_line5); // 5 > 4
str_cpy(chat_line5,received_str); // Neue nachricht > 5
wait(1); // Kurz warten
str_cpy(received_str,"#100"); // den string leeren, damit die nachricht nicht wiederholt wird
// wenn ein anderer string event auftritt
}
#endif // Nicht vergessen die ifndef/ifdef zu schliessen
#ifdef server
wait(1); // Da es sonst eine "empty" function ware, muss der client-server auch was zu tun bekommen
#endif
}
void NachrichtEmpfangen_Server() // Die gleiche function wie oben, nur fur den server, damit alle clients die nachricht bekommen
{
/*
if((event_type == EVENT_JOIN) || (event_type == EVENT_LEAVE))
{return;}
*/
wait(1); // warten damit die nachricht empfangen werden kann sonst ist sent_str = LEER
if(str_len(sent_str)>0) // wenn wir eine chat nachricht bekommen haben -> da der client mit sent_str schickt, benutzen wir das als server
{
// Kopieren:
str_cpy(received_str,sent_str);
// Erstmal selber die nachricht einordnen:
// Chat Ordnen
str_cpy(chat_line1,chat_line2); // 2 > 1
str_cpy(chat_line2,chat_line3); // 3 > 2
str_cpy(chat_line3,chat_line4); // 4 > 3
str_cpy(chat_line4,chat_line5); // 5 > 4
str_cpy(chat_line5,received_str); // Neue nachricht > 5
// Diesmal loschen wir NOCH NICHT
// An Clients senden
send_string_to(NULL,received_str); // Da dieser befehl als server ausgefuhrt wird, wird der string an ALLE clients gesendet
wait(1); // Kurz warten
str_cpy(received_str,"#100"); // JETZT loschen wir die strings
str_cpy(sent_str,"#100");
}
}
void chat_initialisieren() // diese function in eurer MAIN function aufrufen!
{
set(chat_fenster,VISIBLE);
set(chat_input,VISIBLE);
on_enter = TextEingeben; // Wir legen die chat funktion auf die enter-taste
on_client = NachrichtEmpfangen; // wenn daten vom server zum client reinkommen > checken ob es chat ist
on_server = NachrichtEmpfangen_Server; // wenn daten von clients zum server kommen > checken ob chat ist
}
void main()
{
fps_max = 60;
video_mode = 7;
video_window(vector(375,350,0),NULL,112,MyAppTitle);
screen_color.blue = 125;
wait(2);
chat_initialisieren();
}