source: Daodan/MSVC/Flatline_BSL.c @ 579

Last change on this file since 579 was 579, checked in by gumby, 12 years ago

Finally back up to pre data loss standards

File size: 7.6 KB
Line 
1#include <winsock2.h>
2#include "BFW_ScriptLang.h"
3
4#include "Daodan_Patch.h"
5#include "Daodan_BSL.h"
6#include "Flatline_BSL.h"
7#include "Flatline.h"
8#include "Flatline_Server.h"
9bool server_started = 0;
10bool client_connected = 0;
11int sock = 0;
12sockaddr_in address;
13char player_name[32] = "Striker";
14char player_country[256] = {0};
15int update_rate = 5;
16#include "Oni.h"
17#include "Daodan_Cheater.h"
18uint16_t ONICALL start_server(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
19{
20        CreateThread(NULL, 0, StartServer, NULL, 0, 0);
21        server_started = 1;
22        return 0;
23}
24
25uint16_t ONICALL control_update_rate(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
26{
27        update_rate = args[0].value_int32;
28        server_started = 1;
29        return 0;
30}
31
32uint16_t ONICALL change_name(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
33{
34       
35        //should also return your name...
36        sprintf(player_name, "%.31s", args[0].value_str32);
37        if(client_connected) {
38                flatline_packet packet; 
39                packet.id = CHANGE_NAME;
40                memcpy(packet.data, args[0].value_str32, 256);
41                NetUDPSocket_Send(client_sock, (sockaddr*)&address, (char*)&packet, 257);
42        }
43        if(server_started)
44        {
45                sprintf_s(PlayerList[0]->Chr->Name,32, args[0].value_str32);
46        }
47        return 0;
48}
49
50uint16_t ONICALL send_message(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
51{
52
53        flatline_packet message;
54        message.id = MESSAGE;
55
56        if(server_started) {
57                int message_size = sprintf(message.data, "%s: %s", player_name, args[0].value_str32);
58                COrMessage_Print(message.data, "chat", 0);
59                UDPServer_SendToAll(&message, message_size + 1 + FLATLINE_HEADER );
60        }
61        else if(client_connected) {
62                sprintf(message.data, "%s", args[0].value_str32);
63                NetUDPSocket_Send(client_sock, (sockaddr*)&address, (char*)&message, 257);
64        }
65        else {
66                DDrConsole_PrintF("You aren't connected to a server!");
67        }
68        return 0;
69}
70
71
72uint16_t ONICALL connect_to_server(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
73{
74        if(     NetPlatform_Initalize()) {
75        static flatline_packet packet;
76        sock = NetUDPSocket_Create(27777);
77        address.sin_family = AF_INET; address.sin_port = htons(27777); address.sin_addr.S_un.S_addr = inet_addr(args[0].value_str32 ); 
78        //address.sin_family = AF_INET; address.sin_port = htons(27777); address.sin_addr.S_un.S_addr = inet_addr("192.168.0.1");       
79
80        packet.id = CONNECT_SEND;
81        memcpy(((connect_send*)(packet.data))->country ,  player_country, 2);
82        memcpy(((connect_send*)(packet.data))->name, player_name, 256);
83        DDrConsole_PrintF("%s", ((connect_send*)(packet.data))->name);
84        CreateThread(NULL, 0, StartClient, &packet, 0, 0);
85
86        }
87
88        return 0;
89}
90uint16_t ONICALL status(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
91{
92        int j;
93        if(server_started) {
94                for(j = 0; j < max_connections; j++) {
95
96                        if (PlayerList[j] != 0) {
97                                DDrConsole_PrintF("Client %i: %s from %s", 
98                                        j,
99                                        PlayerList[j]->name,
100                                        inet_ntoa(*( (struct in_addr*)(int*)&(PlayerList[j]->ip )   )));
101                        }
102                }
103        }
104        else if(client_connected) {
105                DDrConsole_PrintF("Connected to %s, port %i, socket %i", inet_ntoa(address.sin_addr), ntohs(address.sin_port), sock);
106                for(j = 0; j < max_connections; j++) {
107
108                        if (PlayerList[j] != 0) {
109                                DDrConsole_PrintF("Client %i: %s %x", 
110                                        j,
111                                        PlayerList[j]->name,
112                                        PlayerList[j]->Chr
113                        );
114                        }
115                }
116        }
117        else{}
118        return 0;
119}
120
121uint16_t ONICALL addfake(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
122{
123        player_info * info;
124        info = FLrServer_AddPlayer( 0, "shinny", 0 , 1);
125        return 0;
126}
127
128uint16_t ONICALL kick(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
129{
130        FLrPlayerDisconnect(args[0].value_int32 - 1);
131        FLsPublic_Event(EV_DISCONNECT, &args[0].value_int32);
132        return 0;
133}
134
135CharacterObject* spawnObject = 0;
136char BINACHARCallback(CharacterObject* inObj, char* userdata)
137{
138        if(strcmp(userdata, inObj->OSD.Name))
139        {
140                return 1;
141        }
142        spawnObject = inObj;
143        return 0;
144}
145uint16_t ONICALL FLrSpawnHack(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
146{
147        flatline_packet new_char = {0};
148        int i;
149        if(client_connected) return 0;
150        AI2iScript_Spawn(callinfo, numargs, args, dontuse1, dontuse2, ret);
151        if(!server_started) return 0;
152        for(i = 0; i < 64; i++)
153        {
154                if(!strcmp(ONgGameState->CharacterStorage[i].Name, args[0].value_str32))
155                {
156                        //DDrConsole_PrintF("%s spawned, slot %i", args[0].value_str32, i);
157                        int             playerlist_slot = FLr_FindEmptyListSlot();
158                        int player_slot = i;
159                        new_char.new_player.Playernumber = playerlist_slot; 
160                        new_char.id = NEW_PLAYER;
161                        OBJrObjectType_EnumerateObjects('CHAR',BINACHARCallback, (int)args[0].value_str32);
162                //      while(!spawnObject);
163                        if(spawnObject)
164                        {
165                                memcpy(&new_char.new_player.Character, spawnObject, sizeof(CharacterObject) );
166                        }
167                        else return 1;
168                        //new_char.new_player.Character;
169                        PlayerList[playerlist_slot] = Players+player_slot;
170                        PlayerList[playerlist_slot]->spawnnumber = player_slot;
171                        PlayerList[playerlist_slot]->Chr = &((Character *)(((GameState * )(ONgGameState))->CharacterStorage))[player_slot];
172                        //                      PlayerList[playerlist_slot]->Chr->Flags = chr_dontaim | chr_unkillable; //&= 0xFFBFFFFF; //WTF
173                        //                      if(!is_bot) PlayerList[playerlist_slot]->Chr->Flags &= 0xFFBFFFFF; //WTF
174                        //                      sprintf(PlayerList[playerlist_slot]->Chr->Name, "%.31s", name);         
175                        UDPServer_SendToAll( (char*)&new_char, sizeof(new_player) + FLATLINE_HEADER );
176                        PlayerList[playerlist_slot]->flags = PF_SCRIPTEDAI;
177                        PlayerList[playerlist_slot]->list_slot = playerlist_slot;
178                        return 0;
179                }
180        }
181       
182                return 0;
183}
184
185uint16_t ONICALL list_players(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
186{
187        int i;
188        for(i = 0; i++; i < MAX_PLAYERS)
189        {
190                if(PlayerList[i])
191                {
192                        DDrConsole_PrintF("%i %i | %s", i, PlayerList[i]->spawnnumber, PlayerList[i]->name);
193                }
194        }
195return 0;
196}
197uint16_t ONICALL con(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
198{
199        OBJrConsole_OnActivate( OBJrConsole_GetByID(args[0].value_int32), PlayerList[0]->Chr );
200        return 0;
201}
202
203               
204void SLrFlatline_Initialize() {
205       
206        DDrPatch_MakeCall(0x004FA88B, FLrInput_Update_Keys);
207        FLrInput_Update_Keys();
208        SLrGlobalVariable_Register_Int32("skip", "skips", &(((GameState*)ONgGameState)->field_40) );
209        SLrScript_Command_Register_ReturnType("connect","Connects to a server", "ip:string", sl_void, connect_to_server);
210        SLrScript_Command_Register_Void("host","Starts a server", "", start_server);
211        SLrScript_Command_Register_Void("msg","Sends a message", "", send_message);
212        SLrScript_Command_Register_ReturnType("name","changes your name", "name:string", sl_void, change_name);
213        SLrScript_Command_Register_Void("status","shows the connection status", "", status);
214        SLrGlobalVariable_Register_String("country", "Your Multiplayer country", player_name);
215        SLrScript_Command_Register_ReturnType("addbot","adds a fake client", "", sl_void, addfake);
216        SLrScript_Command_Register_Void("kick", "Kicks a client from the server", "clientnum:int", kick);
217        SLrScript_Command_Register_Void("con", "Activates a console", "con:int", con);
218        //SLrScript_Command_Register_ReturnType("ai2_spawn","creates and starts an AI from a character object","ai_name:string [force_spawn:string{\"force\"} | ]", sl_void, spawnAI);
219}
Note: See TracBrowser for help on using the repository browser.