ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/MSVC/Flatline_BSL.c
Revision: 587
Committed: Mon Feb 7 05:34:47 2011 UTC (14 years, 8 months ago) by gumby
Content type: text/x-csrc
File size: 9051 byte(s)
Log Message:

File Contents

# Content
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"
9 #include "Mariusnet_Public.h"
10 bool server_started = 0;
11 bool client_connected = 0;
12 int sock = 0;
13 sockaddr_in address;
14 char player_name[32] = "Striker";
15 char player_country[256] = {0};
16 int update_rate = 5;
17 #include "Oni.h"
18 #include "Daodan_Cheater.h"
19 uint16_t ONICALL start_server(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
20 {
21 CreateThread(NULL, 0, StartServer, NULL, 0, 0);
22 server_started = 1;
23 return 0;
24 }
25
26 uint16_t ONICALL control_update_rate(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
27 {
28 update_rate = args[0].value_int32;
29 server_started = 1;
30 return 0;
31 }
32
33 uint16_t ONICALL change_name(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
34 {
35
36 //should also return your name...
37 sprintf(player_name, "%.31s", args[0].value_str32);
38 if(client_connected) {
39 flatline_packet packet;
40 packet.id = CHANGE_NAME;
41 memcpy(packet.data, args[0].value_str32, 256);
42 NetUDPSocket_Send(client_sock, (sockaddr*)&address, (char*)&packet, 257);
43 }
44 if(server_started)
45 {
46 FLsUpdateName( 0, args[0].value_str32 );
47 }
48 return 0;
49 }
50
51 uint16_t ONICALL send_message(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
52 {
53
54 flatline_packet message;
55 message.id = MESSAGE;
56
57 if(server_started) {
58 int message_size = sprintf(message.data, "%s: %s", player_name, args[0].value_str32);
59 COrMessage_Print(message.data, "chat", 0);
60 UDPServer_SendToAll(&message, message_size + 1 + FLATLINE_HEADER );
61 }
62 else if(client_connected) {
63 sprintf(message.data, "%s", args[0].value_str32);
64 NetUDPSocket_Send(client_sock, (sockaddr*)&address, (char*)&message, 257);
65 }
66 else {
67 DDrConsole_PrintF("You aren't connected to a server!");
68 }
69 return 0;
70 }
71
72
73 uint16_t ONICALL connect_to_server(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
74 {
75 //TODO: Move this into the client initialization. Doing it like this is silly.
76 if( NetPlatform_Initalize()) {
77 static flatline_packet packet;
78 memset(&client_address, 0, sizeof(sockaddr_in));
79 sock = NetUDPSocket_Create(27777, &client_address);
80 address.sin_family = AF_INET; address.sin_port = htons(27777); address.sin_addr.S_un.S_addr = inet_addr(args[0].value_str32 );
81 //address.sin_family = AF_INET; address.sin_port = htons(27777); address.sin_addr.S_un.S_addr = inet_addr("192.168.0.1");
82
83 packet.id = CONNECT_SEND;
84 memcpy(((connect_send*)(packet.data))->country , player_country, 2);
85 memcpy(((connect_send*)(packet.data))->name, player_name, 256);
86 DDrConsole_PrintF("%s", ((connect_send*)(packet.data))->name);
87 CreateThread(NULL, 0, StartClient, &packet, 0, 0);
88
89 }
90
91 return 0;
92 }
93 uint16_t ONICALL status(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
94 {
95 int j;
96 if(server_started) {
97 for(j = 0; j < max_connections; j++) {
98
99 if (PlayerList[j] != 0) {
100 DDrConsole_PrintF("Client %i: %s from %s",
101 j,
102 PlayerList[j]->name,
103 inet_ntoa(*( (struct in_addr*)(int*)&(PlayerList[j]->ip ) )));
104 }
105 }
106 }
107 else if(client_connected) {
108 DDrConsole_PrintF("Connected to %s, port %i, socket %i", inet_ntoa(address.sin_addr), ntohs(address.sin_port), sock);
109 for(j = 0; j < max_connections; j++) {
110
111 if (PlayerList[j] != 0) {
112 DDrConsole_PrintF("Client %i: %s %x",
113 j,
114 PlayerList[j]->name,
115 PlayerList[j]->Chr
116 );
117 }
118 }
119 }
120 else{}
121 return 0;
122 }
123
124 uint16_t ONICALL addfake(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
125 {
126 player_info * info;
127 info = FLrServer_AddPlayer( 0, "shinny", 0 , 1);
128 return 0;
129 }
130
131 uint16_t ONICALL kick(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
132 {
133 if(server_started && PlayerList[args[0].value_int32])
134 {
135 ONrCharacter_SetHitPoints(PlayerList[args[0].value_int32]->Chr, 0);
136 FLrPlayerDisconnect(args[0].value_int32);
137 FLsPublic_Event(EV_DISCONNECT, &args[0].value_int32);
138 }
139 return 0;
140 }
141
142 uint16_t ONICALL ping(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
143 {
144 if(server_started)
145 {
146 FLsPingAll();
147 }
148 return 0;
149 }
150
151 CharacterObject* spawnObject = 0;
152 char BINACHARCallback(CharacterObject* inObj, char* userdata)
153 {
154 if(strcmp(userdata, inObj->OSD.Name))
155 {
156 return 1;
157 }
158 spawnObject = inObj;
159 return 0;
160 }
161 uint16_t ONICALL FLrSpawnHack(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
162 {
163 flatline_packet new_char = {0};
164 int i;
165 if(client_connected) return 0;
166 AI2iScript_Spawn(callinfo, numargs, args, dontuse1, dontuse2, ret);
167 if(!server_started) return 0;
168 for(i = 0; i < 64; i++)
169 {
170 if(!strcmp(ONgGameState->CharacterStorage[i].Name, args[0].value_str32))
171 {
172 //DDrConsole_PrintF("%s spawned, slot %i", args[0].value_str32, i);
173 int playerlist_slot = FLr_FindEmptyListSlot();
174 int player_slot = i;
175 new_char.new_player.Playernumber = playerlist_slot;
176 new_char.id = NEW_PLAYER;
177 OBJrObjectType_EnumerateObjects('CHAR',BINACHARCallback, (int)args[0].value_str32);
178 // while(!spawnObject);
179 if(spawnObject)
180 {
181 memcpy(&new_char.new_player.Character, spawnObject, sizeof(CharacterObject) );
182 }
183 else return 1;
184 //new_char.new_player.Character;
185 PlayerList[playerlist_slot] = Players+player_slot;
186 PlayerList[playerlist_slot]->spawnnumber = player_slot;
187 PlayerList[playerlist_slot]->Chr = &((Character *)(((GameState * )(ONgGameState))->CharacterStorage))[player_slot];
188 sprintf_s(PlayerList[playerlist_slot]->name, 32, "%s", PlayerList[playerlist_slot]->Chr->Name);
189 // PlayerList[playerlist_slot]->Chr->Flags = chr_dontaim | chr_unkillable; //&= 0xFFBFFFFF; //WTF
190 // if(!is_bot) PlayerList[playerlist_slot]->Chr->Flags &= 0xFFBFFFFF; //WTF
191 // sprintf(PlayerList[playerlist_slot]->Chr->Name, "%.31s", name);
192 UDPServer_SendToAll( (char*)&new_char, sizeof(new_player) + FLATLINE_HEADER );
193 PlayerList[playerlist_slot]->flags = PF_SCRIPTEDAI;
194 PlayerList[playerlist_slot]->list_slot = playerlist_slot;
195 return 0;
196 }
197 }
198
199 return 0;
200 }
201
202 uint16_t ONICALL list_players(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
203 {
204 int i;
205 for(i = 0; i++; i < MAX_PLAYERS)
206 {
207 if(PlayerList[i])
208 {
209 DDrConsole_PrintF("%i %i | %s", i, PlayerList[i]->spawnnumber, PlayerList[i]->name);
210 }
211 }
212 return 0;
213 }
214 uint16_t ONICALL con(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
215 {
216 OBJrConsole_OnActivate( OBJrConsole_GetByID(args[0].value_int32), PlayerList[0]->Chr );
217 return 0;
218 }
219
220 uint16_t tele(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
221 {
222 ActiveCharacter *AC = ONrGetActiveCharacter(ONgGameState->PlayerCharacter);
223 // AC->PhyContext->Position = AC->AimTarget;
224 AC->PhyContext->Position.X += AC->AimVector.X;
225 AC->PhyContext->Position.Y += AC->AimVector.Y;
226 AC->PhyContext->Position.Z += AC->AimVector.Z;
227 return 0;
228 }
229
230 uint16_t ONICALL mnet_login(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
231 {
232 MSNet_Login(args[0].value_str32, args[1].value_str32);
233 return 0;
234 }
235
236 void SLrFlatline_Initialize()
237 {
238
239 DDrPatch_MakeCall(0x004FA88B, FLrInput_Update_Keys);
240 FLrInput_Update_Keys();
241 SLrGlobalVariable_Register_Int32("skip", "skips", &(((GameState*)ONgGameState)->field_40) );
242 SLrScript_Command_Register_Void("tele","teleports", "", tele);
243 SLrScript_Command_Register_ReturnType("connect","Connects to a server", "ip:string", sl_void, connect_to_server);
244 SLrScript_Command_Register_Void("host","Starts a server", "", start_server);
245 SLrScript_Command_Register_Void("msg","Sends a message", "", send_message);
246 SLrScript_Command_Register_ReturnType("name","changes your name", "name:string", sl_void, change_name);
247 SLrScript_Command_Register_Void("status","shows the connection status", "", status);
248 SLrGlobalVariable_Register_String("country", "Your Multiplayer country", player_name);
249 SLrScript_Command_Register_ReturnType("addbot","adds a fake client", "", sl_void, addfake);
250 SLrScript_Command_Register_Void("kick", "Kicks a client from the server", "clientnum:int", kick);
251 SLrScript_Command_Register_Void("con", "Activates a console", "con:int", con);
252 SLrScript_Command_Register_Void("ping", "pong!", "", ping);
253
254 SLrScript_Command_Register_Void("login", "logs into mariusnet", "username:string password:string", mnet_login);
255 }