├── 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"] = '" + 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 |
35 |

Уровень:

36 |

Дата регистрации: ..

37 | 38 |
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 |
21 |
22 | "> 23 |
24 |
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 |
59 |

60 |

Вход

61 |
62 |
63 |
64 |  Создать аккаунт 65 |
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 |
77 |

78 |

Регистрация

79 |
80 |
81 |
82 |  Назад
83 |
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 | --------------------------------------------------------------------------------