├── api
├── addGold.php
├── addMoney.php
├── ban.php
├── bg.php
├── bginv.php
├── inv.php
├── kek.php
├── money.php
├── saveBody.php
├── setAvatar.php
└── setLevel.php
├── daisy
├── Application.xml
├── bodyparts.asc
├── games.asc
├── items.asc
├── locations.asc
└── main.asc
├── dump.sql
├── front
├── .htaccess
├── ServerAction.php
├── cabinet.js
├── cabinet.php
├── cabinetHandler.php
├── crossdomain.xml
├── db_connection.php
├── game.css
├── game.php
├── index.php
├── logo.png
├── logout.php
├── ping.php
├── register.php
└── style.css
├── misc
├── minfs
│ ├── fs.php
│ └── readme.md
├── proxyfs
│ ├── fs.php
│ └── readme.md
└── readme.md
└── readme.md
/api/addGold.php:
--------------------------------------------------------------------------------
1 | prepare("UPDATE users SET GOLD = GOLD + :amount WHERE TICKET = :ticket");
4 | $query->bindParam('ticket', $_POST['ticket']);
5 | $query->bindParam('amount', $_POST['amount']);
6 | $query->execute();
7 | ?>
8 |
--------------------------------------------------------------------------------
/api/addMoney.php:
--------------------------------------------------------------------------------
1 | prepare("UPDATE users SET MONEY = MONEY + :amount WHERE TICKET = :ticket");
4 | $query->bindParam('amount', $_POST['amount']);
5 | $query->bindParam('ticket', $_POST['ticket']);
6 | $query->execute();
7 | ?>
8 |
--------------------------------------------------------------------------------
/api/ban.php:
--------------------------------------------------------------------------------
1 | prepare("SELECT ROLEFLAGS FROM users WHERE TICKET = :ticket");
9 | $rolecheck->execute(array(
10 | 'ticket' => $_POST["ticket"]
11 | ));
12 | $a = $rolecheck->fetch(PDO::FETCH_ASSOC);
13 | if (!$a) exit;
14 | //$id = ($_POST["id"] - 100000);
15 | if ((int)$a['ROLEFLAGS'] >= 131086)
16 | {
17 | $q = $dbh->prepare("UPDATE users SET ISBANNED = 1 WHERE ID = :id");
18 | $q->execute(array(
19 | 'id' => $_POST['id']
20 | ));
21 | }
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/api/bg.php:
--------------------------------------------------------------------------------
1 | prepare("UPDATE users SET BG = :bg WHERE TICKET = :token");
4 | $query->execute(array('bg' => $_POST['bg'], 'token' => $_POST['ticket']));
5 | ?>
6 |
--------------------------------------------------------------------------------
/api/bginv.php:
--------------------------------------------------------------------------------
1 | 0|IsLimited>0|", '', $inv);
9 | $invred2 = str_replace("|", ';', $invred);
10 | $invred3 = preg_replace("/[^0-9,;]/", '', $invred2);
11 | //костыльное ограничение вещей в инвентаре фонов
12 | $count = mb_substr_count($invred3, ';');
13 | if ($count > 350) exit();
14 |
15 | $q = $dbh->prepare("UPDATE users SET BGInv = :inventory WHERE TICKET = :token");
16 | $q->execute(array(
17 | 'inventory' => $invred3,
18 | 'token' => $_POST['ticket']
19 | ));
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/api/inv.php:
--------------------------------------------------------------------------------
1 | ');
9 | if ($count > 240) exit;
10 | $q = $dbh->prepare("UPDATE users SET INVENTORY = :inventory WHERE TICKET = :token");
11 | $q->execute(array(
12 | 'inventory' => $_POST['inventory'],
13 | 'token' => $_POST['ticket']
14 | ));
15 | }
16 |
--------------------------------------------------------------------------------
/api/kek.php:
--------------------------------------------------------------------------------
1 | prepare("SELECT * FROM users WHERE TICKET = :ticket");
6 | $q->execute(array('ticket' => $_GET['ticket']));
7 | $a = $q->fetch(PDO::FETCH_ASSOC);
8 | $inv = $a['BGInv'];
9 | $ava = $a['AVATAR'];
10 | echo "id=" . $a['ID'] . "&username=" . $a['USERNAME'] . "&level=" . $a['LEVEL'] . "®date=" . $a['REGDATE'] . "&roleflags=" . $a['ROLEFLAGS'] . "&money=".$a["MONEY"]."&gold=".$a["GOLD"]."&magic=".$a["MAGIC"]."&avatar=" . $ava . "&inventory=" . $a['INVENTORY'] . "&isbanned=" . $a['ISBANNED'] . "&bg=" . $a['BG'] . "&bginven=" . $inv . '&body_color='.$a['BODY_COLOR'].'&legs='.$a['LEGS'].'&legs_color='.$a['LEGS_COLOR'].'&ears='.$a['EARS'].'&ears_color='.$a['EARS_COLOR'],'&eyes='.$a['EYES'].'&nose='.$a['NOSE'].'&mouth='.$a['MOUTH'].'&peak='.$a['PEAK'].'&horns='.$a['HORNS'].'&house_id='.$a['HOUSE_ID'].'&house_str='.$a['HOUSE_STR'];
11 |
--------------------------------------------------------------------------------
/api/money.php:
--------------------------------------------------------------------------------
1 | prepare('UPDATE users SET GOLD = GOLD - :priceRu, MONEY = MONEY - :priceSm WHERE TICKET = :ticket');
4 | $query->bindParam('priceRu', $_POST['priceRu']);
5 | $query->bindParam('priceSm', $_POST['priceSm']);
6 | $query->bindParam('ticket', $_POST['ticket']);
7 | $query->execute();
8 | ?>
9 |
--------------------------------------------------------------------------------
/api/saveBody.php:
--------------------------------------------------------------------------------
1 | prepare('UPDATE users SET BODY_COLOR = :bodycolor, EARS_COLOR = :earscolor, EARS = :ears, EYES = :eyes, HORNS = :horns, LEGS = :legs, LEGS_COLOR = :legscolor, MOUTH = :mouth, NOSE = :nose, PEAK = :peak WHERE TICKET = :ticket');
4 | $query->bindParam('bodycolor', $_POST['body_color']);
5 | $query->bindParam('earscolor', $_POST['ears_color']);
6 | $query->bindParam('ears', $_POST['ears']);
7 | $query->bindParam('eyes', $_POST['eyes']);
8 | $query->bindParam('horns', $_POST['horns']);
9 | $query->bindParam('legs', $_POST['legs']);
10 | $query->bindParam('legscolor', $_POST['legs_color']);
11 | $query->bindParam('mouth', $_POST['mouth']);
12 | $query->bindParam('nose', $_POST['nose']);
13 | $query->bindParam('peak', $_POST['peak']);
14 | $query->bindParam('ticket', $_POST['token']);
15 | $query->execute();
16 | ?>
17 |
--------------------------------------------------------------------------------
/api/setAvatar.php:
--------------------------------------------------------------------------------
1 | prepare("UPDATE users SET AVATAR = :avatar WHERE TICKET = :token");
4 | $query->execute(array('avatar' => $_POST['avatar'], 'token' => $_POST['ticket']));
5 | ?>
6 |
--------------------------------------------------------------------------------
/api/setLevel.php:
--------------------------------------------------------------------------------
1 | 5) exit('error');
6 | if(preg_match("/[^a-z,A-Z,0-9,а-я,А-Я,\_]/u", $_POST["level"])) exit('error');
7 |
8 | $q = $dbh->prepare("UPDATE users SET LEVEL = :level WHERE ID = :id");
9 | $q->execute(array('level' => $_POST["level"], 'id' => $_POST['id']));
10 |
11 | exit($_POST['level']);
12 | ?>
13 |
--------------------------------------------------------------------------------
/daisy/Application.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 30720
4 |
5 |
6 |
--------------------------------------------------------------------------------
/daisy/bodyparts.asc:
--------------------------------------------------------------------------------
1 | var bodyParts = {};
2 | bodyParts["2"] = {
3 | Id: 56,
4 | BodyPartId: 2,
5 | MediaResourceID: 56,
6 | IsColorable: 1,
7 | LayerID: 20,
8 | BodyPartTypeId: 3
9 | };
10 | bodyParts["1"] = {
11 | Id: 55,
12 | BodyPartId: 1,
13 | MediaResourceID: 55,
14 | IsColorable: 1,
15 | LayerID: 10,
16 | BodyPartTypeId: 2
17 | };
18 | bodyParts["22"] = {
19 | Id: 62,
20 | BodyPartId: 22,
21 | MediaResourceID: 62,
22 | IsColorable: 0,
23 | LayerID: 10,
24 | BodyPartTypeId: 2
25 | };
26 | bodyParts["28"] = {
27 | Id: 66,
28 | BodyPartId: 28,
29 | MediaResourceID: 66,
30 | IsColorable: 1,
31 | LayerID: 10,
32 | BodyPartTypeId: 2
33 | };
34 | bodyParts["36"] = {
35 | Id: 71,
36 | BodyPartId: 36,
37 | MediaResourceID: 71,
38 | IsColorable: 0,
39 | LayerID: 10,
40 | BodyPartTypeId: 2
41 | };
42 | bodyParts["41"] = {
43 | Id: 75,
44 | BodyPartId: 41,
45 | MediaResourceID: 75,
46 | IsColorable: 0,
47 | LayerID: 10,
48 | BodyPartTypeId: 2
49 | };
50 | bodyParts["48"] = {
51 | Id: 80,
52 | BodyPartId: 48,
53 | MediaResourceID: 80,
54 | IsColorable: 1,
55 | LayerID: 10,
56 | BodyPartTypeId: 2
57 | };
58 | bodyParts["57"] = {
59 | Id: 86,
60 | BodyPartId: 57,
61 | MediaResourceID: 86,
62 | IsColorable: 1,
63 | LayerID: 10,
64 | BodyPartTypeId: 2
65 | };
66 | bodyParts["65"] = {
67 | Id: 92,
68 | BodyPartId: 65,
69 | MediaResourceID: 92,
70 | IsColorable: 1,
71 | LayerID: 10,
72 | BodyPartTypeId: 2
73 | };
74 | bodyParts["45"] = {
75 | Id: 78,
76 | BodyPartId: 45,
77 | MediaResourceID: 78,
78 | IsColorable: 1,
79 | LayerID: 50,
80 | BodyPartTypeId: 8
81 | };
82 | bodyParts["54"] = {
83 | Id: 84,
84 | BodyPartId: 54,
85 | MediaResourceID: 84,
86 | IsColorable: 1,
87 | LayerID: 50,
88 | BodyPartTypeId: 8
89 | };
90 | bodyParts["62"] = {
91 | Id: 90,
92 | BodyPartId: 62,
93 | MediaResourceID: 90,
94 | IsColorable: 1,
95 | LayerID: 50,
96 | BodyPartTypeId: 8
97 | };
98 | bodyParts["68"] = {
99 | Id: 95,
100 | BodyPartId: 68,
101 | MediaResourceID: 95,
102 | IsColorable: 1,
103 | LayerID: 50,
104 | BodyPartTypeId: 8
105 | };
106 | bodyParts["71"] = {
107 | Id: 96,
108 | BodyPartId: 71,
109 | MediaResourceID: 96,
110 | IsColorable: 1,
111 | LayerID: 50,
112 | BodyPartTypeId: 8
113 | };
114 | bodyParts["72"] = {
115 | Id: 97,
116 | BodyPartId: 72,
117 | MediaResourceID: 97,
118 | IsColorable: 1,
119 | LayerID: 50,
120 | BodyPartTypeId: 8
121 | };
122 | bodyParts["73"] = {
123 | Id: 98,
124 | BodyPartId: 73,
125 | MediaResourceID: 98,
126 | IsColorable: 1,
127 | LayerID: 50,
128 | BodyPartTypeId: 8
129 | };
130 | bodyParts["13"] = {
131 | Id: 59,
132 | BodyPartId: 13,
133 | MediaResourceID: 59,
134 | IsColorable: 0,
135 | LayerID: 30,
136 | BodyPartTypeId: 7
137 | };
138 | bodyParts["21"] = {
139 | Id: 61,
140 | BodyPartId: 21,
141 | MediaResourceID: 61,
142 | IsColorable: 0,
143 | LayerID: 30,
144 | BodyPartTypeId: 7
145 | };
146 | bodyParts["27"] = {
147 | Id: 65,
148 | BodyPartId: 27,
149 | MediaResourceID: 65,
150 | IsColorable: 0,
151 | LayerID: 30,
152 | BodyPartTypeId: 7
153 | };
154 | bodyParts["35"] = {
155 | Id: 70,
156 | BodyPartId: 35,
157 | MediaResourceID: 70,
158 | IsColorable: 0,
159 | LayerID: 30,
160 | BodyPartTypeId: 7
161 | };
162 | bodyParts["40"] = {
163 | Id: 74,
164 | BodyPartId: 40,
165 | MediaResourceID: 74,
166 | IsColorable: 0,
167 | LayerID: 30,
168 | BodyPartTypeId: 7
169 | };
170 | bodyParts["47"] = {
171 | Id: 79,
172 | BodyPartId: 47,
173 | MediaResourceID: 79,
174 | IsColorable: 0,
175 | LayerID: 30,
176 | BodyPartTypeId: 7
177 | };
178 | bodyParts["56"] = {
179 | Id: 85,
180 | BodyPartId: 56,
181 | MediaResourceID: 85,
182 | IsColorable: 0,
183 | LayerID: 30,
184 | BodyPartTypeId: 7
185 | };
186 | bodyParts["64"] = {
187 | Id: 91,
188 | BodyPartId: 64,
189 | MediaResourceID: 91,
190 | IsColorable: 0,
191 | LayerID: 30,
192 | BodyPartTypeId: 7
193 | };
194 | bodyParts["64"] = {
195 | Id: 91,
196 | BodyPartId: 64,
197 | MediaResourceID: 91,
198 | IsColorable: 0,
199 | LayerID: 30,
200 | BodyPartTypeId: 7
201 | };
202 | bodyParts["12"] = {
203 | Id: 58,
204 | BodyPartId: 12,
205 | MediaResourceID: 58,
206 | IsColorable: 0,
207 | LayerID: 40,
208 | BodyPartTypeId: 6
209 | };
210 | bodyParts["31"] = {
211 | Id: 68,
212 | BodyPartId: 31,
213 | MediaResourceID: 68,
214 | IsColorable: 0,
215 | LayerID: 40,
216 | BodyPartTypeId: 6
217 | };
218 | bodyParts["50"] = {
219 | Id: 82,
220 | BodyPartId: 50,
221 | MediaResourceID: 82,
222 | IsColorable: 0,
223 | LayerID: 40,
224 | BodyPartTypeId: 6
225 | };
226 | bodyParts["59"] = {
227 | Id: 88,
228 | BodyPartId: 59,
229 | MediaResourceID: 88,
230 | IsColorable: 0,
231 | LayerID: 40,
232 | BodyPartTypeId: 6
233 | };
234 | bodyParts["67"] = {
235 | Id: 94,
236 | BodyPartId: 67,
237 | MediaResourceID: 94,
238 | IsColorable: 0,
239 | LayerID: 40,
240 | BodyPartTypeId: 6
241 | };
242 | bodyParts["4"] = {
243 | Id: 57,
244 | BodyPartId: 4,
245 | MediaResourceID: 57,
246 | IsColorable: 0,
247 | LayerID: 26,
248 | BodyPartTypeId: 5
249 | };
250 | bodyParts["30"] = {
251 | Id: 67,
252 | BodyPartId: 30,
253 | MediaResourceID: 67,
254 | IsColorable: 0,
255 | LayerID: 26,
256 | BodyPartTypeId: 5
257 | };
258 | bodyParts["49"] = {
259 | Id: 81,
260 | BodyPartId: 49,
261 | MediaResourceID: 81,
262 | IsColorable: 0,
263 | LayerID: 26,
264 | BodyPartTypeId: 5
265 | };
266 | bodyParts["58"] = {
267 | Id: 87,
268 | BodyPartId: 58,
269 | MediaResourceID: 87,
270 | IsColorable: 0,
271 | LayerID: 26,
272 | BodyPartTypeId: 5
273 | };
274 | bodyParts["66"] = {
275 | Id: 93,
276 | BodyPartId: 66,
277 | MediaResourceID: 93,
278 | IsColorable: 0,
279 | LayerID: 26,
280 | BodyPartTypeId: 5
281 | };
282 | bodyParts["23"] = {
283 | Id: 63,
284 | BodyPartId: 23,
285 | MediaResourceID: 63,
286 | IsColorable: 0,
287 | LayerID: 41,
288 | BodyPartTypeId: 11
289 | };
290 | bodyParts["37"] = {
291 | Id: 72,
292 | BodyPartId: 37,
293 | MediaResourceID: 72,
294 | IsColorable: 0,
295 | LayerID: 41,
296 | BodyPartTypeId: 11
297 | };
298 | bodyParts["42"] = {
299 | Id: 76,
300 | BodyPartId: 42,
301 | MediaResourceID: 76,
302 | IsColorable: 0,
303 | LayerID: 41,
304 | BodyPartTypeId: 11
305 | };
306 | bodyParts["74"] = {
307 | Id: 99,
308 | BodyPartId: 74,
309 | MediaResourceID: 99,
310 | IsColorable: 0,
311 | LayerID: 55
312 | };
313 | bodyParts["75"] = {
314 | Id: 100,
315 | BodyPartId: 75,
316 | MediaResourceID: 100,
317 | IsColorable: 0,
318 | LayerID: 55
319 | };
320 | bodyParts["76"] = {
321 | Id: 101,
322 | BodyPartId: 76,
323 | MediaResourceID: 101,
324 | IsColorable: 0,
325 | LayerID: 55
326 | };
327 | bodyParts["76"] = {
328 | Id: 101,
329 | BodyPartId: 76,
330 | MediaResourceID: 101,
331 | IsColorable: 0,
332 | LayerID: 55
333 | };
334 | bodyParts["77"] = {
335 | Id: 102,
336 | BodyPartId: 77,
337 | MediaResourceID: 102,
338 | IsColorable: 0,
339 | LayerID: 55
340 | };
341 | bodyParts["78"] = {
342 | Id: 103,
343 | BodyPartId: 78,
344 | MediaResourceID: 103,
345 | IsColorable: 0,
346 | LayerID: 55
347 | };
348 | bodyParts["93"] = {
349 | Id: 25881,
350 | BodyPartId: 93,
351 | MediaResourceID: 25881,
352 | IsColorable: 1,
353 | LayerID: 50,
354 | BodyPartTypeId: 8
355 | };
356 | bodyParts["91"] = {
357 | Id: 25879,
358 | BodyPartId: 91,
359 | MediaResourceID: 25879,
360 | IsColorable: 1,
361 | LayerID: 50,
362 | BodyPartTypeId: 8
363 | };
364 | bodyParts["90"] = {
365 | Id: 25878,
366 | BodyPartId: 90,
367 | MediaResourceID: 25878,
368 | IsColorable: 0,
369 | LayerID: 26,
370 | BodyPartTypeId: 5
371 | };
372 | bodyParts["80"] = {
373 | Id: 25867,
374 | BodyPartId: 80,
375 | MediaResourceID: 25867,
376 | IsColorable: 0,
377 | LayerID: 30,
378 | BodyPartTypeId: 7
379 | };
380 | bodyParts["89"] = {
381 | Id: 25877,
382 | BodyPartId: 89,
383 | MediaResourceID: 25877,
384 | IsColorable: 0,
385 | LayerID: 26,
386 | BodyPartTypeId: 5
387 | };
388 | bodyParts["88"] = {
389 | Id: 25876,
390 | BodyPartId: 88,
391 | MediaResourceID: 25876,
392 | IsColorable: 0,
393 | LayerID: 26,
394 | BodyPartTypeId: 5
395 | };
396 | bodyParts["92"] = {
397 | Id: 25880,
398 | BodyPartId: 92,
399 | MediaResourceID: 25880,
400 | IsColorable: 1,
401 | LayerID: 50,
402 | BodyPartTypeId: 8
403 | };
404 | bodyParts["86"] = {
405 | Id: 25874,
406 | BodyPartId: 86,
407 | MediaResourceID: 25874,
408 | IsColorable: 0,
409 | LayerID: 40,
410 | BodyPartTypeId: 6
411 | };
412 | bodyParts["83"] = {
413 | Id: 25870,
414 | BodyPartId: 83,
415 | MediaResourceID: 25870,
416 | IsColorable: 0,
417 | LayerID: 30,
418 | BodyPartTypeId: 7
419 | };
420 | bodyParts["84"] = {
421 | Id: 25872,
422 | BodyPartId: 84,
423 | MediaResourceID: 25872,
424 | IsColorable: 0,
425 | LayerID: 41,
426 | BodyPartTypeId: 11
427 | };
428 | bodyParts["82"] = {
429 | Id: 25869,
430 | BodyPartId: 82,
431 | MediaResourceID: 25869,
432 | IsColorable: 0,
433 | LayerID: 30,
434 | BodyPartTypeId: 7
435 | };
436 | bodyParts["81"] = {
437 | Id: 25868,
438 | BodyPartId: 81,
439 | MediaResourceID: 25868,
440 | IsColorable: 0,
441 | LayerID: 30,
442 | BodyPartTypeId: 7
443 | };
444 | bodyParts["87"] = {
445 | Id: 25875,
446 | BodyPartId: 87,
447 | MediaResourceID: 25875,
448 | IsColorable: 0,
449 | LayerID: 50,
450 | BodyPartTypeId: 5
451 | };
452 | bodyParts["85"] = {
453 | Id: 25873,
454 | BodyPartId: 85,
455 | MediaResourceID: 25873,
456 | IsColorable: 0,
457 | LayerID: 41,
458 | BodyPartTypeId: 11
459 | };
460 |
--------------------------------------------------------------------------------
/daisy/games.asc:
--------------------------------------------------------------------------------
1 | var gamesArray = [];
2 |
3 | // детсад
4 | gamesArray["2"] = ' ';
5 |
6 | // волейбол
7 | gamesArray["12"] = ' ';
8 |
9 | // кафе улыбка
10 | gamesArray["15"] = ' ';
11 |
12 | // вечный двигатель
13 | gamesArray["20"] = ' ';
14 |
15 | // катер
16 | gamesArray["27"] = ' ';
17 |
18 | // студия моды
19 | gamesArray["66"] = ' ';
20 |
21 | // воздушные горки
22 | gamesArray["117"] = ' ';
23 |
24 | // дары леса
25 | gamesArray["137"] = ' ';
26 |
27 | // конвейер страна роботов
28 | gamesArray["262"] = ' ';
29 |
30 | // шахта страна роботов
31 | gamesArray["260"] = ' ';
32 |
33 | // собери робота
34 | gamesArray["261"] = ' ';
35 |
36 | // жук
37 | gamesArray["205"] = ' ';
38 |
39 | // паук
40 | gamesArray["203"] = ' ';
41 |
42 | // муравей
43 | gamesArray["206"] = ' ';
44 |
45 | // кузнечик
46 | gamesArray["207"] = ' ';
47 |
48 | // бабочка
49 | gamesArray["204"] = ' ';
50 |
51 | // Формула Шарарама
52 | gamesArray["198"] = ' ';
53 |
54 | // Клад царицы
55 | gamesArray["155"] = ' ';
56 |
57 | // Узнай свою судьбу
58 | gamesArray["141"] = ' ';
59 |
60 | // Сехмет
61 | gamesArray["123"] = ' ';
62 |
63 | // Баст
64 | gamesArray["119"] = ' ';
65 |
66 | // Маат
67 | gamesArray["120"] = ' ';
68 |
69 | // Тефнут
70 | gamesArray["122"] = ' ';
71 |
72 | // Исида
73 | gamesArray["121"] = ' ';
74 |
75 | // Нут
76 | gamesArray["124"] = ' ';
77 |
78 | // Мюра
79 | gamesArray["468"] = ' ';
80 |
81 | // Космостанция
82 | gamesArray["465"] = ' ';
83 |
84 | // Стиралка
85 | gamesArray["374"] = ' ';
86 |
--------------------------------------------------------------------------------
/daisy/locations.asc:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | var locationsArray = [];
6 |
7 | locationsArray["garage"] = ' ';
8 | //locationsArray["-1"] ='';
9 | locationsArray["-1"] = '';
10 |
11 | locationsArray["-2"] = '';
12 |
13 |
14 | // Ромашковая долина
15 |
16 | locationsArray["0"] = ' ';
17 | locationsArray["38"] = locationsArray["0"];
18 |
19 | // Домик Кроша (1 комната)
20 |
21 | locationsArray["218"] = '';
22 |
23 | // Домик Кроша (2 комната)
24 |
25 | locationsArray["220"] = '';
26 |
27 | // Домик Нюши (1 комната)
28 |
29 | locationsArray["183"] = '';
30 |
31 | // Домик Нюши (2 комната)
32 |
33 | locationsArray["185"] = '';
34 |
35 | // Главная площадь
36 |
37 | locationsArray["23"] =' ';
38 |
39 | // Детский сад
40 |
41 | locationsArray["10"] = ' ';
42 |
43 | // Смешмаг
44 |
45 | locationsArray["9"] = '';
46 |
47 | // Дом Мод
48 |
49 | locationsArray["40"] = '';
50 |
51 | // Площадь у Больнички
52 |
53 | locationsArray["47"] = ' ';
54 |
55 | // Больничка
56 |
57 | locationsArray["49"] = '';
58 |
59 | // Почта
60 |
61 | locationsArray["527"] = ' ';
62 |
63 | // Школа Магов
64 |
65 | locationsArray["63"] = '';
66 |
67 | // Сити
68 |
69 | locationsArray["68"] = '';
70 |
71 | // Бюро путешествий
72 |
73 | locationsArray["61"] = '';
74 |
75 | // Стиралка
76 |
77 | locationsArray["230"] = '';
78 |
79 | // Автосалон
80 |
81 | locationsArray["71"] = '';
82 |
83 | // Площадь перед Дисколендом
84 |
85 | locationsArray["24"] = '';
86 |
87 | // Диско (DJ Nusha)
88 |
89 | locationsArray["32"] = ' ';
90 |
91 | // Парк Аттракционов
92 |
93 | locationsArray["22"] = ' ';
94 |
95 | // Снежная гора
96 |
97 | locationsArray["31"] = ' ';
98 |
99 | // Пляж "Лазурный"
100 |
101 | locationsArray["27"] = '';
102 |
103 | // Космодром
104 |
105 | locationsArray["412"] = '';
106 |
107 | // Дремучий лес
108 |
109 | locationsArray["45"] = '';
110 |
111 | // Клубный Квартал
112 |
113 | locationsArray["727"] = ' ';
114 |
115 | // Морской порт
116 |
117 | locationsArray["53"] = ' ';
118 |
119 | // Подводный мир
120 |
121 | locationsArray["54"] = '';
122 |
123 | // Автодром
124 |
125 | locationsArray["29"] = '';
126 |
127 | // Затерянный каньон
128 |
129 | locationsArray["226"] = ' ';
134 |
135 | // Подземелье
136 |
137 | locationsArray["532"] = '';
138 |
139 | // Штаб
140 |
141 | locationsArray["501"] = '';
142 |
143 | // Секретная почта
144 |
145 | locationsArray["504"] = ' ';
146 |
147 | // Наблюдательный пункт
148 |
149 | locationsArray["503"] = '';
150 |
151 | // Сад
152 |
153 | locationsArray["900"] = '';
154 |
155 |
156 | // Умная гора
157 |
158 | locationsArray["974"] = ' ';
159 |
160 | // Заводик
161 |
162 | locationsArray['995'] = '';
163 |
164 | locationsArray["609"] = locationsArray["995"];
165 | locationsArray["230"] = locationsArray["609"];
166 |
167 | // Сити
168 |
169 |
170 | locationsArray["68"] = '';
171 |
172 | locationsArray["28"] = locationsArray["68"];
173 |
174 |
175 | var travelPlaces = [];
176 |
177 |
178 | // Джунгли
179 |
180 | travelPlaces["51"] = '';
181 |
182 | // Египет
183 |
184 | travelPlaces["26"] = '';
185 |
186 | // Страна Роботов
187 |
188 | travelPlaces["53"] = '';
189 |
190 |
191 | var spacePlaces = [];
192 |
193 |
194 | // Космическая станция
195 |
196 | spacePlaces["348"] = ' ';
197 |
198 | // Мюра
199 |
200 | spacePlaces["356"] = '';
201 |
--------------------------------------------------------------------------------
/daisy/main.asc:
--------------------------------------------------------------------------------
1 | trace('[DD++] Loading items');
2 | load("items.asc");
3 | trace('[DD++] Loading locations');
4 | load("locations.asc");
5 | trace('[DD++] Loading bodyparts');
6 | load("bodyparts.asc");
7 | trace('[DD++] Loading games');
8 | load("games.asc");
9 | trace('[DD++] Successfully started!');
10 | var msHost = "http://localhost";
11 |
12 | var homeInv = [{
13 | ID: 3676,
14 | AObjectTypeId: 1,
15 | AObjectId: 3676,
16 | AObjectRefTypeId: 20,
17 | MediaResourceID: 10223,
18 | TextResourceID: 10641,
19 | IsActive: 0
20 | }, {
21 | ID: 8326,
22 | AObjectTypeId: 1,
23 | AObjectId: 8326,
24 | AObjectRefTypeId: 20,
25 | MediaResourceID: 26415,
26 | TextResourceID: 26240,
27 | IsActive: 0
28 | }];
29 | var sbox = new Array(255);
30 | var mykey = new Array(255);
31 |
32 | function objInvToStr(Inventory) {
33 | var str = "";
34 | for (var tab in Inventory) {
35 | for (var i = 0; i < Inventory[tab].length; i++) {
36 | var ms = "";
37 | for (var key in Inventory[tab][i]) {
38 | if (key != "tab") {
39 | ms = ms + key + ">" + Inventory[tab][i][key] + "|";
40 | }
41 | }
42 | str += ms + "<";
43 | }
44 | str = str.slice(0, -1) + ";";
45 | }
46 | return str.slice(0, -1);
47 | }
48 |
49 | function objBgToStr(Inventory) {
50 | var str = "";
51 | for (var tab in Inventory) {
52 | for (var i = 0; i < Inventory[tab].length; i++) {
53 | var ms = "";
54 | for (var key in Inventory[tab][i]) {
55 | if (key != "tab") {
56 | ms = ms + key + ">" + Inventory[tab][i][key] + "|";
57 | }
58 | }
59 | str += ms + "<";
60 | }
61 | str = str.slice(0, -1) + ";";
62 | }
63 | return str.slice(0, -1);
64 | }
65 |
66 | function meme(Id) {
67 | return g[Id];
68 | }
69 |
70 | function makeInvXML(Inventory) {
71 | var InvXML = '';
72 | for (var i = 0; i < homeInv.length; i++) {
73 | trace(homeInv[i]["ID"])
74 | var test = '';
77 | } else {
78 | test = test + '">';
79 | }
80 | InvXML = InvXML + test;
81 | }
82 | trace(InvXML);
83 | return InvXML;
84 | }
85 | //LayerID="36" - одежда
86 | //LayerID="45" - прически
87 | //LayerID="31" - Очки
88 | //LayerID="11" - обувь
89 | //LayerID="56" - аксессуары
90 | //LayerID="27" - костюмы
91 | //LayerID="57" - спутники
92 | function makeXML(inv) {
93 | var bigXML = '';
94 | for (var m = 0; m < 7; m++) {
95 | var InvXML = inv[m][0]["tab"];
96 | for (var i = 1; i < inv[m].length; i++) {
97 | if (inv[m][i] != undefined) {
98 | var test = ' ';
101 | } else {
102 | test = test + '" Pollution="0" />';
103 | }
104 | InvXML = InvXML + test;
105 | }
106 | }
107 | bigXML = bigXML + InvXML + '';
108 | }
109 | return bigXML;
110 | }
111 |
112 | function parseCoolString(cstr) {
113 | if (typeof(cstr) !== 'string') {
114 | return;
115 | }
116 | var pieces = cstr.split("|");
117 | var obj = {};
118 | for (var i = 0; i < pieces.length; i++) {
119 | var smol = pieces[i].split(">");
120 | var mkey = smol[0];
121 | var mvalue = smol[1];
122 | if (mvalue == 'true') {
123 | mvalue = 1;
124 | } else if (mvalue == 'false') {
125 | mvalue = 0;
126 | }
127 | obj[mkey] = mvalue;
128 | }
129 | return obj;
130 | }
131 |
132 | function parseNOCTMML(NOCTMML) {
133 | var arr = {};
134 | var s = NOCTMML.split(";");
135 | for (var i = 0; i < s.length; i++) {
136 | arr[i] = parseCoolString(s[i]);
137 | }
138 | trace(arr[0]["Id"] + " ID");
139 | return arr;
140 | }
141 |
142 | function objectToCoolString(obj) {
143 | var str = "";
144 | for (var el in obj) {
145 | str += el + ">" + obj[el] + "|";
146 | }
147 | str = str.slice(0, -1);
148 | return str;
149 | }
150 |
151 | function pseudoArrayToNOCTMML(steam) {
152 | var str = "";
153 | for (var e in steam) {
154 | str += objectToCoolString(steam[e]) + ";";
155 | }
156 | str = str.slice(0, -1);
157 | return str;
158 | }
159 |
160 | function H2CA(hex) {
161 | var _loc3_ = [];
162 | var _loc1_ = hex.substr(0, 2) != "0x" ? 0 : 2;
163 | while (_loc1_ < hex.length) {
164 | _loc3_.push(parseInt(hex.substr(_loc1_, 2), 16));
165 | _loc1_ = _loc1_ + 2;
166 | }
167 | return _loc3_;
168 | }
169 |
170 | function strToChars(str) {
171 | var codes = new Array();
172 | for (var i = 0; i < str.length; i++) {
173 | codes.push(str.charCodeAt(i));
174 | }
175 | return codes;
176 | }
177 |
178 | function charsToHex(chars) {
179 | var result = new String("");
180 | var hexes = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f");
181 | for (var i = 0; i < chars.length; i++) {
182 | result += hexes[chars[i] >> 4] + hexes[chars[i] & 0xf];
183 | }
184 | return result;
185 | }
186 |
187 | function initialize(pwd) {
188 | var b = 0;
189 | var tempSwap;
190 | var intLength = pwd.length;
191 | for (var a = 0; a <= 255; a++) {
192 | mykey[a] = pwd[(a % intLength)];
193 | sbox[a] = a;
194 | }
195 | for (var a = 0; a <= 255; a++) {
196 | b = (b + sbox[a] + mykey[a]) % 256;
197 | tempSwap = sbox[a];
198 | sbox[a] = sbox[b];
199 | sbox[b] = tempSwap;
200 | }
201 | }
202 |
203 | function calculate(plaintxt, psw) {
204 | initialize(psw);
205 | var i = 0;
206 | var j = 0;
207 | var cipher = new Array();
208 | var k, temp, cipherby;
209 | for (var a = 0; a < plaintxt.length; a++) {
210 | i = (i + 1) % 256;
211 | j = (j + sbox[i]) % 256;
212 | temp = sbox[i];
213 | sbox[i] = sbox[j];
214 | sbox[j] = temp;
215 | var idx = (sbox[i] + sbox[j]) % 256;
216 | k = sbox[idx];
217 | cipherby = plaintxt[a] ^ k;
218 | cipher.push(cipherby);
219 | }
220 | return cipher;
221 | }
222 |
223 | function rc4(src, key) {
224 | var mtxt = strToChars(src);
225 | var mkey = strToChars(key);
226 | var result = calculate(mtxt, mkey);
227 | return charsToHex(result);
228 | }
229 |
230 | function avaToXML(ava) {
231 | var xml = "";
232 | for (var e in ava) {
233 | if (ava[e]["IsBodyPart"] == "1") {
234 | xml += ' ";
238 | } else {
239 | xml += " />";
240 | }
241 | } else {
242 | xml += ' ';
243 | }
244 | }
245 | return xml;
246 | }
247 |
248 | function spendMoney(ticket, priceSm, priceRu) {
249 | var lv = new LoadVars();
250 | lv.ticket = ticket;
251 | lv.priceSm = priceSm;
252 | lv.priceRu = priceRu;
253 | lv.send(msHost + "/money.php");
254 | }
255 |
256 | function addMoney(ticket, a) {
257 | var lv = new LoadVars();
258 | lv.ticket = ticket;
259 | lv.amount = a;
260 | lv.send(msHost + "/addMoney.php");
261 | }
262 |
263 | function addGold(ticket, a) {
264 | var lv = new LoadVars();
265 | lv.ticket = ticket;
266 | lv.amount = a;
267 | lv.send(msHost + "/addGold.php");
268 | }
269 |
270 | function setBg(ticket, bg) {
271 | var lv = new LoadVars();
272 | lv.ticket = ticket;
273 | lv.bg = bg;
274 | lv.send(msHost + "/bg.php");
275 | }
276 |
277 | function houseToXML(arr) {
278 | var ret = '';
279 | for (i = 0; i < arr.length; i++) {
280 | var o = arr[i];
281 | ret += '';
282 | }
283 | return ret;
284 | }
285 |
286 |
287 | function hObjToStr(obj) {
288 | var ret = '';
289 | for (var key in obj) {
290 | ret += key + ':' + obj['key'] + '$';
291 | }
292 | return ret;
293 | }
294 |
295 | function randomRange(minNum, maxNum) {
296 | {
297 | return Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum;
298 | }
299 | }
300 |
301 | application.onConnect = function(client, uid, sid, ticket, hwid) {
302 | trace('[CONNECT] ' + ticket);
303 | for (var i = 0; i < application.clients.length; i++) {
304 | if (application.clients[i].ip == client.ip && client.id !== application.clients[i].id) {
305 | application.disconnect(application.clients[i]);
306 | break;
307 | }
308 | }
309 | var initialData = new LoadVars();
310 | var initdata = initialData.load(msHost + "/kek.php?ticket=" + ticket + "&secret");
311 | client.ticket = ticket;
312 | client.ufr = '';
313 | client.ufg = '';
314 | client.inv = {
315 | 0: [{
316 | tab: ''
317 | }],
318 | 1: [{
319 | tab: ''
320 | }],
321 | 2: [{
322 | tab: ''
323 | }],
324 | 3: [{
325 | tab: ''
326 | }],
327 | 4: [{
328 | tab: ''
329 | }],
330 | 5: [{
331 | tab: ''
332 | }],
333 | 6: [{
334 | tab: ''
335 | }]
336 | };
337 | client.bginv = {
338 | 0: [{
339 | items: ''
340 | }]
341 | };
342 |
343 | function getBody(changes) {
344 | var newSmesh = {
345 | RoleFlags: 262144,
346 | User: {
347 | Body: {},
348 | "State": 0,
349 | "Name": "esme",
350 | "Level": 999,
351 | y: 400,
352 | x: 480
353 | }
354 | };
355 | for (var i = 0; i < changes["BodyParts"].length; i++) {
356 | var Id = changes["BodyParts"][i]["Id"];
357 | newSmesh["User"]["Body"][Id] = {};
358 | newSmesh["User"]["Body"][Id]["IsBodyPart"] = true;
359 | newSmesh["User"]["Body"][Id]["BodyPartTypeId"] = bodyParts[changes["BodyParts"][i]["Id"]]["BodyPartTypeId"];
360 | newSmesh["User"]["Body"][Id]["MediaResourceID"] = bodyParts[changes["BodyParts"][i]["Id"]]["MediaResourceID"];
361 | newSmesh["User"]["Body"][Id]["LayerID"] = bodyParts[changes["BodyParts"][i]["Id"]]["LayerID"] - 1;
362 | newSmesh["User"]["Body"][Id]["BodyPartId"] = bodyParts[changes["BodyParts"][i]["Id"]]["BodyPartId"];
363 | newSmesh["User"]["Body"][Id]["Id"] = changes["BodyParts"][i]["Id"];
364 | if (bodyParts[changes["BodyParts"][i]["Id"]]["BodyPartTypeId"] == 6) {
365 | newSmesh["User"]["Body"][Id]["Color"] = client.body_color;
366 | } else if (changes["BodyParts"][i]["Color"]) {
367 | newSmesh["User"]["Body"][Id]["Color"] = changes["BodyParts"][i]["Color"];
368 | }
369 | }
370 | for (var i = 0; i < changes["Inventory"].length; i++) {
371 | var Id = changes["Inventory"][i]["Id"];
372 | var well = meme(changes["Inventory"][i]["Id"]);
373 | if(well == undefined) continue;
374 | newSmesh["User"]["Body"][Id] = {};
375 | newSmesh["User"]["Body"][Id]["IsBodyPart"] = false;
376 | newSmesh["User"]["Body"][Id]["GoodID"] = changes["Inventory"][i]["Id"];
377 | newSmesh["User"]["Body"][Id]["MediaResourceID"] = well["MRId"];
378 | newSmesh["User"]["Body"][Id]["GoodTypeID"] = well["GoodTypeId"];
379 | newSmesh["User"]["Body"][Id]["LayerID"] = well["LayerId"];
380 | newSmesh["User"]["Body"][Id]["Id"] = changes["Inventory"][i]["Id"];
381 | }
382 | return newSmesh;
383 | }
384 |
385 | function makebgXML(bginv) {
386 | var bigXML2 = '';
387 | var bigXML3 = '';
388 | for (var i = 1; i < client.bginv[0].length; i++) {
389 | if (client.bginv[0][i] != undefined) {
390 | if (client.bginv[0][i]["ID"] == client.backgroundID) {
391 | bigXML3 = ' ';
392 | } else {
393 | bigXML2 += ' ';
394 | }
395 | }
396 | }
397 | if (bigXML3) {
398 | topXML = bigXML2 + bigXML3;
399 | } else {
400 | topXML = bigXML2;
401 | }
402 | return topXML;
403 | }
404 |
405 | initialData.onLoad = function(success) {
406 | if(this.id == undefined || +this.isbanned !== 0) {
407 | application.rejectConnection(client);
408 | return;
409 | }
410 | for (var i = 0; i < application.clients.length; i++) {
411 | if (+application.clients[i].smeshID == +this.id && application.clients[i].id !== client.id) {
412 | application.disconnect(application.clients[i]);
413 | break;
414 | }
415 | }
416 |
417 | trace(this.toString());
418 |
419 | client.smeshID = +this.id;
420 | client.userObj["User"]["Name"] = this.username;
421 | client.userObj["User"]["Level"] = this.level;
422 | client.userObj["User"]["RoleFlags"] = +this.roleflags;
423 | client.userObj["RoleFlags"] = client.userObj["User"]["RoleFlags"];
424 | client.userObj["User"]["Money"] = +this.money;
425 | client.userObj["User"]["Gold"] = +this.gold;
426 | client.userObj["User"]["Magic"] = +this.magic;
427 | client.userObj["User"]["Body"] = parseNOCTMML(this.avatar);
428 | client.weaponCount = 999999999;
429 | client.regdate = this.regdate;
430 | client.role = +this.roleflags;
431 | client.backgroundID = +this.bg;
432 |
433 | client.body_color = this.body_color;
434 | client.legs = this.legs;
435 | client.legs_color = this.legs_color;
436 | client.ears = this.ears;
437 | client.ears_color = this.ears_color;
438 | client.eyes = this.eyes;
439 | client.nose = this.nose;
440 | client.mouth = this.mouth;
441 | client.peak = this.peak;
442 | client.horns = this.horns;
443 | client.houseStr = this.houseStr;
444 |
445 | var e = this.inventory.split(";");
446 | var ebg = this.bginven.split(";");
447 | for (var i = -1; i < ebg.length; i++) {
448 | if (ebg[i]) {
449 | var tesbg = {
450 | ID: ebg[i],
451 | IsUsed: 0,
452 | IsLimited: 0
453 | };
454 | client.bginv[0].push(tesbg);
455 | }
456 | }
457 | for (var i = 0; i < e.length; i++) {
458 | var m = e[i].split("<");
459 | for (var id = 0; id < m.length; id++) {
460 | var mem = m[id].split("|");
461 | var obj = {};
462 | for (var meme = 0; meme < mem.length; meme++) {
463 | var keys = mem[meme].split(">");
464 | if (keys[1] != undefined) {
465 | obj[keys[0]] = keys[1];
466 | }
467 | }
468 | if (obj["ID"]) {
469 | client.inv[i][id + 1] = obj;
470 | }
471 | }
472 | }
473 | application.acceptConnection(client);
474 | client.call("_NNR", null, client.role);
475 | client.call("_NNT", null, client.userObj["User"]["Money"], client.userObj["User"]["Gold"]);
476 | }
477 |
478 | client.userObj = {
479 | RoleFlags: 2,
480 | User: {
481 | Body: {
482 | "1": {
483 | "State": 1,
484 | Id: 1,
485 | IsBodyPart: true,
486 | Color: 8009440,
487 | BodyPartTypeId: 1,
488 | MediaResourceID: 55,
489 | LayerID: 10,
490 | BodyPartId: "73"
491 | },
492 | "2": {
493 | IsBodyPart: true,
494 | BodyPartTypeId: "1",
495 | MediaResourceID: 56,
496 | LayerID: 20,
497 | Id: 2,
498 | Color: 8009440,
499 | BodyPartId: "74"
500 | },
501 | "4": {
502 | IsBodyPart: true,
503 | BodyPartTypeId: "3",
504 | MediaResourceID: 59,
505 | LayerID: 30,
506 | Id: 4,
507 | BodyPartId: "75"
508 | },
509 | "50": {
510 | IsBodyPart: true,
511 | BodyPartTypeId: "4",
512 | MediaResourceID: 82,
513 | LayerID: 40,
514 | Id: 50,
515 | BodyPartId: "76"
516 | },
517 | 18108: {
518 | IsBodyPart: false,
519 | MediaResourceID: 464,
520 | GoodID: 38,
521 | GoodTypeID: 4,
522 | Id: 18108,
523 | LayerID: 45
524 | },
525 | 112: {
526 | IsBodyPart: false,
527 | MediaResourceID: 274,
528 | GoodID: 38,
529 | GoodTypeID: 14,
530 | Id: 112,
531 | LayerID: 31
532 | }
533 | },
534 | "State": 2,
535 | "Name": "esme",
536 | "Level": 999,
537 | y: 400,
538 | x: 480
539 | }
540 | };
541 | client.house = [];
542 |
543 | client.lastTickP = 0;
544 | client.failedPticks = 0;
545 |
546 | client.lastTickC = 0;
547 | client.failedCticks = 0;
548 |
549 | client.lastTickS = 0;
550 | client.failedSticks = 0;
551 |
552 | client.failedLSticks = 0;
553 | client.lastTickLS = 0;
554 |
555 | client.location = 16;
556 | setInterval(function() {
557 | client.failedPticks = 0;
558 | client.failedCticks = 0;
559 | client.failedSticks = 0;
560 | client.failedLSticks = 0;
561 | }, 1000);
562 | //client.ufr = "1,test|2,kek|3,destator";
563 |
564 | client._SOO = function(soName, opName, args) {
565 | // we don't need this
566 | }
567 |
568 | client.__resolve = function(name) {
569 | application.disconnect(client);
570 | };
571 | client._P = function(point, tweenId, emitEvent) {
572 | var now = new Date();
573 | if (now.getTime() - client.lastTickP < 300) client.failedPticks++;
574 | if (client.failedPticks >= 10) {
575 | trace('[KICK] Kicked user ' + client.userObj["User"]["Name"] + ' (_P cooldown)');
576 | application.disconnect(client);
577 | return;
578 | }
579 | client.lastTickP = now.getTime();
580 |
581 | client.userObj["User"]["x"] = point.x;
582 | client.userObj["User"]["y"] = point.y;
583 | if(emitEvent !== false) {
584 | for (var i = 0; i < application.clients.length; i++) {
585 | if (application.clients[i].location == client.location) {
586 | application.clients[i].call("_P", null, client.smeshID, point, tweenId);
587 | }
588 | }
589 | }
590 | }
591 | client._LS = function(descriptor, startPoint, startState) {
592 | if (descriptor == undefined) return;
593 | if (startPoint == undefined) return;
594 | if (startState == undefined) return;
595 | var now = new Date();
596 | if (now.getTime() - client.lastTickLS < 500) client.failedLSticks++;
597 | if (client.failedLSticks >= 5) {
598 | trace('[KICK] Kicked user ' + client.userObj["User"]["Name"] + ' (_LS cooldown)');
599 | application.disconnect(client);
600 | return;
601 | }
602 | client.lastTickLS = now.getTime();
603 |
604 | client.userObj["User"]["x"] = startPoint.x;
605 | client.userObj["User"]["y"] = startPoint.y;
606 | client.userObj["User"]["state"] = startState;
607 | if (descriptor != "LOAD") {
608 | trace("descr: " + descriptor.split("$")[2]);
609 | client.location = descriptor.split("$")[2];
610 | } else {
611 | return "0";
612 | }
613 | var usrs = {};
614 | for (var i = 0; i < application.clients.length; i++) {
615 | if (application.clients[i].location == client.location) {
616 | usrs[application.clients[i].smeshID] = application.clients[i].userObj;
617 | if(application.clients[i].smeshID !== client.smeshID) application.clients[i].call("_UE", null, client.smeshID, client.userObj);
618 | }
619 | }
620 | client.call("_LS", null, usrs);
621 | }
622 | client._S = function(state) {
623 | var now = new Date();
624 | if (now.getTime() - client.lastTickS < 300) client.failedSticks++;
625 | if (client.failedSticks > 60) {
626 | trace('[KICK] Kicked user ' + client.userObj["User"]["Name"] + ' (_S cooldown)');
627 | application.disconnect(client);
628 | return;
629 | }
630 | client.lastTickS = now.getTime();
631 | client.userObj["User"]["state"] = state;
632 | for (var i = 0; i < application.clients.length; i++) {
633 | if (application.clients[i].location == client.location) {
634 | application.clients[i].call("_S", null, client.smeshID, state);
635 | }
636 | }
637 | }
638 | client._SS = function(hidden) {
639 | if (client.userObj["User"]["RoleFlags"] < 131086) return;
640 | client.userObj["User"]["hidden"] = hidden;
641 | for (var i = 0; i < application.clients.length; i++) {
642 | if (application.clients[i].location == client.location) {
643 | application.clients[i].call("_SS", null, client.smeshID, hidden);
644 | }
645 | }
646 | }
647 | client._SCA = function(methodName, data) {
648 | if (client.userObj["User"]["RoleFlags"] < 393230) return;
649 | var response = '';
650 | switch (methodName) {
651 | case "fms.give":
652 | var data = data.split(" ");
653 | for (var i = 0; i < application.clients.length; i++) {
654 | if (application.clients[i].userObj["User"]["Name"] == data[0]) {
655 | var target = application.clients[i];
656 | }
657 | }
658 | if (target !== undefined) {
659 | var splitted = data[1].split(',')
660 | for (var i in splitted) {
661 | var item = meme(Number(splitted[i]));
662 | if (item['Id'] == undefined) return 'Вещи с айди ' + splitted[i] + ' нет';
663 | addItem(target, splitted[i]);
664 | }
665 | response = 'Вещь успешно выдана!';
666 | } else {
667 | response = 'Данного игрока нет в сети!';
668 | }
669 | break;
670 | case "fms.help":
671 | response = 'fms.give ник вещь - выдать игроку вещь (айди вещей можно через запятую!)';
672 | break;
673 | default:
674 | response = "Неизвестная команда. Воспользуйтесь fms.help";
675 | break;
676 | }
677 | return response;
678 | }
679 | client._NSF = function() {
680 | //return '';
681 | }
682 |
683 | function hStrToArr(str) {
684 | return true;
685 | var arr = [];
686 | var pieces = str.split(";");
687 | for (var i = 0; i < pieces.length; i++) {
688 | var obj = {};
689 | var e = pieces[i].split("|");
690 | for (var id = 0; id < e.length; id++) {
691 | var p = e[id].split(">");
692 | obj[p[0].replace(" ", "")] = p[1];
693 | }
694 | arr.push(obj);
695 | }
696 | return arr;
697 | }
698 |
699 | function updateInventory(ticket, inv) {
700 | var str = objInvToStr(inv);
701 | var lv = new LoadVars();
702 | lv.inventory = str;
703 | lv.ticket = ticket;
704 | lv.send(msHost + "/inv.php");
705 | }
706 |
707 | function updatebgInventory(ticket, bginv) {
708 | var str = objBgToStr(bginv);
709 | var lv = new LoadVars();
710 | lv.inventory = str;
711 | lv.ticket = ticket;
712 | lv.send(msHost + "/bginv.php");
713 | }
714 |
715 | function hObjToStr(obj) {
716 | var str = "";
717 | for (var i = 0; i < obj.length; i++) {
718 | if (obj[i] != undefined) {
719 | for (var key in obj[i]) {
720 | str += key + ">" + obj[i][key] + "|";
721 | }
722 | str = str.slice(0, -1);
723 | str = str + ";";
724 | }
725 | }
726 | str = str.slice(0, -1);
727 | return str;
728 | }
729 |
730 | function addItem(client, id) {
731 | var item = meme(Number(id));
732 | var newItem = {
733 | ID: item["Id"],
734 | IsUsed: 0,
735 | IsLimited: 0,
736 | GoodID: item["Id"],
737 | Date: "2018-12-28T19:50:31.107",
738 | MediaResourceID: item["MRId"],
739 | TextResourceID: item["TRId"]
740 | };
741 | var newBg = {
742 | ID: item["Id"],
743 | IsUsed: 0,
744 | IsLimited: 0
745 | };
746 | if (item["Id"] != "undefined") {
747 | if (item["LayerId"] == 36) {
748 | client.inv[0].push(newItem);
749 | } else if (item["LayerId"] == 45) {
750 | client.inv[1].push(newItem);
751 | } else if (item["LayerId"] == 31) {
752 | client.inv[2].push(newItem);
753 | } else if (item["LayerId"] == 11) {
754 | client.inv[3].push(newItem);
755 | } else if (item["LayerId"] == 56) {
756 | client.inv[4].push(newItem);
757 | } else if (item["LayerId"] == 27) {
758 | client.inv[5].push(newItem);
759 | } else if (item["LayerId"] == 57) {
760 | client.inv[6].push(newItem);
761 | } else if (item["LayerId"] == 85) {
762 | client.backgroundID = newBg["ID"];
763 | client.bginv[0].push(newBg);
764 | setBg(client.ticket, newBg["ID"]);
765 | } else {
766 | trace("[WARN] This item [" + ret + "] doesn't exists!");
767 | }
768 | }
769 | updatebgInventory(client.ticket, client.bginv);
770 | updateInventory(client.ticket, client.inv);
771 | return;
772 | }
773 | client.$ = function(methodName, descr, calledRoomId, arguments, callback) {
774 | var now = new Date();
775 | if (now.getTime() - client.lastTickC < 300) client.failedCticks++;
776 | if (client.failedCticks >= 10) {
777 | trace('[KICK] Kicked user ' + client.userObj["User"]["Name"] + ' (Global cooldown)');
778 | application.disconnect(client);
779 | return;
780 | }
781 | client.lastTickC = now.getTime();
782 | if (methodName == "_QV") {
783 | return true;
784 | } else if (methodName == "_QF") {
785 | return true;
786 | } else if (methodName == "_LC") {
787 | for (var changes in arguments[1]) {
788 | trace(changes);
789 | for (var changed in arguments[1][changes]) {
790 | trace(changed + " ### " + arguments[1][changes][changed]);
791 | for (var e in arguments[1][changes][changed]) {
792 | trace(e + " #### " + arguments[1][changes][changed][e]);
793 | if (changes == "Remove") {
794 | var harr = hStrToArr(client.houseStr);
795 | for (var i = 0; i < harr.length; i++) {
796 | trace(harr[i]['ID'] + "harry");
797 | if (harr[i]['ID'] == changed) {
798 | trace("found!!");
799 | harr[i] = undefined;
800 | client.houseStr = hObjToStr(harr);
801 | }
802 | }
803 | } else if (changes == "Change") {
804 | var houseArr = hStrToArr(client.houseStr);
805 | for (var i = 0; i < houseArr.length; i++) {
806 | if (houseArr[i]['ID'] == changed) {
807 | houseArr[i]['x'] = arguments[1][changes][changed]['x'];
808 | houseArr[i]['y'] = arguments[1][changes][changed]['y'];
809 | client.houseStr = hObjToStr(houseArr);
810 | trace("new str: " + client.houseStr);
811 | }
812 | }
813 | } else if (changes == "Add") {
814 | var ek = [arguments[1][changes][changed]];
815 | client.houseStr = client.houseStr + hObjToStr(ek);
816 | }
817 | }
818 | }
819 | }
820 | if (descr == "ROOM") {
821 | for (var i = 0; i < application.clients.length; i++) {
822 | application.clients[i].call("_LC", null, client.smeshID, arguments[1], arguments[2]);
823 | }
824 | }
825 | } else if (methodName == "_SCA") {
826 | return true;
827 | } else if (methodName == "_QI") {
828 | return "0";
829 | } else if (methodName == "_NUC") {
830 | if (client.role >= 131086) {
831 | var ban = new LoadVars();
832 | ban.id = arguments[0];
833 | ban.ticket = client.ticket;
834 | ban.send(msHost + "/ban.php");
835 | for (var i = 0; i < application.clients.length; i++) {
836 | if (application.clients[i].smeshID == arguments[0]) {
837 | trace('[BAN] Banned user ' + application.clients[i].userObj["User"]["Name"] + ' (Using profile button) by ' + client.userObj["User"]["Name"]);
838 | application.clients[i].call("_NUB", null, arguments[0], 162);
839 | }
840 | }
841 | }
842 | } else if (methodName == "_WAR") {
843 | if (client.role >= 131086) {
844 | for (var i = 0; i < application.clients.length; i++) {
845 | if (application.clients[i].smeshID == arguments) {
846 | trace('[KICK] Kicked user ' + application.clients[i].userObj["User"]["Name"] + ' (Using profile button) by ' + client.userObj["User"]["Name"]);
847 | application.disconnect(application.clients[i]);
848 | }
849 | }
850 | }
851 | } else if (methodName == "_BG") {} else if (methodName == "_SDB") {
852 | client.backgroundID = arguments[0];
853 | setBg(client.ticket, arguments[0]);
854 | } else if (methodName == "_GG") {
855 | if (gamesArray[arguments[0]]) {
856 | return gamesArray[arguments[0]];
857 | }
858 | } else if (methodName == "_GT") {
859 | // TODO
860 | //trace(arrayToString(arguments));
861 | /*var div = divisors[arguments[0]];
862 | trace(div);
863 | var aw = Math.round(Number(arguments[2])/div);
864 | trace(aw);
865 | addMoney(client.ticket,aw);
866 | return {"UsualTickets":aw,"PositiveEnergy":0};*/
867 | } else if (methodName == "_GS") {
868 | var scoreInTickets = arguments[1]; // баллы, сконверченные в смешинки
869 | addMoney(client.ticket, scoreInTickets);
870 | client.userObj["User"]["Money"] = Number(client.userObj["User"]["Money"]) + Number(scoreInTickets);
871 | client.call("_NNT", null, client.userObj["User"]["Money"], client.userObj["User"]["Gold"]);
872 | return {
873 | "UsualTickets": scoreInTickets,
874 | "PositiveEnergy": 0
875 | };
876 | } else if (methodName == "_UUG") {
877 | return arguments;
878 | } else if (methodName == "_SAG") {
879 | //return {NameTRId: , BestsaleGoodIds, Goods Id, DaysLeft};
880 | return {
881 | callback_uid: callback
882 | };
883 | } else if (methodName == "_GD") {
884 | return "0";
885 | } else if (methodName == "_CUR") {
886 | return H2CA(rc4("", "_level0"));
887 | } else if (methodName == "_MSTL") {
888 | return [];
889 | } else if (methodName == "_GD") {
890 | return "";
891 | } else if (methodName == "_GCI") {
892 | if (arguments == 4) {
893 | return ' ';
894 | }
895 | } else if (methodName == "_C") {
896 | trace("[CHAT] " + client.userObj["User"]["Name"] + ": " + arguments[1]);
897 | if (arguments[1].length <= 100) {
898 | if ((arguments[1] == "/s:0" || arguments[1] == "/s:1") && client.userObj["User"]["RoleFlags"] < 131086) return;
899 | if (arguments[1].indexOf("/setlvl ") > -1) {
900 | var ret = arguments[1].replace("/setlvl ", "");
901 | var lvllv = new LoadVars();
902 | lvllv.id = client.smeshID;
903 | lvllv.level = ret;
904 | lvllv.sendAndLoad(msHost + "/setLevel.php", lvllv);
905 | lvllv.onData = function(data) {
906 | if (data == 'error') return;
907 | client.userObj["User"]["Level"] = data;
908 | for (var i = 0; i < application.clients.length; i++) {
909 | if (application.clients[i].location == client.location) {
910 | application.clients[i].call("_D", null, client.smeshID, client.userObj);
911 | }
912 | }
913 | }
914 | return;
915 | } else if (arguments[1].indexOf("$G$") > -1) {
916 | var ret = arguments[1].replace("$G$", "");
917 | var m = Number(ret);
918 | var item = meme(Number(ret));
919 | var newItem = {
920 | ID: item["Id"],
921 | IsUsed: 0,
922 | IsLimited: 0,
923 | GoodID: item["Id"],
924 | Date: "2018-12-28T19:50:31.107",
925 | MediaResourceID: item["MRId"],
926 | TextResourceID: item["TRId"]
927 | };
928 | var newBg = {
929 | ID: item["Id"],
930 | IsUsed: 0,
931 | IsLimited: 0
932 | };
933 | if (item["Id"] != "undefined") {
934 | if (item["LayerId"] == 36) {
935 | client.inv[0].push(newItem);
936 | } else if (item["LayerId"] == 45) {
937 | client.inv[1].push(newItem);
938 | } else if (item["LayerId"] == 31) {
939 | client.inv[2].push(newItem);
940 | } else if (item["LayerId"] == 11) {
941 | client.inv[3].push(newItem);
942 | } else if (item["LayerId"] == 56) {
943 | client.inv[4].push(newItem);
944 | } else if (item["LayerId"] == 27) {
945 | client.inv[5].push(newItem);
946 | } else if (item["LayerId"] == 57) {
947 | client.inv[6].push(newItem);
948 | } else if (item["LayerId"] == 85) {
949 | client.backgroundID = newBg["ID"];
950 | client.bginv[0].push(newBg);
951 | setBg(client.ticket, newBg["ID"]);
952 | } else {
953 | trace("[WARN] This item [" + ret + "] doesn't exists!");
954 | }
955 | }
956 | updatebgInventory(client.ticket, client.bginv);
957 | updateInventory(client.ticket, client.inv);
958 | return;
959 | } else if (arguments[1].indexOf("/addmoney ") > -1) {
960 | var ret = arguments[1].replace("/addmoney ", "");
961 | addMoney(client.ticket, ret);
962 | client.userObj["User"]["Money"] = Number(client.userObj["User"]["Money"]) + Number(ret);
963 | client.call("_NNT", null, client.userObj["User"]["Money"], client.userObj["User"]["Gold"]);
964 | return;
965 | } else if (arguments[1].indexOf("/addgold ") > -1) {
966 | var ret = arguments[1].replace("/addgold ", "");
967 | addGold(client.ticket, ret);
968 | client.userObj["User"]["Gold"] = Number(client.userObj["User"]["Gold"]) + Number(ret);
969 | client.call("_NNT", null, client.userObj["User"]["Money"], client.userObj["User"]["Gold"]);
970 | return;
971 | } else if (arguments[1].indexOf("/kick") > -1) {
972 | if (client.userObj['User']['RoleFlags'] < 131086) return;
973 | var ret = arguments[1].replace("/kick ", "");
974 | for (i = 0; i < application.clients.length; i++) {
975 | if (application.clients[i].userObj["User"]["Name"] == ret) {
976 | trace('[KICK] Kicked user ' + application.clients[i].userObj["User"]["Name"] + ' (Using command) by ' + client.userObj["User"]["Name"]);
977 | application.disconnect(application.clients[i]);
978 | }
979 | }
980 | return;
981 | }
982 | for (var i = 0; i < application.clients.length; i++) {
983 | if (application.clients[i].location == client.location) {
984 | application.clients[i].call("_C", null, client.smeshID, arguments[1]);
985 | }
986 | }
987 | }
988 | } else if (methodName == "_AS") {
989 | //
990 | //trace([0]["BodyParts"][0]["Id"]);
991 | //"18108": { IsBodyPart: false, MediaResourceID: 464, GoodID: 38, GoodTypeID: 4, Id: 18108, LayerID: 45}
992 | for (i = 0; i < arguments[0]["BodyParts"].length; i++) {
993 | if (bodyParts[arguments[0]["BodyParts"][i]["Id"]]["BodyPartTypeId"] == 3) {
994 | client.body_color = arguments[0]["BodyParts"][i]["Color"];
995 | } else if (bodyParts[arguments[0]["BodyParts"][i]["Id"]]["BodyPartTypeId"] == 2) {
996 | client.legs = bodyParts[arguments[0]["BodyParts"][i]["Id"]]["Id"];
997 | client.legs_color = arguments[0]["BodyParts"][i]["Color"];
998 | } else if (bodyParts[arguments[0]["BodyParts"][i]["Id"]]["BodyPartTypeId"] == 8) {
999 | client.ears = bodyParts[arguments[0]["BodyParts"][i]["Id"]]["Id"];
1000 | client.ears_color = arguments[0]["BodyParts"][i]["Color"];
1001 | client.horns = 0;
1002 | } else if (bodyParts[arguments[0]["BodyParts"][i]["Id"]]["BodyPartTypeId"] == 7) {
1003 | client.eyes = bodyParts[arguments[0]["BodyParts"][i]["Id"]]["Id"];
1004 | } else if (bodyParts[arguments[0]["BodyParts"][i]["Id"]]["BodyPartTypeId"] == 6) {
1005 | client.nose = bodyParts[arguments[0]["BodyParts"][i]["Id"]]["Id"];
1006 | client.peak = 0;
1007 | } else if (bodyParts[arguments[0]["BodyParts"][i]["Id"]]["BodyPartTypeId"] == 5) {
1008 | client.mouth = bodyParts[arguments[0]["BodyParts"][i]["Id"]]["Id"];
1009 | client.peak = 0;
1010 | } else if (bodyParts[arguments[0]["BodyParts"][i]["Id"]]["BodyPartTypeId"] == 11) {
1011 | client.peak = bodyParts[arguments[0]["BodyParts"][i]["Id"]]["Id"];
1012 | client.nose = 0;
1013 | client.mouth = 0;
1014 | } else {
1015 | client.horns = bodyParts[arguments[0]["BodyParts"][i]["Id"]]["Id"];
1016 | client.ears = 0;
1017 | }
1018 | }
1019 | var test = getBody(arguments[0]);
1020 | var changes = arguments[0];
1021 | var lv = new LoadVars();
1022 | lv.body_color = client.body_color;
1023 | lv.ears_color = client.ears_color;
1024 | lv.ears = client.ears;
1025 | lv.legs = client.legs;
1026 | lv.legs_color = client.legs_color;
1027 | lv.eyes = client.eyes;
1028 | lv.horns = client.horns;
1029 | lv.peak = client.peak;
1030 | lv.nose = client.nose;
1031 | lv.mouth = client.mouth;
1032 | lv.token = client.ticket;
1033 | lv.send(msHost + "/saveBody.php");
1034 | for (var i = 0; i < 7; i++) {
1035 | for (var itemId = 1; itemId < client.inv[i].length; itemId++) {
1036 | if (client.inv[i][itemId] != undefined) {
1037 | client.inv[i][itemId]["IsUsed"] = "0";
1038 | }
1039 | }
1040 | }
1041 | for (var i = 0; i < changes["Inventory"].length; i++) {
1042 | var Id = changes["Inventory"][i]["Id"];
1043 | var well = meme(changes["Inventory"][i]["Id"]);
1044 | for (var id = 0; id < 7; id++) {
1045 | for (var m = 0; m < client.inv[id].length; m++) {
1046 | if (client.inv[id][m] != undefined && client.inv[id][m]["ID"] == Id) {
1047 | client.inv[id][m]["IsUsed"] = "1";
1048 | }
1049 | }
1050 | }
1051 | }
1052 | client.userObj["User"]["Body"] = test["User"]["Body"];
1053 | updateInventory(client.ticket, client.inv);
1054 | var lv = new LoadVars();
1055 | lv.avatar = pseudoArrayToNOCTMML(client.userObj['User']['Body']);
1056 | lv.ticket = client.ticket;
1057 | lv.send(msHost + "/setAvatar.php");
1058 | for (var i = 0; i < application.clients.length; i++) {
1059 | if (application.clients[i].location == client.location) {
1060 | application.clients[i].call("_D", null, client.smeshID, client.userObj);
1061 | }
1062 | }
1063 | return callback;
1064 | } else if (methodName == "_CAQ") {
1065 | return {
1066 | "2": {
1067 | "0": "1",
1068 | "1": "esme"
1069 | }
1070 | };
1071 | } else if (methodName == "_VC") {
1072 | if (travelPlaces[arguments[0]]) {
1073 | return travelPlaces[arguments[0]];
1074 | }
1075 | } else if (methodName == "_FL") {
1076 | return ' ';
1077 | } else if (methodName == "_AG") {
1078 | var legs = [{
1079 | ID: 55,
1080 | IsColorable: 1,
1081 | BodyPartId: 1
1082 | }, {
1083 | ID: 62,
1084 | IsColorable: 0,
1085 | BodyPartId: 22
1086 | }, {
1087 | ID: 66,
1088 | IsColorable: 1,
1089 | BodyPartId: 28
1090 | }, {
1091 | ID: 71,
1092 | IsColorable: 0,
1093 | BodyPartId: 36
1094 | }, {
1095 | ID: 75,
1096 | IsColorable: 0,
1097 | BodyPartId: 41
1098 | }, {
1099 | ID: 80,
1100 | IsColorable: 1,
1101 | BodyPartId: 48
1102 | }, {
1103 | ID: 86,
1104 | IsColorable: 1,
1105 | BodyPartId: 57
1106 | }, {
1107 | ID: 92,
1108 | IsColorable: 1,
1109 | BodyPartId: 65
1110 | }];
1111 | var ears = [{
1112 | ID: 78,
1113 | IsColorable: 1,
1114 | BodyPartId: 45
1115 | }, {
1116 | ID: 84,
1117 | IsColorable: 1,
1118 | BodyPartId: 54
1119 | }, {
1120 | ID: 90,
1121 | IsColorable: 1,
1122 | BodyPartId: 62
1123 | }, {
1124 | ID: 95,
1125 | IsColorable: 1,
1126 | BodyPartId: 68
1127 | }, {
1128 | ID: 96,
1129 | IsColorable: 1,
1130 | BodyPartId: 71
1131 | }, {
1132 | ID: 97,
1133 | IsColorable: 1,
1134 | BodyPartId: 72
1135 | }, {
1136 | ID: 98,
1137 | IsColorable: 0,
1138 | BodyPartId: 73
1139 | }, {
1140 | ID: 25881,
1141 | IsColorable: 1,
1142 | BodyPartId: 93
1143 | }, {
1144 | ID: 25879,
1145 | IsColorable: 1,
1146 | BodyPartId: 91
1147 | }, {
1148 | ID: 25880,
1149 | IsColorable: 1,
1150 | BodyPartId: 92
1151 | }];
1152 | var eyes = [{
1153 | ID: 59,
1154 | BodyPartId: 13
1155 | }, {
1156 | ID: 61,
1157 | BodyPartId: 21
1158 | }, {
1159 | ID: 65,
1160 | BodyPartId: 27
1161 | }, {
1162 | ID: 70,
1163 | BodyPartId: 35
1164 | }, {
1165 | ID: 74,
1166 | BodyPartId: 40
1167 | }, {
1168 | ID: 79,
1169 | BodyPartId: 47
1170 | }, {
1171 | ID: 85,
1172 | BodyPartId: 56
1173 | }, {
1174 | ID: 91,
1175 | BodyPartId: 64
1176 | }, {
1177 | ID: 25867,
1178 | BodyPartId: 80
1179 | }, {
1180 | ID: 25870,
1181 | BodyPartId: 83
1182 | }, {
1183 | ID: 25869,
1184 | BodyPartId: 82
1185 | }, {
1186 | ID: 25868,
1187 | BodyPartId: 81
1188 | }];
1189 | var noses = [{
1190 | ID: 58,
1191 | BodyPartId: 12
1192 | }, {
1193 | ID: 68,
1194 | BodyPartId: 31 //used
1195 | }, {
1196 | ID: 82,
1197 | BodyPartId: 50
1198 | }, {
1199 | ID: 88,
1200 | BodyPartId: 59
1201 | }, {
1202 | ID: 94,
1203 | BodyPartId: 67
1204 | }, {
1205 | ID: 25874,
1206 | BodyPartId: 86
1207 | }];
1208 | var mouthes = [{
1209 | ID: 57,
1210 | BodyPartId: 4
1211 | }, {
1212 | ID: 67,
1213 | BodyPartId: 30 //used
1214 | }, {
1215 | ID: 81,
1216 | BodyPartId: 49
1217 | }, {
1218 | ID: 87,
1219 | BodyPartId: 58
1220 | }, {
1221 | ID: 93,
1222 | BodyPartId: 66
1223 | }, {
1224 | ID: 25878,
1225 | BodyPartId: 90
1226 | }, {
1227 | ID: 25877,
1228 | BodyPartId: 89
1229 | }, {
1230 | ID: 25876,
1231 | BodyPartId: 88
1232 | }, {
1233 | ID: 25875,
1234 | BodyPartId: 87
1235 | }];
1236 | var peaks = [{
1237 | ID: 63,
1238 | BodyPartId: 23
1239 | }, {
1240 | ID: 72,
1241 | BodyPartId: 37
1242 | }, {
1243 | ID: 76,
1244 | BodyPartId: 42
1245 | }, {
1246 | ID: 25872,
1247 | BodyPartId: 84
1248 | }, {
1249 | ID: 25873,
1250 | BodyPartId: 85
1251 | }];
1252 | var horns = [{
1253 | ID: 99,
1254 | BodyPartId: 74
1255 | }, {
1256 | ID: 100,
1257 | BodyPartId: 75
1258 | }, {
1259 | ID: 101,
1260 | BodyPartId: 76
1261 | }, {
1262 | ID: 102,
1263 | BodyPartId: 77
1264 | }, {
1265 | ID: 103,
1266 | BodyPartId: 78
1267 | }]
1268 | var ret = ' ';
1269 | for (i = 0; i < legs.length; i++) {
1270 | var IsUsed = 0;
1271 | var color = '';
1272 | if (legs[i].ID == client.legs) IsUsed = 1;
1273 | if (legs[i].IsColorable == 1) color = 'Color="' + client.legs_color + '" ';
1274 | ret += ' ';
1275 | }
1276 | ret += '';
1277 | for (i = 0; i < ears.length; i++) {
1278 | var IsUsed = 0;
1279 | var color = '';
1280 | if (ears[i].ID == client.ears) IsUsed = 1;
1281 | if (ears[i].IsColorable == 1) color = 'Color="' + client.ears_color + '" ';
1282 | ret += ' ';
1283 | }
1284 | ret += '';
1285 | for (i = 0; i < eyes.length; i++) {
1286 | var IsUsed = 0;
1287 | if (eyes[i].ID == client.eyes) IsUsed = 1;
1288 | ret += ' ';
1289 | }
1290 | ret += '';
1291 | for (i = 0; i < noses.length; i++) {
1292 | var IsUsed = 0;
1293 | if (noses[i].ID == client.nose) IsUsed = 1;
1294 | ret += ' ';
1295 | }
1296 | ret += '';
1297 | for (i = 0; i < mouthes.length; i++) {
1298 | var IsUsed = 0;
1299 | if (mouthes[i].ID == client.mouth) IsUsed = 1;
1300 | ret += ' ';
1301 | }
1302 | ret += '';
1303 | for (i = 0; i < peaks.length; i++) {
1304 | var IsUsed = 0;
1305 | if (peaks[i].ID == client.peak) IsUsed = 1;
1306 | ret += ' ';
1307 | }
1308 | ret += '';
1309 | for (i = 0; i < horns.length; i++) {
1310 | var IsUsed = 0;
1311 | if (horns[i].ID == client.horns) IsUsed = 1;
1312 | ret += ' ';
1313 | }
1314 | ret += '' + makeXML(client.inv) + ' ' + makebgXML(client.bginv[0]) + ' ';
1315 | return ret;
1316 | } else if (methodName == "_UI") {
1317 | for (var i = 0; i < application.clients.length; i++) {
1318 | if (application.clients[i].smeshID == arguments) {
1319 | var cl = application.clients[i];
1320 | }
1321 | }
1322 | return '' + avaToXML(cl.userObj["User"]["Body"]) + '';
1323 | } else if (methodName == "_NUM") {
1324 | for (var i = 0; i < application.clients.length; i++) {
1325 | if (application.clients[i].location == client.location) {
1326 | application.clients[i].call("_NUM", null, arguments[0], arguments[1], arguments[2]);
1327 | }
1328 | }
1329 | } else if (methodName == "_NUS") {
1330 | for (var i = 0; i < application.clients.length; i++) {
1331 | if (application.clients[i].location == client.location) {
1332 | application.clients[i].call("_NUS", null, client.smeshID, arguments[1], arguments[2], arguments[3], arguments[4]);
1333 | }
1334 | }
1335 | } else if (methodName == "_I") {
1336 | var magicXML = '';
1337 | for (var i = 1; i < 340; i++) {
1338 | magicXML += ' ';
1339 | }
1340 | var smilesXML = '';
1341 | for(var i = 1; i < 757; i++) {
1342 | smilesXML += ' ';
1343 | }
1344 | var putin = [H2CA(rc4('' + avaToXML(client.userObj["User"]["Body"]) + '' + magicXML + '' + smilesXML + '', "_level0"))];
1345 | return putin;
1346 | } else if (methodName == "_UFG") {
1347 | var obj = {};
1348 | /*
1349 | var u = client.ufg.split("|");
1350 |
1351 | for (var i = 0; i < u.length; i++) {
1352 | var s = u[i].split(",");
1353 | obj[s[0]] = {
1354 | userId: s[0],
1355 | UserName: s[1],
1356 | IsOnline: true
1357 | };
1358 | }
1359 | */
1360 | return obj;
1361 | } else if (methodName == "_UFR") {
1362 | var obj = {};
1363 | /*
1364 | var ufrstr = client.ufr.split("|");
1365 | for (var i = 0; i < ufrstr.length; i++) {
1366 | var splitted = ufrstr[i].split(",");
1367 | obj[i] = {
1368 | userId: 3,
1369 | UserName: splitted[1]
1370 | };
1371 | }
1372 | */
1373 | return obj;
1374 | } else if (methodName == "_CM") {
1375 | return "";
1376 | } else if (methodName == "_LDH") {
1377 | return ' ';
1378 | } else if (methodName == "_SNFP") {
1379 | return ' ';
1380 | } else if (methodName == "_D") {
1381 | for (var i = 0; i < application.clients.length; i++) {
1382 | if (application.clients[i].location == client.location) {
1383 | application.clients[i].call("_D", null, client.smeshID, client.userObj);
1384 | }
1385 | }
1386 | } else if (methodName == "_LGI") {
1387 | for (var i = 0; i < application.clients.length; i++) {
1388 | if (application.clients[i].location == client.location && application.clients[i].smeshID !== client.smeshID) {
1389 | application.clients[i].call("_UL", null, client.smeshID);
1390 | }
1391 | }
1392 | var locationId = arguments[0];
1393 |
1394 | // find location
1395 | for(var i in locationsArray) {
1396 | if(i == "garage") continue;
1397 | if(locationsArray[i].split('location ID="')[1].split('"')[0] == locationId) return locationsArray[i];
1398 | }
1399 |
1400 | for(var i in travelPlaces) {
1401 | if(travelPlaces[i].split('location ID="')[1].split('"')[0] == locationId) return travelPlaces[i];
1402 | }
1403 |
1404 | for(var i in spacePlaces) {
1405 | if(spacePlaces[i].split('location ID="')[1].split('"')[0] == locationId) return spacePlaces[i];
1406 | }
1407 |
1408 | return locationsArray[0];
1409 | } else if (methodName == "_LML") {
1410 | return '';
1411 | } else if (methodName == "_JD") {
1412 | // return ' ';
1413 | return locationsArray["garage"];
1414 | } else if (methodName == "_LG") {
1415 | for (var i = 0; i < application.clients.length; i++) {
1416 | if (application.clients[i].location == client.location && application.clients[i].smeshID !== client.smeshID) {
1417 | application.clients[i].call("_UL", null, client.smeshID);
1418 | }
1419 | }
1420 |
1421 | if (arguments[1] == -1) return locationsArray["-1"].replace("{uid}", client.smeshID);
1422 | if (arguments[1] == -2) return locationsArray["-2"].replace("{uid}", client.smeshID);
1423 |
1424 | if (locationsArray[arguments[1]] !== undefined) return locationsArray[arguments[1]];
1425 | return locationsArray[0];
1426 | } else if (methodName == "_UOG") {
1427 | // TODO: get UserOption (for ex. - volleyball_level)
1428 | return true;
1429 | } else if (methodName == "_GMB") {
1430 | return {
1431 | "Amount": 900000
1432 | };
1433 | } else if (methodName == "_MTB") {
1434 | return {
1435 | "Success": true
1436 | };
1437 | } else if (methodName == "_UOS") {
1438 | // TODO: set UserOption (for ex. - volleyball_level)
1439 | if (arguments == "SA_IsFirstStepPassed") {
1440 | return true;
1441 | }
1442 | client.call("_UOS", null, arguments);
1443 | } else if (methodName == "_UFO") {
1444 | return '0';
1445 | } else if (methodName == "_GOGI") {
1446 | return ' ';
1447 | } else if (methodName == "_ULNS") {
1448 | return true;
1449 | } else if (methodName == "_DA") {
1450 | return '';
1451 | } else if (methodName == "_GSD") {
1452 | return '';
1453 | } else if (methodName == "_GBG") {
1454 | return [];
1455 | } else if (methodName == "_BGB") {
1456 | for (var id in arguments[0][0]["item"]) {
1457 | var value = arguments[0][0]["item"][id];
1458 | trace(id + " = " + value);
1459 | }
1460 | if (arguments[0][0]["item"]["priceSm"] > client.userObj["User"]["Money"] || arguments[0][0]["item"]["priceRu"] > client.userObj["User"]["Gold"]) {
1461 | return {
1462 | Error: 1,
1463 | Result: ' ',
1464 | GoodInfo: 0,
1465 | MagicTickets: 0,
1466 | TRId: 0,
1467 | GoodTypeId: 0,
1468 | IsUnlock: true,
1469 | UsualTickets: 0,
1470 | GoodId: 0,
1471 | GoodTypeTRId: 0,
1472 | BelongType: 0
1473 | };
1474 | }
1475 | client.userObj["User"]["Money"] = client.userObj["User"]["Money"] - arguments[0][0]["item"]["priceSm"];
1476 | client.userObj["User"]["Gold"] = client.userObj["User"]["Gold"] - arguments[0][0]["item"]["priceRu"];
1477 | client.call("_NNT", null, client.userObj["User"]["Money"], client.userObj["User"]["Gold"]);
1478 | if (arguments[0][0]["item"]["goodTypeId"] == 20) {
1479 | var tesb = {
1480 | ID: arguments[0][0]["item"]["id"],
1481 | AObjectTypeId: 1,
1482 | AObjectId: arguments[0][0]["item"]["id"],
1483 | AObjectRefTypeId: 20,
1484 | MediaResourceID: arguments[0][0]["item"]["MRid"],
1485 | TextResourceID: arguments[0][0]["item"]["TRid"],
1486 | IsActive: 0
1487 | };
1488 | homeInv.push(tesb);
1489 | } else {
1490 | var tesa = {
1491 | ID: arguments[0][0]["item"]["id"],
1492 | IsUsed: 0,
1493 | IsLimited: 0,
1494 | GoodID: arguments[0][0]["item"]["id"],
1495 | Date: "2018-12-28T19:50:31.107",
1496 | MediaResourceID: arguments[0][0]["item"]["MRid"],
1497 | TextResourceID: arguments[0][0]["item"]["TRid"]
1498 | };
1499 | var tesbg = {
1500 | ID: arguments[0][0]["item"]["id"],
1501 | IsUsed: 0,
1502 | IsLimited: 0
1503 | };
1504 | if (arguments[0][0]["item"]["layerId"] == 36) {
1505 | client.inv[0].push(tesa);
1506 | } else if (arguments[0][0]["item"]["layerId"] == 45) {
1507 | client.inv[1].push(tesa);
1508 | } else if (arguments[0][0]["item"]["layerId"] == 31) {
1509 | client.inv[2].push(tesa);
1510 | } else if (arguments[0][0]["item"]["layerId"] == 11) {
1511 | client.inv[3].push(tesa);
1512 | } else if (arguments[0][0]["item"]["layerId"] == 56) {
1513 | client.inv[4].push(tesa);
1514 | } else if (arguments[0][0]["item"]["layerId"] == 27) {
1515 | client.inv[5].push(tesa);
1516 | } else if (arguments[0][0]["item"]["layerId"] == 57) {
1517 | client.inv[6].push(tesa);
1518 | } else if (arguments[0][0]["item"]["layerId"] == 85) {
1519 | client.backgroundID = tesbg["ID"];
1520 | client.bginv[0].push(tesbg);
1521 | setBg(client.ticket, tesbg["ID"]);
1522 | }
1523 | }
1524 | updatebgInventory(client.ticket, client.bginv);
1525 | updateInventory(client.ticket, client.inv);
1526 | spendMoney(client.ticket, arguments[0][0]["item"]["priceSm"], arguments[0][0]["item"]["priceRu"]);
1527 | return {
1528 | Error: 0,
1529 | Result: ' ',
1530 | GoodInfo: 0,
1531 | MagicTickets: 0,
1532 | TRId: 0,
1533 | GoodTypeId: 0,
1534 | IsUnlock: true,
1535 | UsualTickets: 0,
1536 | GoodId: 0,
1537 | GoodTypeTRId: 0,
1538 | BelongType: 0
1539 | };
1540 | }
1541 | }
1542 | client._SCD = function() {
1543 | return new Date();
1544 | }
1545 | }
1546 | application.onDisconnect = function(client) {
1547 | trace('[DISCONNECT] ' + client.userObj["User"]["Name"]);
1548 | for (var i = 0; i < application.clients.length; i++) {
1549 | if (application.clients[i].location == client.location && application.clients[i].smeshID !== client.smeshID) {
1550 | application.clients[i].call("_UL", null, client.smeshID);
1551 | }
1552 | }
1553 | }
1554 |
1555 | function arrayToString(array) {
1556 | var ret = "";
1557 | for (var t = 0; t < array.length; t++) {
1558 | ret += array[t] + ", ";
1559 | }
1560 | return ret;
1561 | }
1562 |
--------------------------------------------------------------------------------
/dump.sql:
--------------------------------------------------------------------------------
1 | -- phpMyAdmin SQL Dump
2 | -- version 4.7.7
3 | -- https://www.phpmyadmin.net/
4 |
5 |
6 | SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
7 | SET AUTOCOMMIT = 0;
8 | START TRANSACTION;
9 | SET time_zone = "+00:00";
10 |
11 |
12 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
13 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
14 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
15 | /*!40101 SET NAMES utf8mb4 */;
16 |
17 |
18 | -- --------------------------------------------------------
19 |
20 | --
21 | -- Структура таблицы `USERS`
22 | --
23 |
24 | CREATE TABLE `users` (
25 | `ID` int(11) NOT NULL,
26 | `USERNAME` varchar(255) COLLATE utf8mb4_bin NOT NULL,
27 | `PASSWORD` varchar(255) COLLATE utf8mb4_bin NOT NULL,
28 | `AVATAR` varchar(10000) COLLATE utf8mb4_bin NOT NULL,
29 | `INVENTORY` longtext COLLATE utf8mb4_bin NOT NULL,
30 | `REGDATE` varchar(255) COLLATE utf8mb4_bin NOT NULL,
31 | `LEVEL` varchar(255) COLLATE utf8mb4_bin NOT NULL,
32 | `TICKET` varchar(255) COLLATE utf8mb4_bin NOT NULL,
33 | `ROLEFLAGS` int(11) NOT NULL,
34 | `ISBANNED` int(11) NOT NULL DEFAULT 0,
35 | `MONEY` int(11) NOT NULL DEFAULT 100,
36 | `GOLD` int(11) NOT NULL DEFAULT 0,
37 | `MAGIC` int(11) NOT NULL DEFAULT 0,
38 | `BG` varchar(255) NOT NULL DEFAULT 339,
39 | `BGInv` longtext COLLATE utf8mb4_bin NOT NULL,
40 | `BODY_COLOR` int(11) NOT NULL DEFAULT '16762375',
41 | `LEGS` int(11) NOT NULL DEFAULT '55',
42 | `LEGS_COLOR` int(11) NOT NULL DEFAULT '16762375',
43 | `EARS` int(11) NOT NULL DEFAULT '98',
44 | `EARS_COLOR` int(11) NOT NULL DEFAULT '16762375',
45 | `EYES` int(11) NOT NULL DEFAULT '91',
46 | `NOSE` int(11) NOT NULL DEFAULT '68',
47 | `MOUTH` int(11) NOT NULL DEFAULT '67',
48 | `PEAK` int(11) NOT NULL DEFAULT '0',
49 | `HORNS` int(11) NOT NULL DEFAULT '0',
50 | `HOUSE_ID` int(11) NOT NULL DEFAULT '708',
51 | `HOUSE_STR` longtext COLLATE utf8mb4_bin
52 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
53 |
54 | --
55 | -- Рндексы сохранённых таблиц
56 | --
57 |
58 | --
59 | -- Рндексы таблицы `USERS`
60 | --
61 | ALTER TABLE `users`
62 | ADD PRIMARY KEY (`ID`),
63 | ADD UNIQUE KEY `ID` (`ID`),
64 | ADD KEY `ID_2` (`ID`);
65 |
66 | --
67 | -- AUTO_INCREMENT для сохранённых таблиц
68 | --
69 |
70 | --
71 | -- AUTO_INCREMENT для таблицы `USERS`
72 | --
73 | ALTER TABLE `users`
74 | MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10000;
75 | COMMIT;
76 |
77 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
78 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
79 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
80 |
--------------------------------------------------------------------------------
/front/.htaccess:
--------------------------------------------------------------------------------
1 |
2 | RewriteEngine On
3 | RewriteRule ^fs/(.*)!(.*).swf$ /fs/$1.swf
4 | RewriteRule ^fs/(.*)!(.*).png$ /fs/$1.png
5 | RewriteRule ^fs/(.*)!.swf$ /fs/$1.swf
6 | RewriteRule ^async/ServerAction ServerAction.php
7 | RewriteRule ^async/Ping ping.php
8 | RewriteRule ^logout logout.php
9 | Options -Indexes
10 |
11 |
--------------------------------------------------------------------------------
/front/ServerAction.php:
--------------------------------------------------------------------------------
1 | ';
58 |
59 | $domain = (in_array($_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'])) ? 'localhost' : $_SERVER["SERVER_ADDR"];
60 | $serversList = ' ';
61 |
62 | $query = $dbh->prepare("SELECT * FROM users WHERE ID = :id");
63 | $query->bindParam('id', $_SESSION['userId']);
64 | $query->execute();
65 | $fetched = $query->fetch(PDO::FETCH_ASSOC);
66 |
67 | $ud = "";
68 | if ($fetched['ISBANNED'] == 1)
69 | {
70 | $ud = 'BanDateExpired="31-12-9999 23:59:59" BanTextResourceID="162"';
71 | }
72 |
73 | $userData = '';
74 | $system = '';
75 |
76 | echo '
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 | ';
132 |
--------------------------------------------------------------------------------
/front/cabinet.js:
--------------------------------------------------------------------------------
1 | $("form").submit(function(e){
2 | e.preventDefault();
3 |
4 | $.post("/cabinetHandler.php", $("form").serialize(), function(data){
5 | $(".message").html(data);
6 | });
7 | });
--------------------------------------------------------------------------------
/front/cabinet.php:
--------------------------------------------------------------------------------
1 | prepare("SELECT * FROM users WHERE ID = :id");
10 | $query->bindParam('id', $_SESSION['userId']);
11 | $query->execute();
12 | $fetched = $query->fetch(PDO::FETCH_ASSOC);
13 |
14 | $level = $fetched['LEVEL'];
15 | $dat = explode("T", $fetched['REGDATE'])[0];
16 | $date = explode("-", $dat);
17 | $regday = $date[2];
18 | $regmonth = $date[1];
19 | $regyear = $date[0];
20 | ?>
21 |
22 |
23 |
24 |
25 |
26 | Личный кабинет - DD++
27 |
28 |
29 |
30 |
31 |
32 | Кабинет
33 |
34 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/front/cabinetHandler.php:
--------------------------------------------------------------------------------
1 | 5)
14 | {
15 | echo $errlvllen;
16 | }
17 | else
18 | {
19 | if (preg_match("/[^a-z,A-Z,0-9,а-я,А-Я,\_]/u", $_POST["level"]))
20 | {
21 | echo $errlvlreg;
22 | }
23 | else
24 | {
25 | if (!checkdate((int)$_POST["regmonth"], (int)$_POST["regday"], (int)$_POST["regyear"]))
26 | {
27 | echo $errdate;
28 | }
29 | else
30 | {
31 | $getRegDate = $dbh->prepare("SELECT REGDATE FROM users WHERE ID = :id");
32 | $getRegDate->bindParam('id', $_SESSION['userId']);
33 | $getRegDate->execute();
34 | $previousRegdate = $getRegDate->fetch(PDO::FETCH_ASSOC)['REGDATE'];
35 |
36 | $level = $_POST["level"];
37 | $regdate = $_POST["regyear"] . "-" . $_POST["regmonth"] . "-" . $_POST["regday"] . "T" . explode("T", $previousRegdate)[1];
38 |
39 | $query = $dbh->prepare("UPDATE users SET LEVEL = :lvl, REGDATE = :regdate WHERE ID = :id");
40 | $query->bindParam('lvl', $level);
41 | $query->bindParam('regdate', $regdate);
42 | $query->bindParam('id', $_SESSION['userId']);
43 | $query->execute();
44 | echo "ОК, данные обновлены!";
45 | }
46 | }
47 | }
48 | ?>
49 |
--------------------------------------------------------------------------------
/front/crossdomain.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/front/db_connection.php:
--------------------------------------------------------------------------------
1 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
12 | }
13 | catch(PDOException $e)
14 | {
15 | echo 'Ошибка! Попробуйте зайти в следующий раз!';
16 | die;
17 | }
18 |
--------------------------------------------------------------------------------
/front/game.css:
--------------------------------------------------------------------------------
1 | @import url(//db.onlinewebfonts.com/c/14b88c7fdb0ca4ae352143a8a1ea2c43?family=RotondaC);
2 | * {
3 | font-family: "RotondaC";
4 | }
5 | .meow-btn {
6 | background: #8acbe5;
7 | padding: 14px;
8 | font-size: 17pt;
9 | border: none;
10 | color: black;
11 | border: 1px solid white;
12 | }
13 | a.meow-btn {
14 | text-decoration: none;
15 | }
16 | .logo {
17 | width: 15%;
18 | }
19 |
--------------------------------------------------------------------------------
/front/game.php:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 | DD++
15 |
16 |
17 |
18 |
19 |
20 |
25 | Кабинет
26 | Выйти
27 |
28 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/front/index.php:
--------------------------------------------------------------------------------
1 | prepare("SELECT ID, PASSWORD, ROLEFLAGS FROM users WHERE USERNAME = :uname");
23 | $a->bindParam('uname', $_POST['username']);
24 | $a->execute();
25 | $fetched = $a->fetch(PDO::FETCH_ASSOC);
26 | if (!$fetched) {
27 | $error = "Нет такого смешарика";
28 | } else {
29 | if (password_verify(md5($_POST["password"]), $fetched["PASSWORD"])) {
30 | $token = generateTicket();
31 |
32 | $updTik = $dbh->prepare("UPDATE users SET TICKET = :token WHERE USERNAME = :uname;");
33 | $updTik->bindParam('token', $token);
34 | $updTik->bindParam('uname', $_POST["username"]);
35 | $updTik->execute();
36 |
37 | $_SESSION["userId"] = (int)$fetched["ID"];
38 | $_SESSION["ticket"] = $token;
39 | $_SESSION["roleflags"] = (int)$fetched["ROLEFLAGS"];
40 | header("Location: /");
41 | } else {
42 | $error = "Неправильный пароль";
43 | }
44 | }
45 | }
46 | ?>
47 |
48 |
49 |
50 |
51 | Вход - DD++
52 |
53 |
54 |
55 |
56 |
57 |

58 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/front/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/123jjck/ddplusplus/4017a69e3a45ff4e1a15a2e51ffe634b9999f7b7/front/logo.png
--------------------------------------------------------------------------------
/front/logout.php:
--------------------------------------------------------------------------------
1 | ';
--------------------------------------------------------------------------------
/front/register.php:
--------------------------------------------------------------------------------
1 | 16) {
21 | $error = "Длинный логин";
22 | } else if(mb_strlen($password) < 6) {
23 | $error = "Короткий пароль";
24 | } else if(mb_strlen($password) > 32) {
25 | $error = "Длинный пароль";
26 | } else {
27 | $query = $dbh->prepare("SELECT * FROM users WHERE USERNAME = :nick");
28 | $query->bindParam('nick', $username);
29 | $query->execute();
30 | $userInfo = $query->fetch(PDO::FETCH_ASSOC);
31 | $error = $userInfo ? 'Игрок с таким ником уже существует' : false;
32 | }
33 | return $error;
34 | }
35 |
36 | if(isset($_POST['username'], $_POST['password'])) {
37 | $error = checkRegister($_POST['username'], $_POST['password'], $dbh);
38 | if(empty($error)) {
39 | $ava = "IsBodyPart>true|BodyPartTypeId>5|MediaResourceID>67|LayerID>25|BodyPartId>30|Id>30|Color>NaN;IsBodyPart>true|BodyPartTypeId>6|MediaResourceID>68|LayerID>39|BodyPartId>31|Id>31|Color>16762375;IsBodyPart>true|BodyPartTypeId>7|MediaResourceID>74|LayerID>29|BodyPartId>40|Id>40|Color>NaN;IsBodyPart>true|BodyPartTypeId>8|MediaResourceID>98|LayerID>49|BodyPartId>73|Id>73|Color>NaN;IsBodyPart>true|BodyPartTypeId>2|MediaResourceID>55|LayerID>9|BodyPartId>1|Id>1|Color>NaN;IsBodyPart>true|BodyPartTypeId>3|MediaResourceID>56|LayerID>19|BodyPartId>2|Id>2|Color>16762375;IsBodyPart>false|GoodID>8712|MediaResourceID>27527|GoodTypeID>4|LayerID>45|Id>8712;IsBodyPart>false|GoodID>9235|MediaResourceID>29235|GoodTypeID>94|LayerID>57|Id>9235";
40 | $inv = "";
41 | $hash = password_hash(md5($_POST["password"]), PASSWORD_DEFAULT);
42 | $date = date("Y-m-d") . "T" . date("H-i-s") . ".0";
43 | $ticket = generateTicket();
44 | $bginv = ';339;349;430;431;';
45 |
46 | $query = $dbh->prepare("INSERT INTO users(USERNAME, PASSWORD, ROLEFLAGS, LEVEL, AVATAR, TICKET, INVENTORY, REGDATE, BGInv) VALUES(:nick, :pass, :role, :lvl, :ava, :ticket, :inv, :regdate, :bginv);");
47 | $query->bindParam('nick', $_POST['username']);
48 | $query->bindParam('pass', $hash);
49 | $query->bindValue('role', 2);
50 | $query->bindValue('lvl', 999);
51 | $query->bindParam('ava', $ava);
52 | $query->bindParam('ticket', $ticket);
53 | $query->bindParam('inv', $inv);
54 | $query->bindParam('regdate', $date);
55 | $query->bindParam('bginv', $bginv);
56 | if(!$query->execute()) exit;
57 |
58 | $_SESSION["ticket"] = $ticket;
59 | $_SESSION["roleflags"] = 2;
60 | $_SESSION["userId"] = (int)$dbh->lastInsertId();
61 | header("Location: /");
62 | }
63 | }
64 | ?>
65 |
66 |
67 |
68 |
69 | Создать аккаунт - DD++
70 |
71 |
72 |
73 |
74 |
75 |

76 |
84 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/front/style.css:
--------------------------------------------------------------------------------
1 | @import url(//db.onlinewebfonts.com/c/14b88c7fdb0ca4ae352143a8a1ea2c43?family=RotondaC);
2 | * {
3 | font-family: "RotondaC";
4 | }
5 | small {
6 | font-size: 14pt;
7 | }
8 | .meow-btn {
9 | background: #8acbe5;
10 | padding: 1rem;
11 | font-size: 17pt;
12 | border: none;
13 | color: black;
14 | border: 1px solid white;
15 | }
16 | a.meow-btn {
17 | text-decoration: none;
18 | }
19 | .error {
20 | color: red;
21 | }
22 | .meow-btn:hover {
23 | cursor: pointer;
24 | background: #b4deee;
25 | }
26 | .logo {
27 | width: 300px;
28 | padding: 4rem;
29 | }
30 | input {
31 | font-size: 21pt;
32 | border: none;
33 | border-bottom: 2px solid #8acbe5;
34 | height: 50px;
35 | -webkit-transition: ease-in-out, width .35s ease-in-out;
36 | -o-transition: ease-in-out, width .35s ease-in-out;
37 | transition: ease-in-out, width .35s ease-in-out;
38 | }
39 | input:focus {
40 | border-color: #b4deee;
41 | }
42 | .loginbox {
43 | margin: auto;
44 | text-align: center;
45 | padding: 6px;
46 | width: 50%;
47 | }
48 | th,td {
49 | padding: 15px;
50 | text-align: left;
51 | }
52 | table {
53 | border-collapse: collapse;
54 | }
55 | table,th,td {
56 | border: 1px solid black;
57 | }
58 |
--------------------------------------------------------------------------------
/misc/minfs/fs.php:
--------------------------------------------------------------------------------
1 | 255) return false; // no mb_* since we check bytes
12 | $invalidCharacters = '|\'\\?*&<";:>+[]=/!';
13 | if (strpbrk($filename, $invalidCharacters) !== false) return false;
14 | $path_info = pathinfo('./' . $filename);
15 | if($path_info['extension'] !== 'swf' && $path_info['extension'] !== 'png' && $path_info['extension'] !== 'jpg') return false;
16 | return true;
17 | }
18 |
19 | function sendBack($filename) {
20 | switch(pathinfo('./' . $filename)['extension']) {
21 | case "swf":
22 | $content_type = "application/x-shockwave-flash";
23 | break;
24 | case "png":
25 | $content_type = "image/png";
26 | break;
27 | case "jpg":
28 | $content_type = "image/jpeg";
29 | break;
30 | default:
31 | $content_type = "application/octet-stream";
32 | }
33 | header("Content-Type: $content_type");
34 |
35 | $size = filesize('./' . $filename);
36 | header('Content-Length: ' . $size);
37 | header("Cache-control: public");
38 | header("Expires: " . gmdate("D, d M Y H:i:s", time() + 60*60*4) . " GMT");
39 | readfile('./' . $filename);
40 | }
41 |
42 | function detect_encoding($string) {
43 | static $list = array('utf-8', 'windows-1251');
44 |
45 | foreach ($list as $item) {
46 | $sample = iconv($item, $item, $string);
47 | if (md5($sample) == md5($string))
48 | return $item;
49 | }
50 | return null;
51 | }
52 |
53 | function check_exists($filename) {
54 | $filename = urldecode($filename); // на всякий случай
55 |
56 | if(detect_encoding($filename) == 'windows-1251') $filename = iconv('Windows-1251', 'UTF-8', $filename); // возможный фикс проблем с кодировкой на некоторых браузерах
57 |
58 | return file_exists("./" . $filename);
59 | }
60 |
61 | function check_404($filename) {
62 | $ch = curl_init();
63 | curl_setopt($ch, CURLOPT_URL, root . $filename);
64 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
65 | $res = curl_exec($ch);
66 | $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
67 |
68 | return $code == 404;
69 | }
70 |
71 | function download($filename) {
72 | $ch = curl_init();
73 | $file = fopen("./" . $filename, "w");
74 | curl_setopt($ch, CURLOPT_URL, root . $filename);
75 | curl_setopt($ch, CURLOPT_HEADER, 0);
76 | curl_setopt($ch, CURLOPT_BUFFERSIZE, 65536);
77 | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
78 | curl_setopt($ch, CURLOPT_NOPROGRESS, true);
79 | curl_setopt($ch, CURLOPT_FILE, $file);
80 | curl_exec($ch);
81 | }
82 |
83 | if(!validate_name(fname)) die;
84 |
85 | if(check_exists(fname)) {
86 | sendBack(fname);
87 | } else if(!check_404(fname)) {
88 | download(fname);
89 | sendBack(fname);
90 | } else {
91 | http_response_code(404);
92 | }
93 | ?>
94 |
--------------------------------------------------------------------------------
/misc/minfs/readme.md:
--------------------------------------------------------------------------------
1 | # Минимальное флеш-хранилище by Daisy and Jjck
2 |
3 | Минимальное флеш-хранилище позволит скачивать .swf файлы напрямую с серверов SharaBall по необходимости, экономив место и трафик
4 |
5 | # Установка
6 | 1. Переместите файл `fs.php` в директорию `/fs/` на вашем сайте
7 | 2. Замените всё содержимое файла `.htaccess` в корневой директории на это
8 | ```
9 |
10 | RewriteEngine On
11 | RewriteRule ^fs/(.*)!(.*).swf$ /fs/fs.php?filename=$1.swf
12 | RewriteRule ^fs/(.*)!(.*).png$ /fs/fs.php?filename=$1.png
13 | RewriteRule ^fs/(.*)!.swf$ /fs/fs.php?filename=$1.swf
14 | RewriteRule ^async/ServerAction ServerAction.php
15 | RewriteRule ^async/Ping ping.php
16 | RewriteRule ^logout logout.php
17 | Options -Indexes
18 |
19 | ```
20 | * Не забудьте [включить модуль cURL в PHP](https://stackoverflow.com/questions/1347146/howto-enable-curl-in-php-xampp)
21 |
--------------------------------------------------------------------------------
/misc/proxyfs/fs.php:
--------------------------------------------------------------------------------
1 | 255) return false; // no mb_* since we check bytes
7 | $invalidCharacters = '|\'\\?*&<";:>+[]=/!';
8 | if (strpbrk($filename, $invalidCharacters) !== false) return false;
9 | $path_info = pathinfo('./' . $filename);
10 | if($path_info['extension'] !== 'swf' && $path_info['extension'] !== 'png' && $path_info['extension'] !== 'jpg') return false;
11 | return true;
12 | }
13 |
14 | if(!validate_name($fname)) die;
15 |
16 | if (file_exists("./" . $fname)) { //возврат файла, если он существует локально
17 | switch(pathinfo('./' . $fname)['extension']) {
18 | case "swf":
19 | $content_type = "application/x-shockwave-flash";
20 | break;
21 | case "png":
22 | $content_type = "image/png";
23 | break;
24 | case "jpg":
25 | $content_type = "image/jpeg";
26 | break;
27 | default:
28 | $content_type = "application/octet-stream";
29 | }
30 | header("Content-Type: $content_type");
31 |
32 | $size = filesize('./' . $fname);
33 | header('Content-Length: ' . $size);
34 | header("Cache-control: public");
35 | header("Expires: " . gmdate("D, d M Y H:i:s", time() + 60*60*4) . " GMT");
36 |
37 | readfile('./' . $fname);
38 | } else {
39 | $root = "https://www.smeshariki.ru/fs/";
40 | $url = $root . $fname;
41 | $headers = get_headers($url, 1);
42 | $type = $headers["Content-Type"];
43 |
44 | header('Content-Type: ' . $type);
45 | header('Content-Length: ' . $headers["Content-Length"]);
46 | header("Cache-control: public");
47 | header("Expires: " . gmdate("D, d M Y H:i:s", time() + 60*60*4) . " GMT");
48 |
49 | if(($content = @file_get_contents($url)) === FALSE) die;
50 | exit($content);
51 | }
52 | ?>
53 |
--------------------------------------------------------------------------------
/misc/proxyfs/readme.md:
--------------------------------------------------------------------------------
1 | # Проксирующее флеш-хранилище by LowderPlay and Jjck
2 |
3 | Проксирующее флеш-хранилище не хранит файлы на накопителе, оно при каждом запросе скачивает новейшую версию напрямую с серверов SharaBall и возвращают её клиенту, при этом сохраняя возможность использовать свои .swf файлы
4 | # Установка
5 | 1. Переместите файл `fs.php` в директорию `/fs/` на вашем сайте
6 | 2. Замените всё содержимое файла `.htaccess` в корневой директории на это
7 | ```
8 |
9 | RewriteEngine On
10 | RewriteRule ^fs/(.*)!(.*).swf$ /fs/fs.php?filename=$1.swf
11 | RewriteRule ^fs/(.*)!(.*).png$ /fs/fs.php?filename=$1.png
12 | RewriteRule ^fs/(.*)!.swf$ /fs/fs.php?filename=$1.swf
13 | RewriteRule ^async/ServerAction ServerAction.php
14 | RewriteRule ^async/Ping ping.php
15 | RewriteRule ^logout logout.php
16 | Options -Indexes
17 |
18 | ```
19 | * Не забудьте [включить модуль cURL в PHP](https://stackoverflow.com/questions/1347146/howto-enable-curl-in-php-xampp)
20 |
--------------------------------------------------------------------------------
/misc/readme.md:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | Всякая всячина, не попавшая в основные папки по какой-либо причине
3 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # DaisyDale++
2 |
3 | **DaisyDale++** - это форк open-source сервера для аватарчата, частично совместимого с клиентом игры "Шарарам"
4 |
5 | # Плюсы DD++
6 | Из плюсов можно выделить:
7 |
8 | 1. **Лёгкую установку**. Для запуска на localhost теперь не нужно редактировать никакие файлы, всё работает из коробки, а также добавлены ссылки на нужный софт
9 |
10 | 2. **Поддержку**. Официальный репозиторий больше не поддерживается, в то время как этот будет постоянно обновляться
11 |
12 | 3. **Wiki**. В нашем репозитории есть собственная вики с информацией о Дейзи Дейле, которую не предоставляют в официальном репозитории
13 |
14 | # Требования
15 | Для создания сервера с Дейзи Дейлом вам нужны
16 |
17 | 1. Adobe Media Server (для: [Windows x64](https://download.macromedia.com/pub/adobemediaserver/5_0_15/AdobeMediaServer5_x64.exe), [Linux x64](https://download.macromedia.com/pub/adobemediaserver/5_0_15/AdobeMediaServer5_x64.tar.gz)) (для 32-х битных систем Windows можно попробовать использовать [эту](https://download.macromedia.com/pub/flashmediaserver/updates/3_5_4/Windows/FlashMediaServer3.5.exe) версию), apache **не** ставим и **убираем** использовние порта 80)
18 |
19 | 2. [XAMPP](https://bit.ly/2TgobyD) или другой вебсервер с PHP
20 |
21 | 3. SWF База Файлов Шарарама
22 |
23 | 4. [MariaDB](https://mariadb.org/download/) или [MySQL](https://dev.mysql.com/downloads/mysql/) (для хранения аккаунтов) (в случае с [XAMPP](https://bit.ly/2TgobyD) идёт в комплекте)
24 |
25 | # Установка
26 |
27 | 1. Первым делом необходимо перенести папку `daisy` из репозитория в папку `applications` в корне Adobe Media Server.
28 | 2. Заливаем флешки на вебсервер в папку `fs` или используем [минимальное флеш хранилище](https://github.com/123jjck/ddplusplus/tree/master/misc/minfs)
29 | 3. Копируем файлы из всех папок репозитория (кроме папок `daisy`, `misc` и файла `dump.sql`) и вставляем их в корень вашего сайта (для XAMPP это `htdocs`)
30 | 4. В PhpMyAdmin создаём базу данных под названием `daisy` с кодировкой `utf8_general_ci` и импортируем туда `dump.sql`
31 | 5. Запускаем Adobe Media Server и Adobe Media Administration Server
32 | 6. Теперь вы можете зайти на `localhost` и наслаждаться игрой
33 |
34 | # Дополнительные шаги для запуска сервера на VDS/VPS
35 | 7. Если на вашей базе данных стоит пароль, либо она расположена на удалённом сервере - меняем данные от базы данных в файле `db_connection.php`
36 | * Если сайт и сервер располагаются на одной машине, крайне рекомендуется ограничить доступ к api файлам для посторонних людей:
37 | 1. Создайте отдельную папку для этих файлов
38 | 2. Отредактируйте переменную `msHost` в файле `main.asc`
39 | 3. Создайте файл `.htaccess` в папке со следующим содержанием:
40 | ```
41 |
42 | Require local
43 |
44 | ```
45 | # Лицензия
46 |
47 | Делайте что хотите, но на ваш страх и риск.
48 |
--------------------------------------------------------------------------------