Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
3,108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 210.99 KB | None | 0 0
  1.  
  2. Save New Duplicate & Edit Just Text Twitter
  3. 1
  4. 2
  5. 3
  6. 4
  7. 5
  8. 6
  9. 7
  10. 8
  11. 9
  12. 10
  13. 11
  14. 12
  15. 13
  16. 14
  17. 15
  18. 16
  19. 17
  20. 18
  21. 19
  22. 20
  23. 21
  24. 22
  25. 23
  26. 24
  27. 25
  28. 26
  29. 27
  30. 28
  31. 29
  32. 30
  33. 31
  34. 32
  35. 33
  36. 34
  37. 35
  38. 36
  39. 37
  40. 38
  41. 39
  42. 40
  43. 41
  44. 42
  45. 43
  46. 44
  47. 45
  48. 46
  49. 47
  50. 48
  51. 49
  52. 50
  53. 51
  54. 52
  55. 53
  56. 54
  57. 55
  58. 56
  59. 57
  60. 58
  61. 59
  62. 60
  63. 61
  64. 62
  65. 63
  66. 64
  67. 65
  68. 66
  69. 67
  70. 68
  71. 69
  72. 70
  73. 71
  74. 72
  75. 73
  76. 74
  77. 75
  78. 76
  79. 77
  80. 78
  81. 79
  82. 80
  83. 81
  84. 82
  85. 83
  86. 84
  87. 85
  88. 86
  89. 87
  90. 88
  91. 89
  92. 90
  93. 91
  94. 92
  95. 93
  96. 94
  97. 95
  98. 96
  99. 97
  100. 98
  101. 99
  102. 100
  103. 101
  104. 102
  105. 103
  106. 104
  107. 105
  108. 106
  109. 107
  110. 108
  111. 109
  112. 110
  113. 111
  114. 112
  115. 113
  116. 114
  117. 115
  118. 116
  119. 117
  120. 118
  121. 119
  122. 120
  123. 121
  124. 122
  125. 123
  126. 124
  127. 125
  128. 126
  129. 127
  130. 128
  131. 129
  132. 130
  133. 131
  134. 132
  135. 133
  136. 134
  137. 135
  138. 136
  139. 137
  140. 138
  141. 139
  142. 140
  143. 141
  144. 142
  145. 143
  146. 144
  147. 145
  148. 146
  149. 147
  150. 148
  151. 149
  152. 150
  153. 151
  154. 152
  155. 153
  156. 154
  157. 155
  158. 156
  159. 157
  160. 158
  161. 159
  162. 160
  163. 161
  164. 162
  165. 163
  166. 164
  167. 165
  168. 166
  169. 167
  170. 168
  171. 169
  172. 170
  173. 171
  174. 172
  175. 173
  176. 174
  177. 175
  178. 176
  179. 177
  180. 178
  181. 179
  182. 180
  183. 181
  184. 182
  185. 183
  186. 184
  187. 185
  188. 186
  189. 187
  190. 188
  191. 189
  192. 190
  193. 191
  194. 192
  195. 193
  196. 194
  197. 195
  198. 196
  199. 197
  200. 198
  201. 199
  202. 200
  203. 201
  204. 202
  205. 203
  206. 204
  207. 205
  208. 206
  209. 207
  210. 208
  211. 209
  212. 210
  213. 211
  214. 212
  215. 213
  216. 214
  217. 215
  218. 216
  219. 217
  220. 218
  221. 219
  222. 220
  223. 221
  224. 222
  225. 223
  226. 224
  227. 225
  228. 226
  229. 227
  230. 228
  231. 229
  232. 230
  233. 231
  234. 232
  235. 233
  236. 234
  237. 235
  238. 236
  239. 237
  240. 238
  241. 239
  242. 240
  243. 241
  244. 242
  245. 243
  246. 244
  247. 245
  248. 246
  249. 247
  250. 248
  251. 249
  252. 250
  253. 251
  254. 252
  255. 253
  256. 254
  257. 255
  258. 256
  259. 257
  260. 258
  261. 259
  262. 260
  263. 261
  264. 262
  265. 263
  266. 264
  267. 265
  268. 266
  269. 267
  270. 268
  271. 269
  272. 270
  273. 271
  274. 272
  275. 273
  276. 274
  277. 275
  278. 276
  279. 277
  280. 278
  281. 279
  282. 280
  283. 281
  284. 282
  285. 283
  286. 284
  287. 285
  288. 286
  289. 287
  290. 288
  291. 289
  292. 290
  293. 291
  294. 292
  295. 293
  296. 294
  297. 295
  298. 296
  299. 297
  300. 298
  301. 299
  302. 300
  303. 301
  304. 302
  305. 303
  306. 304
  307. 305
  308. 306
  309. 307
  310. 308
  311. 309
  312. 310
  313. 311
  314. 312
  315. 313
  316. 314
  317. 315
  318. 316
  319. 317
  320. 318
  321. 319
  322. 320
  323. 321
  324. 322
  325. 323
  326. 324
  327. 325
  328. 326
  329. 327
  330. 328
  331. 329
  332. 330
  333. 331
  334. 332
  335. 333
  336. 334
  337. 335
  338. 336
  339. 337
  340. 338
  341. 339
  342. 340
  343. 341
  344. 342
  345. 343
  346. 344
  347. 345
  348. 346
  349. 347
  350. 348
  351. 349
  352. 350
  353. 351
  354. 352
  355. 353
  356. 354
  357. 355
  358. 356
  359. 357
  360. 358
  361. 359
  362. 360
  363. 361
  364. 362
  365. 363
  366. 364
  367. 365
  368. 366
  369. 367
  370. 368
  371. 369
  372. 370
  373. 371
  374. 372
  375. 373
  376. 374
  377. 375
  378. 376
  379. 377
  380. 378
  381. 379
  382. 380
  383. 381
  384. 382
  385. 383
  386. 384
  387. 385
  388. 386
  389. 387
  390. 388
  391. 389
  392. 390
  393. 391
  394. 392
  395. 393
  396. 394
  397. 395
  398. 396
  399. 397
  400. 398
  401. 399
  402. 400
  403. 401
  404. 402
  405. 403
  406. 404
  407. 405
  408. 406
  409. 407
  410. 408
  411. 409
  412. 410
  413. 411
  414. 412
  415. 413
  416. 414
  417. 415
  418. 416
  419. 417
  420. 418
  421. 419
  422. 420
  423. 421
  424. 422
  425. 423
  426. 424
  427. 425
  428. 426
  429. 427
  430. 428
  431. 429
  432. 430
  433. 431
  434. 432
  435. 433
  436. 434
  437. 435
  438. 436
  439. 437
  440. 438
  441. 439
  442. 440
  443. 441
  444. 442
  445. 443
  446. 444
  447. 445
  448. 446
  449. 447
  450. 448
  451. 449
  452. 450
  453. 451
  454. 452
  455. 453
  456. 454
  457. 455
  458. 456
  459. 457
  460. 458
  461. 459
  462. 460
  463. 461
  464. 462
  465. 463
  466. 464
  467. 465
  468. 466
  469. 467
  470. 468
  471. 469
  472. 470
  473. 471
  474. 472
  475. 473
  476. 474
  477. 475
  478. 476
  479. 477
  480. 478
  481. 479
  482. 480
  483. 481
  484. 482
  485. 483
  486. 484
  487. 485
  488. 486
  489. 487
  490. 488
  491. 489
  492. 490
  493. 491
  494. 492
  495. 493
  496. 494
  497. 495
  498. 496
  499. 497
  500. 498
  501. 499
  502. 500
  503. 501
  504. 502
  505. 503
  506. 504
  507. 505
  508. 506
  509. 507
  510. 508
  511. 509
  512. 510
  513. 511
  514. 512
  515. 513
  516. 514
  517. 515
  518. 516
  519. 517
  520. 518
  521. 519
  522. 520
  523. 521
  524. 522
  525. 523
  526. 524
  527. 525
  528. 526
  529. 527
  530. 528
  531. 529
  532. 530
  533. 531
  534. 532
  535. 533
  536. 534
  537. 535
  538. 536
  539. 537
  540. 538
  541. 539
  542. 540
  543. 541
  544. 542
  545. 543
  546. 544
  547. 545
  548. 546
  549. 547
  550. 548
  551. 549
  552. 550
  553. 551
  554. 552
  555. 553
  556. 554
  557. 555
  558. 556
  559. 557
  560. 558
  561. 559
  562. 560
  563. 561
  564. 562
  565. 563
  566. 564
  567. 565
  568. 566
  569. 567
  570. 568
  571. 569
  572. 570
  573. 571
  574. 572
  575. 573
  576. 574
  577. 575
  578. 576
  579. 577
  580. 578
  581. 579
  582. 580
  583. 581
  584. 582
  585. 583
  586. 584
  587. 585
  588. 586
  589. 587
  590. 588
  591. 589
  592. 590
  593. 591
  594. 592
  595. 593
  596. 594
  597. 595
  598. 596
  599. 597
  600. 598
  601. 599
  602. 600
  603. 601
  604. 602
  605. 603
  606. 604
  607. 605
  608. 606
  609. 607
  610. 608
  611. 609
  612. 610
  613. 611
  614. 612
  615. 613
  616. 614
  617. 615
  618. 616
  619. 617
  620. 618
  621. 619
  622. 620
  623. 621
  624. 622
  625. 623
  626. 624
  627. 625
  628. 626
  629. 627
  630. 628
  631. 629
  632. 630
  633. 631
  634. 632
  635. 633
  636. 634
  637. 635
  638. 636
  639. 637
  640. 638
  641. 639
  642. 640
  643. 641
  644. 642
  645. 643
  646. 644
  647. 645
  648. 646
  649. 647
  650. 648
  651. 649
  652. 650
  653. 651
  654. 652
  655. 653
  656. 654
  657. 655
  658. 656
  659. 657
  660. 658
  661. 659
  662. 660
  663. 661
  664. 662
  665. 663
  666. 664
  667. 665
  668. 666
  669. 667
  670. 668
  671. 669
  672. 670
  673. 671
  674. 672
  675. 673
  676. 674
  677. 675
  678. 676
  679. 677
  680. 678
  681. 679
  682. 680
  683. 681
  684. 682
  685. 683
  686. 684
  687. 685
  688. 686
  689. 687
  690. 688
  691. 689
  692. 690
  693. 691
  694. 692
  695. 693
  696. 694
  697. 695
  698. 696
  699. 697
  700. 698
  701. 699
  702. 700
  703. 701
  704. 702
  705. 703
  706. 704
  707. 705
  708. 706
  709. 707
  710. 708
  711. 709
  712. 710
  713. 711
  714. 712
  715. 713
  716. 714
  717. 715
  718. 716
  719. 717
  720. 718
  721. 719
  722. 720
  723. 721
  724. 722
  725. 723
  726. 724
  727. 725
  728. 726
  729. 727
  730. 728
  731. 729
  732. 730
  733. 731
  734. 732
  735. 733
  736. 734
  737. 735
  738. 736
  739. 737
  740. 738
  741. 739
  742. 740
  743. 741
  744. 742
  745. 743
  746. 744
  747. 745
  748. 746
  749. 747
  750. 748
  751. 749
  752. 750
  753. 751
  754. 752
  755. 753
  756. 754
  757. 755
  758. 756
  759. 757
  760. 758
  761. 759
  762. 760
  763. 761
  764. 762
  765. 763
  766. 764
  767. 765
  768. 766
  769. 767
  770. 768
  771. 769
  772. 770
  773. 771
  774. 772
  775. 773
  776. 774
  777. 775
  778. 776
  779. 777
  780. 778
  781. 779
  782. 780
  783. 781
  784. 782
  785. 783
  786. 784
  787. 785
  788. 786
  789. 787
  790. 788
  791. 789
  792. 790
  793. 791
  794. 792
  795. 793
  796. 794
  797. 795
  798. 796
  799. 797
  800. 798
  801. 799
  802. 800
  803. 801
  804. 802
  805. 803
  806. 804
  807. 805
  808. 806
  809. 807
  810. 808
  811. 809
  812. 810
  813. 811
  814. 812
  815. 813
  816. 814
  817. 815
  818. 816
  819. 817
  820. 818
  821. 819
  822. 820
  823. 821
  824. 822
  825. 823
  826. 824
  827. 825
  828. 826
  829. 827
  830. 828
  831. 829
  832. 830
  833. 831
  834. 832
  835. 833
  836. 834
  837. 835
  838. 836
  839. 837
  840. 838
  841. 839
  842. 840
  843. 841
  844. 842
  845. 843
  846. 844
  847. 845
  848. 846
  849. 847
  850. 848
  851. 849
  852. 850
  853. 851
  854. 852
  855. 853
  856. 854
  857. 855
  858. 856
  859. 857
  860. 858
  861. 859
  862. 860
  863. 861
  864. 862
  865. 863
  866. 864
  867. 865
  868. 866
  869. 867
  870. 868
  871. 869
  872. 870
  873. 871
  874. 872
  875. 873
  876. 874
  877. 875
  878. 876
  879. 877
  880. 878
  881. 879
  882. 880
  883. 881
  884. 882
  885. 883
  886. 884
  887. 885
  888. 886
  889. 887
  890. 888
  891. 889
  892. 890
  893. 891
  894. 892
  895. 893
  896. 894
  897. 895
  898. 896
  899. 897
  900. 898
  901. 899
  902. 900
  903. 901
  904. 902
  905. 903
  906. 904
  907. 905
  908. 906
  909. 907
  910. 908
  911. 909
  912. 910
  913. 911
  914. 912
  915. 913
  916. 914
  917. 915
  918. 916
  919. 917
  920. 918
  921. 919
  922. 920
  923. 921
  924. 922
  925. 923
  926. 924
  927. 925
  928. 926
  929. 927
  930. 928
  931. 929
  932. 930
  933. 931
  934. 932
  935. 933
  936. 934
  937. 935
  938. 936
  939. 937
  940. 938
  941. 939
  942. 940
  943. 941
  944. 942
  945. 943
  946. 944
  947. 945
  948. 946
  949. 947
  950. 948
  951. 949
  952. 950
  953. 951
  954. 952
  955. 953
  956. 954
  957. 955
  958. 956
  959. 957
  960. 958
  961. 959
  962. 960
  963. 961
  964. 962
  965. 963
  966. 964
  967. 965
  968. 966
  969. 967
  970. 968
  971. 969
  972. 970
  973. 971
  974. 972
  975. 973
  976. 974
  977. 975
  978. 976
  979. 977
  980. 978
  981. 979
  982. 980
  983. 981
  984. 982
  985. 983
  986. 984
  987. 985
  988. 986
  989. 987
  990. 988
  991. 989
  992. 990
  993. 991
  994. 992
  995. 993
  996. 994
  997. 995
  998. 996
  999. 997
  1000. 998
  1001. 999
  1002. 1000
  1003. 1001
  1004. 1002
  1005. 1003
  1006. 1004
  1007. 1005
  1008. 1006
  1009. 1007
  1010. 1008
  1011. 1009
  1012. 1010
  1013. 1011
  1014. 1012
  1015. 1013
  1016. 1014
  1017. 1015
  1018. 1016
  1019. 1017
  1020. 1018
  1021. 1019
  1022. 1020
  1023. 1021
  1024. 1022
  1025. 1023
  1026. 1024
  1027. 1025
  1028. 1026
  1029. 1027
  1030. 1028
  1031. 1029
  1032. 1030
  1033. 1031
  1034. 1032
  1035. 1033
  1036. 1034
  1037. 1035
  1038. 1036
  1039. 1037
  1040. 1038
  1041. 1039
  1042. 1040
  1043. 1041
  1044. 1042
  1045. 1043
  1046. 1044
  1047. 1045
  1048. 1046
  1049. 1047
  1050. 1048
  1051. 1049
  1052. 1050
  1053. 1051
  1054. 1052
  1055. 1053
  1056. 1054
  1057. 1055
  1058. 1056
  1059. 1057
  1060. 1058
  1061. 1059
  1062. 1060
  1063. 1061
  1064. 1062
  1065. 1063
  1066. 1064
  1067. 1065
  1068. 1066
  1069. 1067
  1070. 1068
  1071. 1069
  1072. 1070
  1073. 1071
  1074. 1072
  1075. 1073
  1076. 1074
  1077. 1075
  1078. 1076
  1079. 1077
  1080. 1078
  1081. 1079
  1082. 1080
  1083. 1081
  1084. 1082
  1085. 1083
  1086. 1084
  1087. 1085
  1088. 1086
  1089. 1087
  1090. 1088
  1091. 1089
  1092. 1090
  1093. 1091
  1094. 1092
  1095. 1093
  1096. 1094
  1097. 1095
  1098. 1096
  1099. 1097
  1100. 1098
  1101. 1099
  1102. 1100
  1103. 1101
  1104. 1102
  1105. 1103
  1106. 1104
  1107. 1105
  1108. 1106
  1109. 1107
  1110. 1108
  1111. 1109
  1112. 1110
  1113. 1111
  1114. 1112
  1115. 1113
  1116. 1114
  1117. 1115
  1118. 1116
  1119. 1117
  1120. 1118
  1121. 1119
  1122. 1120
  1123. 1121
  1124. 1122
  1125. 1123
  1126. 1124
  1127. 1125
  1128. 1126
  1129. 1127
  1130. 1128
  1131. 1129
  1132. 1130
  1133. 1131
  1134. 1132
  1135. 1133
  1136. 1134
  1137. 1135
  1138. 1136
  1139. 1137
  1140. 1138
  1141. 1139
  1142. 1140
  1143. 1141
  1144. 1142
  1145. 1143
  1146. 1144
  1147. 1145
  1148. 1146
  1149. 1147
  1150. 1148
  1151. 1149
  1152. 1150
  1153. 1151
  1154. 1152
  1155. 1153
  1156. 1154
  1157. 1155
  1158. 1156
  1159. 1157
  1160. 1158
  1161. 1159
  1162. 1160
  1163. 1161
  1164. 1162
  1165. 1163
  1166. 1164
  1167. 1165
  1168. 1166
  1169. 1167
  1170. 1168
  1171. 1169
  1172. 1170
  1173. 1171
  1174. 1172
  1175. 1173
  1176. 1174
  1177. 1175
  1178. 1176
  1179. 1177
  1180. 1178
  1181. 1179
  1182. 1180
  1183. 1181
  1184. 1182
  1185. 1183
  1186. 1184
  1187. 1185
  1188. 1186
  1189. 1187
  1190. 1188
  1191. 1189
  1192. 1190
  1193. 1191
  1194. 1192
  1195. 1193
  1196. 1194
  1197. 1195
  1198. 1196
  1199. 1197
  1200. 1198
  1201. 1199
  1202. 1200
  1203. 1201
  1204. 1202
  1205. 1203
  1206. 1204
  1207. 1205
  1208. 1206
  1209. 1207
  1210. 1208
  1211. 1209
  1212. 1210
  1213. 1211
  1214. 1212
  1215. 1213
  1216. 1214
  1217. 1215
  1218. 1216
  1219. 1217
  1220. 1218
  1221. 1219
  1222. 1220
  1223. 1221
  1224. 1222
  1225. 1223
  1226. 1224
  1227. 1225
  1228. 1226
  1229. 1227
  1230. 1228
  1231. 1229
  1232. 1230
  1233. 1231
  1234. 1232
  1235. 1233
  1236. 1234
  1237. 1235
  1238. 1236
  1239. 1237
  1240. 1238
  1241. 1239
  1242. 1240
  1243. 1241
  1244. 1242
  1245. 1243
  1246. 1244
  1247. 1245
  1248. 1246
  1249. 1247
  1250. 1248
  1251. 1249
  1252. 1250
  1253. 1251
  1254. 1252
  1255. 1253
  1256. 1254
  1257. 1255
  1258. 1256
  1259. 1257
  1260. 1258
  1261. 1259
  1262. 1260
  1263. 1261
  1264. 1262
  1265. 1263
  1266. 1264
  1267. 1265
  1268. 1266
  1269. 1267
  1270. 1268
  1271. 1269
  1272. 1270
  1273. 1271
  1274. 1272
  1275. 1273
  1276. 1274
  1277. 1275
  1278. 1276
  1279. 1277
  1280. 1278
  1281. 1279
  1282. 1280
  1283. 1281
  1284. 1282
  1285. 1283
  1286. 1284
  1287. 1285
  1288. 1286
  1289. 1287
  1290. 1288
  1291. 1289
  1292. 1290
  1293. 1291
  1294. 1292
  1295. 1293
  1296. 1294
  1297. 1295
  1298. 1296
  1299. 1297
  1300. 1298
  1301. 1299
  1302. 1300
  1303. 1301
  1304. 1302
  1305. 1303
  1306. 1304
  1307. 1305
  1308. 1306
  1309. 1307
  1310. 1308
  1311. 1309
  1312. 1310
  1313. 1311
  1314. 1312
  1315. 1313
  1316. 1314
  1317. 1315
  1318. 1316
  1319. 1317
  1320. 1318
  1321. 1319
  1322. 1320
  1323. 1321
  1324. 1322
  1325. 1323
  1326. 1324
  1327. 1325
  1328. 1326
  1329. 1327
  1330. 1328
  1331. 1329
  1332. 1330
  1333. 1331
  1334. 1332
  1335. 1333
  1336. 1334
  1337. 1335
  1338. 1336
  1339. 1337
  1340. 1338
  1341. 1339
  1342. 1340
  1343. 1341
  1344. 1342
  1345. 1343
  1346. 1344
  1347. 1345
  1348. 1346
  1349. 1347
  1350. 1348
  1351. 1349
  1352. 1350
  1353. 1351
  1354. 1352
  1355. 1353
  1356. 1354
  1357. 1355
  1358. 1356
  1359. 1357
  1360. 1358
  1361. 1359
  1362. 1360
  1363. 1361
  1364. 1362
  1365. 1363
  1366. 1364
  1367. 1365
  1368. 1366
  1369. 1367
  1370. 1368
  1371. 1369
  1372. 1370
  1373. 1371
  1374. 1372
  1375. 1373
  1376. 1374
  1377. 1375
  1378. 1376
  1379. 1377
  1380. 1378
  1381. 1379
  1382. 1380
  1383. 1381
  1384. 1382
  1385. 1383
  1386. 1384
  1387. 1385
  1388. 1386
  1389. 1387
  1390. 1388
  1391. 1389
  1392. 1390
  1393. 1391
  1394. 1392
  1395. 1393
  1396. 1394
  1397. 1395
  1398. 1396
  1399. 1397
  1400. 1398
  1401. 1399
  1402. 1400
  1403. 1401
  1404. 1402
  1405. 1403
  1406. 1404
  1407. 1405
  1408. 1406
  1409. 1407
  1410. 1408
  1411. 1409
  1412. 1410
  1413. 1411
  1414. 1412
  1415. 1413
  1416. 1414
  1417. 1415
  1418. 1416
  1419. 1417
  1420. 1418
  1421. 1419
  1422. 1420
  1423. 1421
  1424. 1422
  1425. 1423
  1426. 1424
  1427. 1425
  1428. 1426
  1429. 1427
  1430. 1428
  1431. 1429
  1432. 1430
  1433. 1431
  1434. 1432
  1435. 1433
  1436. 1434
  1437. 1435
  1438. 1436
  1439. 1437
  1440. 1438
  1441. 1439
  1442. 1440
  1443. 1441
  1444. 1442
  1445. 1443
  1446. 1444
  1447. 1445
  1448. 1446
  1449. 1447
  1450. 1448
  1451. 1449
  1452. 1450
  1453. 1451
  1454. 1452
  1455. 1453
  1456. 1454
  1457. 1455
  1458. 1456
  1459. 1457
  1460. 1458
  1461. 1459
  1462. 1460
  1463. 1461
  1464. 1462
  1465. 1463
  1466. 1464
  1467. 1465
  1468. 1466
  1469. 1467
  1470. 1468
  1471. 1469
  1472. 1470
  1473. 1471
  1474. 1472
  1475. 1473
  1476. 1474
  1477. 1475
  1478. 1476
  1479. 1477
  1480. 1478
  1481. 1479
  1482. 1480
  1483. 1481
  1484. 1482
  1485. 1483
  1486. 1484
  1487. 1485
  1488. 1486
  1489. 1487
  1490. 1488
  1491. 1489
  1492. 1490
  1493. 1491
  1494. 1492
  1495. 1493
  1496. 1494
  1497. 1495
  1498. 1496
  1499. 1497
  1500. 1498
  1501. 1499
  1502. 1500
  1503. 1501
  1504. 1502
  1505. 1503
  1506. 1504
  1507. 1505
  1508. 1506
  1509. 1507
  1510. 1508
  1511. 1509
  1512. 1510
  1513. 1511
  1514. 1512
  1515. 1513
  1516. 1514
  1517. 1515
  1518. 1516
  1519. 1517
  1520. 1518
  1521. 1519
  1522. 1520
  1523. 1521
  1524. 1522
  1525. 1523
  1526. 1524
  1527. 1525
  1528. 1526
  1529. 1527
  1530. 1528
  1531. 1529
  1532. 1530
  1533. 1531
  1534. 1532
  1535. 1533
  1536. 1534
  1537. 1535
  1538. 1536
  1539. 1537
  1540. 1538
  1541. 1539
  1542. 1540
  1543. 1541
  1544. 1542
  1545. 1543
  1546. 1544
  1547. 1545
  1548. 1546
  1549. 1547
  1550. 1548
  1551. 1549
  1552. 1550
  1553. 1551
  1554. 1552
  1555. 1553
  1556. 1554
  1557. 1555
  1558. 1556
  1559. 1557
  1560. 1558
  1561. 1559
  1562. 1560
  1563. 1561
  1564. 1562
  1565. 1563
  1566. 1564
  1567. 1565
  1568. 1566
  1569. 1567
  1570. 1568
  1571. 1569
  1572. 1570
  1573. 1571
  1574. 1572
  1575. 1573
  1576. 1574
  1577. 1575
  1578. 1576
  1579. 1577
  1580. 1578
  1581. 1579
  1582. 1580
  1583. 1581
  1584. 1582
  1585. 1583
  1586. 1584
  1587. 1585
  1588. 1586
  1589. 1587
  1590. 1588
  1591. 1589
  1592. 1590
  1593. 1591
  1594. 1592
  1595. 1593
  1596. 1594
  1597. 1595
  1598. 1596
  1599. 1597
  1600. 1598
  1601. 1599
  1602. 1600
  1603. 1601
  1604. 1602
  1605. 1603
  1606. 1604
  1607. 1605
  1608. 1606
  1609. 1607
  1610. 1608
  1611. 1609
  1612. 1610
  1613. 1611
  1614. 1612
  1615. 1613
  1616. 1614
  1617. 1615
  1618. 1616
  1619. 1617
  1620. 1618
  1621. 1619
  1622. 1620
  1623. 1621
  1624. 1622
  1625. 1623
  1626. 1624
  1627. 1625
  1628. 1626
  1629. 1627
  1630. 1628
  1631. 1629
  1632. 1630
  1633. 1631
  1634. 1632
  1635. 1633
  1636. 1634
  1637. 1635
  1638. 1636
  1639. 1637
  1640. 1638
  1641. 1639
  1642. 1640
  1643. 1641
  1644. 1642
  1645. 1643
  1646. 1644
  1647. 1645
  1648. 1646
  1649. 1647
  1650. 1648
  1651. 1649
  1652. 1650
  1653. 1651
  1654. 1652
  1655. 1653
  1656. 1654
  1657. 1655
  1658. 1656
  1659. 1657
  1660. 1658
  1661. 1659
  1662. 1660
  1663. 1661
  1664. 1662
  1665. 1663
  1666. 1664
  1667. 1665
  1668. 1666
  1669. 1667
  1670. 1668
  1671. 1669
  1672. 1670
  1673. 1671
  1674. 1672
  1675. 1673
  1676. 1674
  1677. 1675
  1678. 1676
  1679. 1677
  1680. 1678
  1681. 1679
  1682. 1680
  1683. 1681
  1684. 1682
  1685. 1683
  1686. 1684
  1687. 1685
  1688. 1686
  1689. 1687
  1690. 1688
  1691. 1689
  1692. 1690
  1693. 1691
  1694. 1692
  1695. 1693
  1696. 1694
  1697. 1695
  1698. 1696
  1699. 1697
  1700. 1698
  1701. 1699
  1702. 1700
  1703. 1701
  1704. 1702
  1705. 1703
  1706. 1704
  1707. 1705
  1708. 1706
  1709. 1707
  1710. 1708
  1711. 1709
  1712. 1710
  1713. 1711
  1714. 1712
  1715. 1713
  1716. 1714
  1717. 1715
  1718. 1716
  1719. 1717
  1720. 1718
  1721. 1719
  1722. 1720
  1723. 1721
  1724. 1722
  1725. 1723
  1726. 1724
  1727. 1725
  1728. 1726
  1729. 1727
  1730. 1728
  1731. 1729
  1732. 1730
  1733. 1731
  1734. 1732
  1735. 1733
  1736. 1734
  1737. 1735
  1738. 1736
  1739. 1737
  1740. 1738
  1741. 1739
  1742. 1740
  1743. 1741
  1744. 1742
  1745. 1743
  1746. 1744
  1747. 1745
  1748. 1746
  1749. 1747
  1750. 1748
  1751. 1749
  1752. 1750
  1753. 1751
  1754. 1752
  1755. 1753
  1756. 1754
  1757. 1755
  1758. 1756
  1759. 1757
  1760. 1758
  1761. 1759
  1762. 1760
  1763. 1761
  1764. 1762
  1765. 1763
  1766. 1764
  1767. 1765
  1768. 1766
  1769. 1767
  1770. 1768
  1771. 1769
  1772. 1770
  1773. 1771
  1774. 1772
  1775. 1773
  1776. 1774
  1777. 1775
  1778. 1776
  1779. 1777
  1780. 1778
  1781. 1779
  1782. 1780
  1783. 1781
  1784. 1782
  1785. 1783
  1786. 1784
  1787. 1785
  1788. 1786
  1789. 1787
  1790. 1788
  1791. 1789
  1792. 1790
  1793. 1791
  1794. 1792
  1795. 1793
  1796. 1794
  1797. 1795
  1798. 1796
  1799. 1797
  1800. 1798
  1801. 1799
  1802. 1800
  1803. 1801
  1804. 1802
  1805. 1803
  1806. 1804
  1807. 1805
  1808. 1806
  1809. 1807
  1810. 1808
  1811. 1809
  1812. 1810
  1813. 1811
  1814. 1812
  1815. 1813
  1816. 1814
  1817. 1815
  1818. 1816
  1819. 1817
  1820. 1818
  1821. 1819
  1822. 1820
  1823. 1821
  1824. 1822
  1825. 1823
  1826. 1824
  1827. 1825
  1828. 1826
  1829. 1827
  1830. 1828
  1831. 1829
  1832. 1830
  1833. 1831
  1834. 1832
  1835. 1833
  1836. 1834
  1837. 1835
  1838. 1836
  1839. 1837
  1840. 1838
  1841. 1839
  1842. 1840
  1843. 1841
  1844. 1842
  1845. 1843
  1846. 1844
  1847. 1845
  1848. 1846
  1849. 1847
  1850. 1848
  1851. 1849
  1852. 1850
  1853. 1851
  1854. 1852
  1855. 1853
  1856. 1854
  1857. 1855
  1858. 1856
  1859. 1857
  1860. 1858
  1861. 1859
  1862. 1860
  1863. 1861
  1864. 1862
  1865. 1863
  1866. 1864
  1867. 1865
  1868. 1866
  1869. 1867
  1870. 1868
  1871. 1869
  1872. 1870
  1873. 1871
  1874. 1872
  1875. 1873
  1876. 1874
  1877. 1875
  1878. 1876
  1879. 1877
  1880. 1878
  1881. 1879
  1882. 1880
  1883. 1881
  1884. 1882
  1885. 1883
  1886. 1884
  1887. 1885
  1888. 1886
  1889. 1887
  1890. 1888
  1891. 1889
  1892. 1890
  1893. 1891
  1894. 1892
  1895. 1893
  1896. 1894
  1897. 1895
  1898. 1896
  1899. 1897
  1900. 1898
  1901. 1899
  1902. 1900
  1903. 1901
  1904. 1902
  1905. 1903
  1906. 1904
  1907. 1905
  1908. 1906
  1909. 1907
  1910. 1908
  1911. 1909
  1912. 1910
  1913. 1911
  1914. 1912
  1915. 1913
  1916. 1914
  1917. 1915
  1918. 1916
  1919. 1917
  1920. 1918
  1921. 1919
  1922. 1920
  1923. 1921
  1924. 1922
  1925. 1923
  1926. 1924
  1927. 1925
  1928. 1926
  1929. 1927
  1930. 1928
  1931. 1929
  1932. 1930
  1933. 1931
  1934. 1932
  1935. 1933
  1936. 1934
  1937. 1935
  1938. 1936
  1939. 1937
  1940. 1938
  1941. 1939
  1942. 1940
  1943. 1941
  1944. 1942
  1945. 1943
  1946. 1944
  1947. 1945
  1948. 1946
  1949. 1947
  1950. 1948
  1951. 1949
  1952. 1950
  1953. 1951
  1954. 1952
  1955. 1953
  1956. 1954
  1957. 1955
  1958. 1956
  1959. 1957
  1960. 1958
  1961. 1959
  1962. 1960
  1963. 1961
  1964. 1962
  1965. 1963
  1966. 1964
  1967. 1965
  1968. 1966
  1969. 1967
  1970. 1968
  1971. 1969
  1972. 1970
  1973. 1971
  1974. 1972
  1975. 1973
  1976. 1974
  1977. 1975
  1978. 1976
  1979. 1977
  1980. 1978
  1981. 1979
  1982. 1980
  1983. 1981
  1984. 1982
  1985. 1983
  1986. 1984
  1987. 1985
  1988. 1986
  1989. 1987
  1990. 1988
  1991. 1989
  1992. 1990
  1993. 1991
  1994. 1992
  1995. 1993
  1996. 1994
  1997. 1995
  1998. 1996
  1999. 1997
  2000. 1998
  2001. 1999
  2002. 2000
  2003. 2001
  2004. 2002
  2005. 2003
  2006. 2004
  2007. 2005
  2008. 2006
  2009. 2007
  2010. 2008
  2011. 2009
  2012. 2010
  2013. 2011
  2014. 2012
  2015. 2013
  2016. 2014
  2017. 2015
  2018. 2016
  2019. 2017
  2020. 2018
  2021. 2019
  2022. 2020
  2023. 2021
  2024. 2022
  2025. 2023
  2026. 2024
  2027. 2025
  2028. 2026
  2029. 2027
  2030. 2028
  2031. 2029
  2032. 2030
  2033. 2031
  2034. 2032
  2035. 2033
  2036. 2034
  2037. 2035
  2038. 2036
  2039. 2037
  2040. 2038
  2041. 2039
  2042. 2040
  2043. 2041
  2044. 2042
  2045. 2043
  2046. 2044
  2047. 2045
  2048. 2046
  2049. 2047
  2050. 2048
  2051. 2049
  2052. 2050
  2053. 2051
  2054. 2052
  2055. 2053
  2056. 2054
  2057. 2055
  2058. 2056
  2059. 2057
  2060. 2058
  2061. 2059
  2062. 2060
  2063. 2061
  2064. 2062
  2065. 2063
  2066. 2064
  2067. 2065
  2068. 2066
  2069. 2067
  2070. 2068
  2071. 2069
  2072. 2070
  2073. 2071
  2074. 2072
  2075. 2073
  2076. 2074
  2077. 2075
  2078. 2076
  2079. 2077
  2080. 2078
  2081. 2079
  2082. 2080
  2083. 2081
  2084. 2082
  2085. 2083
  2086. 2084
  2087. 2085
  2088. 2086
  2089. 2087
  2090. 2088
  2091. 2089
  2092. 2090
  2093. 2091
  2094. 2092
  2095. 2093
  2096. 2094
  2097. 2095
  2098. 2096
  2099. 2097
  2100. 2098
  2101. 2099
  2102. 2100
  2103. 2101
  2104. 2102
  2105. 2103
  2106. 2104
  2107. 2105
  2108. 2106
  2109. 2107
  2110. 2108
  2111. 2109
  2112. 2110
  2113. 2111
  2114. 2112
  2115. 2113
  2116. 2114
  2117. 2115
  2118. 2116
  2119. 2117
  2120. 2118
  2121. 2119
  2122. 2120
  2123. 2121
  2124. 2122
  2125. 2123
  2126. 2124
  2127. 2125
  2128. 2126
  2129. 2127
  2130. 2128
  2131. 2129
  2132. 2130
  2133. 2131
  2134. 2132
  2135. 2133
  2136. 2134
  2137. 2135
  2138. 2136
  2139. 2137
  2140. 2138
  2141. 2139
  2142. 2140
  2143. 2141
  2144. 2142
  2145. 2143
  2146. 2144
  2147. 2145
  2148. 2146
  2149. 2147
  2150. 2148
  2151. 2149
  2152. 2150
  2153. 2151
  2154. 2152
  2155. 2153
  2156. 2154
  2157. 2155
  2158. 2156
  2159. 2157
  2160. 2158
  2161. 2159
  2162. 2160
  2163. 2161
  2164. 2162
  2165. 2163
  2166. 2164
  2167. 2165
  2168. 2166
  2169. 2167
  2170. 2168
  2171. 2169
  2172. 2170
  2173. 2171
  2174. 2172
  2175. 2173
  2176. 2174
  2177. 2175
  2178. 2176
  2179. 2177
  2180. 2178
  2181. 2179
  2182. 2180
  2183. 2181
  2184. 2182
  2185. 2183
  2186. 2184
  2187. 2185
  2188. 2186
  2189. 2187
  2190. 2188
  2191. 2189
  2192. 2190
  2193. 2191
  2194. 2192
  2195. 2193
  2196. 2194
  2197. 2195
  2198. 2196
  2199. 2197
  2200. 2198
  2201. 2199
  2202. 2200
  2203. 2201
  2204. 2202
  2205. 2203
  2206. 2204
  2207. 2205
  2208. 2206
  2209. 2207
  2210. 2208
  2211. 2209
  2212. 2210
  2213. 2211
  2214. 2212
  2215. 2213
  2216. 2214
  2217. 2215
  2218. 2216
  2219. 2217
  2220. 2218
  2221. 2219
  2222. 2220
  2223. 2221
  2224. 2222
  2225. 2223
  2226. 2224
  2227. 2225
  2228. 2226
  2229. 2227
  2230. 2228
  2231. 2229
  2232. 2230
  2233. 2231
  2234. 2232
  2235. 2233
  2236. 2234
  2237. 2235
  2238. 2236
  2239. 2237
  2240. 2238
  2241. 2239
  2242. 2240
  2243. 2241
  2244. 2242
  2245. 2243
  2246. 2244
  2247. 2245
  2248. 2246
  2249. 2247
  2250. 2248
  2251. 2249
  2252. 2250
  2253. 2251
  2254. 2252
  2255. 2253
  2256. 2254
  2257. 2255
  2258. 2256
  2259. 2257
  2260. 2258
  2261. 2259
  2262. 2260
  2263. 2261
  2264. 2262
  2265. 2263
  2266. 2264
  2267. 2265
  2268. 2266
  2269. 2267
  2270. 2268
  2271. 2269
  2272. 2270
  2273. 2271
  2274. 2272
  2275. 2273
  2276. 2274
  2277. 2275
  2278. 2276
  2279. 2277
  2280. 2278
  2281. 2279
  2282. 2280
  2283. 2281
  2284. 2282
  2285. 2283
  2286. 2284
  2287. 2285
  2288. 2286
  2289. 2287
  2290. 2288
  2291. 2289
  2292. 2290
  2293. 2291
  2294. 2292
  2295. 2293
  2296. 2294
  2297. 2295
  2298. 2296
  2299. 2297
  2300. 2298
  2301. 2299
  2302. 2300
  2303. 2301
  2304. 2302
  2305. 2303
  2306. 2304
  2307. 2305
  2308. 2306
  2309. 2307
  2310. 2308
  2311. 2309
  2312. 2310
  2313. 2311
  2314. 2312
  2315. 2313
  2316. 2314
  2317. 2315
  2318. 2316
  2319. 2317
  2320. 2318
  2321. 2319
  2322. 2320
  2323. 2321
  2324. 2322
  2325. 2323
  2326. 2324
  2327. 2325
  2328. 2326
  2329. 2327
  2330. 2328
  2331. 2329
  2332. 2330
  2333. 2331
  2334. 2332
  2335. 2333
  2336. 2334
  2337. 2335
  2338. 2336
  2339. 2337
  2340. 2338
  2341. 2339
  2342. 2340
  2343. 2341
  2344. 2342
  2345. 2343
  2346. 2344
  2347. 2345
  2348. 2346
  2349. 2347
  2350. 2348
  2351. 2349
  2352. 2350
  2353. 2351
  2354. 2352
  2355. 2353
  2356. 2354
  2357. 2355
  2358. 2356
  2359. 2357
  2360. 2358
  2361. 2359
  2362. 2360
  2363. 2361
  2364. 2362
  2365. 2363
  2366. 2364
  2367. 2365
  2368. 2366
  2369. 2367
  2370. 2368
  2371. 2369
  2372. 2370
  2373. 2371
  2374. 2372
  2375. 2373
  2376. 2374
  2377. 2375
  2378. 2376
  2379. 2377
  2380. 2378
  2381. 2379
  2382. 2380
  2383. 2381
  2384. 2382
  2385. 2383
  2386. 2384
  2387. 2385
  2388. 2386
  2389. 2387
  2390. 2388
  2391. 2389
  2392. 2390
  2393. 2391
  2394. 2392
  2395. 2393
  2396. 2394
  2397. 2395
  2398. 2396
  2399. 2397
  2400. 2398
  2401. 2399
  2402. 2400
  2403. 2401
  2404. 2402
  2405. 2403
  2406. 2404
  2407. 2405
  2408. 2406
  2409. 2407
  2410. 2408
  2411. 2409
  2412. 2410
  2413. 2411
  2414. 2412
  2415. 2413
  2416. 2414
  2417. 2415
  2418. 2416
  2419. 2417
  2420. 2418
  2421. 2419
  2422. 2420
  2423. 2421
  2424. 2422
  2425. 2423
  2426. 2424
  2427. 2425
  2428. 2426
  2429. 2427
  2430. 2428
  2431. 2429
  2432. 2430
  2433. 2431
  2434. 2432
  2435. 2433
  2436. 2434
  2437. 2435
  2438. 2436
  2439. 2437
  2440. 2438
  2441. 2439
  2442. 2440
  2443. 2441
  2444. 2442
  2445. 2443
  2446. 2444
  2447. 2445
  2448. 2446
  2449. 2447
  2450. 2448
  2451. 2449
  2452. 2450
  2453. 2451
  2454. 2452
  2455. 2453
  2456. 2454
  2457. 2455
  2458. 2456
  2459. 2457
  2460. 2458
  2461. 2459
  2462. 2460
  2463. 2461
  2464. 2462
  2465. 2463
  2466. 2464
  2467. 2465
  2468. 2466
  2469. 2467
  2470. 2468
  2471. 2469
  2472. 2470
  2473. 2471
  2474. 2472
  2475. 2473
  2476. 2474
  2477. 2475
  2478. 2476
  2479. 2477
  2480. 2478
  2481. 2479
  2482. 2480
  2483. 2481
  2484. 2482
  2485. 2483
  2486. 2484
  2487. 2485
  2488. 2486
  2489. 2487
  2490. 2488
  2491. 2489
  2492. 2490
  2493. 2491
  2494. 2492
  2495. 2493
  2496. 2494
  2497. 2495
  2498. 2496
  2499. 2497
  2500. 2498
  2501. 2499
  2502. 2500
  2503. 2501
  2504. 2502
  2505. 2503
  2506. 2504
  2507. 2505
  2508. 2506
  2509. 2507
  2510. 2508
  2511. 2509
  2512. 2510
  2513. 2511
  2514. 2512
  2515. 2513
  2516. 2514
  2517. 2515
  2518. 2516
  2519. 2517
  2520. 2518
  2521. 2519
  2522. 2520
  2523. 2521
  2524. 2522
  2525. 2523
  2526. 2524
  2527. 2525
  2528. 2526
  2529. 2527
  2530. 2528
  2531. 2529
  2532. 2530
  2533. 2531
  2534. 2532
  2535. 2533
  2536. 2534
  2537. 2535
  2538. 2536
  2539. 2537
  2540. 2538
  2541. 2539
  2542. 2540
  2543. 2541
  2544. 2542
  2545. 2543
  2546. 2544
  2547. 2545
  2548. 2546
  2549. 2547
  2550. 2548
  2551. 2549
  2552. 2550
  2553. 2551
  2554. 2552
  2555. 2553
  2556. 2554
  2557. 2555
  2558. 2556
  2559. 2557
  2560. 2558
  2561. 2559
  2562. 2560
  2563. 2561
  2564. 2562
  2565. 2563
  2566. 2564
  2567. 2565
  2568. 2566
  2569. 2567
  2570. 2568
  2571. 2569
  2572. 2570
  2573. 2571
  2574. 2572
  2575. 2573
  2576. 2574
  2577. 2575
  2578. 2576
  2579. 2577
  2580. 2578
  2581. 2579
  2582. 2580
  2583. 2581
  2584. 2582
  2585. 2583
  2586. 2584
  2587. 2585
  2588. 2586
  2589. 2587
  2590. 2588
  2591. 2589
  2592. 2590
  2593. 2591
  2594. 2592
  2595. 2593
  2596. 2594
  2597. 2595
  2598. 2596
  2599. 2597
  2600. 2598
  2601. 2599
  2602. 2600
  2603. 2601
  2604. 2602
  2605. 2603
  2606. 2604
  2607. 2605
  2608. 2606
  2609. 2607
  2610. 2608
  2611. 2609
  2612. 2610
  2613. 2611
  2614. 2612
  2615. 2613
  2616. 2614
  2617. 2615
  2618. 2616
  2619. 2617
  2620. 2618
  2621. 2619
  2622. 2620
  2623. 2621
  2624. 2622
  2625. 2623
  2626. 2624
  2627. 2625
  2628. 2626
  2629. 2627
  2630. 2628
  2631. 2629
  2632. 2630
  2633. 2631
  2634. 2632
  2635. 2633
  2636. 2634
  2637. 2635
  2638. 2636
  2639. 2637
  2640. 2638
  2641. 2639
  2642. 2640
  2643. 2641
  2644. 2642
  2645. 2643
  2646. 2644
  2647. 2645
  2648. 2646
  2649. 2647
  2650. 2648
  2651. 2649
  2652. 2650
  2653. 2651
  2654. 2652
  2655. 2653
  2656. 2654
  2657. 2655
  2658. 2656
  2659. 2657
  2660. 2658
  2661. 2659
  2662. 2660
  2663. 2661
  2664. 2662
  2665. 2663
  2666. 2664
  2667. 2665
  2668. 2666
  2669. 2667
  2670. 2668
  2671. 2669
  2672. 2670
  2673. 2671
  2674. 2672
  2675. 2673
  2676. 2674
  2677. 2675
  2678. 2676
  2679. 2677
  2680. 2678
  2681. 2679
  2682. 2680
  2683. 2681
  2684. 2682
  2685. 2683
  2686. 2684
  2687. 2685
  2688. 2686
  2689. 2687
  2690. 2688
  2691. 2689
  2692. 2690
  2693. 2691
  2694. 2692
  2695. 2693
  2696. 2694
  2697. 2695
  2698. 2696
  2699. 2697
  2700. 2698
  2701. 2699
  2702. 2700
  2703. 2701
  2704. 2702
  2705. 2703
  2706. 2704
  2707. 2705
  2708. 2706
  2709. 2707
  2710. 2708
  2711. 2709
  2712. 2710
  2713. 2711
  2714. 2712
  2715. 2713
  2716. 2714
  2717. 2715
  2718. 2716
  2719. 2717
  2720. 2718
  2721. 2719
  2722. 2720
  2723. 2721
  2724. 2722
  2725. 2723
  2726. 2724
  2727. 2725
  2728. 2726
  2729. 2727
  2730. 2728
  2731. 2729
  2732. 2730
  2733. 2731
  2734. 2732
  2735. 2733
  2736. 2734
  2737. 2735
  2738. 2736
  2739. 2737
  2740. 2738
  2741. 2739
  2742. 2740
  2743. 2741
  2744. 2742
  2745. 2743
  2746. 2744
  2747. 2745
  2748. 2746
  2749. 2747
  2750. 2748
  2751. 2749
  2752. 2750
  2753. 2751
  2754. 2752
  2755. 2753
  2756. 2754
  2757. 2755
  2758. 2756
  2759. 2757
  2760. 2758
  2761. 2759
  2762. 2760
  2763. 2761
  2764. 2762
  2765. 2763
  2766. 2764
  2767. 2765
  2768. 2766
  2769. 2767
  2770. 2768
  2771. 2769
  2772. 2770
  2773. 2771
  2774. 2772
  2775. 2773
  2776. 2774
  2777. 2775
  2778. 2776
  2779. 2777
  2780. 2778
  2781. 2779
  2782. 2780
  2783. 2781
  2784. 2782
  2785. 2783
  2786. 2784
  2787. 2785
  2788. 2786
  2789. 2787
  2790. 2788
  2791. 2789
  2792. 2790
  2793. 2791
  2794. 2792
  2795. 2793
  2796. 2794
  2797. 2795
  2798. 2796
  2799. 2797
  2800. 2798
  2801. 2799
  2802. 2800
  2803. 2801
  2804. 2802
  2805. 2803
  2806. 2804
  2807. 2805
  2808. 2806
  2809. 2807
  2810. 2808
  2811. 2809
  2812. 2810
  2813. 2811
  2814. 2812
  2815. 2813
  2816. 2814
  2817. 2815
  2818. 2816
  2819. 2817
  2820. 2818
  2821. 2819
  2822. 2820
  2823. 2821
  2824. 2822
  2825. 2823
  2826. 2824
  2827. 2825
  2828. 2826
  2829. 2827
  2830. 2828
  2831. 2829
  2832. 2830
  2833. 2831
  2834. 2832
  2835. 2833
  2836. 2834
  2837. 2835
  2838. 2836
  2839. 2837
  2840. 2838
  2841. 2839
  2842. 2840
  2843. 2841
  2844. 2842
  2845. 2843
  2846. 2844
  2847. 2845
  2848. 2846
  2849. 2847
  2850. 2848
  2851. 2849
  2852. 2850
  2853. 2851
  2854. 2852
  2855. 2853
  2856. 2854
  2857. 2855
  2858. 2856
  2859. 2857
  2860. 2858
  2861. 2859
  2862. 2860
  2863. 2861
  2864. 2862
  2865. 2863
  2866. 2864
  2867. 2865
  2868. 2866
  2869. 2867
  2870. 2868
  2871. 2869
  2872. 2870
  2873. 2871
  2874. 2872
  2875. 2873
  2876. 2874
  2877. 2875
  2878. 2876
  2879. 2877
  2880. 2878
  2881. 2879
  2882. 2880
  2883. 2881
  2884. 2882
  2885. 2883
  2886. 2884
  2887. 2885
  2888. 2886
  2889. 2887
  2890. 2888
  2891. 2889
  2892. 2890
  2893. 2891
  2894. 2892
  2895. 2893
  2896. 2894
  2897. 2895
  2898. 2896
  2899. 2897
  2900. 2898
  2901. 2899
  2902. 2900
  2903. 2901
  2904. 2902
  2905. 2903
  2906. 2904
  2907. 2905
  2908. 2906
  2909. 2907
  2910. 2908
  2911. 2909
  2912. 2910
  2913. 2911
  2914. 2912
  2915. 2913
  2916. 2914
  2917. 2915
  2918. 2916
  2919. 2917
  2920. 2918
  2921. 2919
  2922. 2920
  2923. 2921
  2924. 2922
  2925. 2923
  2926. 2924
  2927. 2925
  2928. 2926
  2929. 2927
  2930. 2928
  2931. 2929
  2932. 2930
  2933. 2931
  2934. 2932
  2935. 2933
  2936. 2934
  2937. 2935
  2938. 2936
  2939. 2937
  2940. 2938
  2941. 2939
  2942. 2940
  2943. 2941
  2944. 2942
  2945. 2943
  2946. 2944
  2947. 2945
  2948. 2946
  2949. 2947
  2950. 2948
  2951. 2949
  2952. 2950
  2953. 2951
  2954. 2952
  2955. 2953
  2956. 2954
  2957. 2955
  2958. 2956
  2959. 2957
  2960. 2958
  2961. 2959
  2962. 2960
  2963. 2961
  2964. 2962
  2965. 2963
  2966. 2964
  2967. 2965
  2968. 2966
  2969. 2967
  2970. 2968
  2971. 2969
  2972. 2970
  2973. 2971
  2974. 2972
  2975. 2973
  2976. 2974
  2977. 2975
  2978. 2976
  2979. 2977
  2980. 2978
  2981. 2979
  2982. 2980
  2983. 2981
  2984. 2982
  2985. 2983
  2986. 2984
  2987. 2985
  2988. 2986
  2989. 2987
  2990. 2988
  2991. 2989
  2992. 2990
  2993. 2991
  2994. 2992
  2995. 2993
  2996. 2994
  2997. 2995
  2998. 2996
  2999. 2997
  3000. 2998
  3001. 2999
  3002. 3000
  3003. 3001
  3004. 3002
  3005. 3003
  3006. 3004
  3007. 3005
  3008. 3006
  3009. 3007
  3010. 3008
  3011. 3009
  3012. 3010
  3013. 3011
  3014. 3012
  3015. 3013
  3016. 3014
  3017. 3015
  3018. 3016
  3019. 3017
  3020. 3018
  3021. 3019
  3022. 3020
  3023. 3021
  3024. 3022
  3025. 3023
  3026. 3024
  3027. 3025
  3028. 3026
  3029. 3027
  3030. 3028
  3031. 3029
  3032. 3030
  3033. 3031
  3034. 3032
  3035. 3033
  3036. 3034
  3037. 3035
  3038. 3036
  3039. 3037
  3040. 3038
  3041. 3039
  3042. 3040
  3043. 3041
  3044. 3042
  3045. 3043
  3046. 3044
  3047. 3045
  3048. 3046
  3049. 3047
  3050. 3048
  3051. 3049
  3052. 3050
  3053. 3051
  3054. 3052
  3055. 3053
  3056. 3054
  3057. 3055
  3058. 3056
  3059. 3057
  3060. 3058
  3061. 3059
  3062. 3060
  3063. 3061
  3064. 3062
  3065. 3063
  3066. 3064
  3067. 3065
  3068. 3066
  3069. 3067
  3070. 3068
  3071. 3069
  3072. 3070
  3073. 3071
  3074. 3072
  3075. 3073
  3076. 3074
  3077. 3075
  3078. 3076
  3079. 3077
  3080. 3078
  3081. 3079
  3082. 3080
  3083. 3081
  3084. 3082
  3085. 3083
  3086. 3084
  3087. 3085
  3088. 3086
  3089. 3087
  3090. 3088
  3091. 3089
  3092. 3090
  3093. 3091
  3094. 3092
  3095. 3093
  3096. 3094
  3097. 3095
  3098. 3096
  3099. 3097
  3100. 3098
  3101. 3099
  3102. 3100
  3103. 3101
  3104. 3102
  3105. 3103
  3106. 3104
  3107. 3105
  3108. 3106
  3109. 3107
  3110. 3108
  3111. 3109
  3112. 3110
  3113. 3111
  3114. 3112
  3115. 3113
  3116. 3114
  3117. 3115
  3118. 3116
  3119. 3117
  3120. 3118
  3121. 3119
  3122. 3120
  3123. 3121
  3124. 3122
  3125. 3123
  3126. 3124
  3127. 3125
  3128. 3126
  3129. 3127
  3130. 3128
  3131. 3129
  3132. 3130
  3133. 3131
  3134. 3132
  3135. 3133
  3136. 3134
  3137. 3135
  3138. 3136
  3139. 3137
  3140. 3138
  3141. 3139
  3142. 3140
  3143. 3141
  3144. 3142
  3145. 3143
  3146. 3144
  3147. 3145
  3148. 3146
  3149. 3147
  3150. 3148
  3151. 3149
  3152. 3150
  3153. 3151
  3154. 3152
  3155. 3153
  3156. 3154
  3157. 3155
  3158. 3156
  3159. 3157
  3160. 3158
  3161. 3159
  3162. 3160
  3163. 3161
  3164. 3162
  3165. 3163
  3166. 3164
  3167. 3165
  3168. 3166
  3169. 3167
  3170. 3168
  3171. 3169
  3172. 3170
  3173. 3171
  3174. 3172
  3175. 3173
  3176. 3174
  3177. 3175
  3178. 3176
  3179. 3177
  3180. 3178
  3181. 3179
  3182. 3180
  3183. 3181
  3184. 3182
  3185. 3183
  3186. 3184
  3187. 3185
  3188. 3186
  3189. 3187
  3190. 3188
  3191. 3189
  3192. 3190
  3193. 3191
  3194. 3192
  3195. 3193
  3196. 3194
  3197. 3195
  3198. 3196
  3199. 3197
  3200. 3198
  3201. 3199
  3202. 3200
  3203. 3201
  3204. 3202
  3205. 3203
  3206. 3204
  3207. 3205
  3208. 3206
  3209. 3207
  3210. 3208
  3211. 3209
  3212. 3210
  3213. 3211
  3214. 3212
  3215. 3213
  3216. 3214
  3217. 3215
  3218. 3216
  3219. 3217
  3220. 3218
  3221. 3219
  3222. 3220
  3223. 3221
  3224. 3222
  3225. 3223
  3226. 3224
  3227. 3225
  3228. 3226
  3229. 3227
  3230. 3228
  3231. 3229
  3232. 3230
  3233. 3231
  3234. 3232
  3235. 3233
  3236. 3234
  3237. 3235
  3238. 3236
  3239. 3237
  3240. 3238
  3241. 3239
  3242. 3240
  3243. 3241
  3244. 3242
  3245. 3243
  3246. 3244
  3247. 3245
  3248. 3246
  3249. 3247
  3250. 3248
  3251. 3249
  3252. 3250
  3253. 3251
  3254. 3252
  3255. 3253
  3256. 3254
  3257. 3255
  3258. 3256
  3259. 3257
  3260. 3258
  3261. 3259
  3262. 3260
  3263. 3261
  3264. 3262
  3265. 3263
  3266. 3264
  3267. 3265
  3268. 3266
  3269. 3267
  3270. 3268
  3271. 3269
  3272. 3270
  3273. 3271
  3274. 3272
  3275. 3273
  3276. 3274
  3277. 3275
  3278. 3276
  3279. 3277
  3280. 3278
  3281. 3279
  3282. 3280
  3283. 3281
  3284. 3282
  3285. 3283
  3286. 3284
  3287. 3285
  3288. 3286
  3289. 3287
  3290. 3288
  3291. 3289
  3292. 3290
  3293. 3291
  3294. 3292
  3295. 3293
  3296. 3294
  3297. 3295
  3298. 3296
  3299. 3297
  3300. 3298
  3301. 3299
  3302. 3300
  3303. 3301
  3304. 3302
  3305. 3303
  3306. 3304
  3307. 3305
  3308. 3306
  3309. 3307
  3310. 3308
  3311. 3309
  3312. 3310
  3313. 3311
  3314. 3312
  3315. 3313
  3316. 3314
  3317. 3315
  3318. 3316
  3319. 3317
  3320. 3318
  3321. 3319
  3322. 3320
  3323. 3321
  3324. 3322
  3325. 3323
  3326. 3324
  3327. 3325
  3328. 3326
  3329. 3327
  3330. 3328
  3331. 3329
  3332. 3330
  3333. 3331
  3334. 3332
  3335. 3333
  3336. 3334
  3337. 3335
  3338. 3336
  3339. 3337
  3340. 3338
  3341. 3339
  3342. 3340
  3343. 3341
  3344. 3342
  3345. 3343
  3346. 3344
  3347. 3345
  3348. 3346
  3349. 3347
  3350. 3348
  3351. 3349
  3352. 3350
  3353. 3351
  3354. 3352
  3355. 3353
  3356. 3354
  3357. 3355
  3358. 3356
  3359. 3357
  3360. 3358
  3361. 3359
  3362. 3360
  3363. 3361
  3364. 3362
  3365. 3363
  3366. 3364
  3367. 3365
  3368. 3366
  3369. 3367
  3370. 3368
  3371. 3369
  3372. 3370
  3373. 3371
  3374. 3372
  3375. 3373
  3376. 3374
  3377. 3375
  3378. 3376
  3379. 3377
  3380. 3378
  3381. 3379
  3382. 3380
  3383. 3381
  3384. 3382
  3385. 3383
  3386. 3384
  3387. 3385
  3388. 3386
  3389. 3387
  3390. 3388
  3391. 3389
  3392. 3390
  3393. 3391
  3394. 3392
  3395. 3393
  3396. 3394
  3397. 3395
  3398. 3396
  3399. 3397
  3400. 3398
  3401. 3399
  3402. 3400
  3403. 3401
  3404. 3402
  3405. 3403
  3406. 3404
  3407. 3405
  3408. 3406
  3409. 3407
  3410. 3408
  3411. 3409
  3412. 3410
  3413. 3411
  3414. 3412
  3415. 3413
  3416. 3414
  3417. 3415
  3418. 3416
  3419. 3417
  3420. 3418
  3421. 3419
  3422. 3420
  3423. 3421
  3424. 3422
  3425. 3423
  3426. 3424
  3427. 3425
  3428. 3426
  3429. 3427
  3430. 3428
  3431. 3429
  3432. 3430
  3433. 3431
  3434. 3432
  3435. 3433
  3436. 3434
  3437. 3435
  3438. 3436
  3439. 3437
  3440. 3438
  3441. 3439
  3442. 3440
  3443. 3441
  3444. 3442
  3445. 3443
  3446. 3444
  3447. 3445
  3448. 3446
  3449. 3447
  3450. 3448
  3451. 3449
  3452. 3450
  3453. 3451
  3454. 3452
  3455. 3453
  3456. 3454
  3457. 3455
  3458. 3456
  3459. 3457
  3460. 3458
  3461. 3459
  3462. 3460
  3463. 3461
  3464. 3462
  3465. 3463
  3466. 3464
  3467. 3465
  3468. 3466
  3469. 3467
  3470. 3468
  3471. 3469
  3472. 3470
  3473. 3471
  3474. 3472
  3475. 3473
  3476. 3474
  3477. 3475
  3478. 3476
  3479. 3477
  3480. 3478
  3481. 3479
  3482. 3480
  3483. 3481
  3484. 3482
  3485. 3483
  3486. 3484
  3487. 3485
  3488. 3486
  3489. 3487
  3490. 3488
  3491. 3489
  3492. 3490
  3493. 3491
  3494. 3492
  3495. 3493
  3496. 3494
  3497. 3495
  3498. 3496
  3499. 3497
  3500. 3498
  3501. 3499
  3502. 3500
  3503. 3501
  3504. 3502
  3505. 3503
  3506. 3504
  3507. 3505
  3508. 3506
  3509. 3507
  3510. 3508
  3511. 3509
  3512. 3510
  3513. 3511
  3514. 3512
  3515. 3513
  3516. 3514
  3517. 3515
  3518. 3516
  3519. 3517
  3520. 3518
  3521. 3519
  3522. 3520
  3523. 3521
  3524. 3522
  3525. 3523
  3526. 3524
  3527. 3525
  3528. 3526
  3529. 3527
  3530. 3528
  3531. 3529
  3532. 3530
  3533. 3531
  3534. 3532
  3535. 3533
  3536. 3534
  3537. 3535
  3538. 3536
  3539. 3537
  3540. 3538
  3541. 3539
  3542. 3540
  3543. 3541
  3544. 3542
  3545. 3543
  3546. 3544
  3547. 3545
  3548. 3546
  3549. 3547
  3550. 3548
  3551. 3549
  3552. 3550
  3553. 3551
  3554. 3552
  3555. 3553
  3556. 3554
  3557. 3555
  3558. 3556
  3559. 3557
  3560. 3558
  3561. 3559
  3562. 3560
  3563. 3561
  3564. 3562
  3565. 3563
  3566. 3564
  3567. 3565
  3568. 3566
  3569. 3567
  3570. 3568
  3571. 3569
  3572. 3570
  3573. 3571
  3574. 3572
  3575. 3573
  3576. 3574
  3577. 3575
  3578. 3576
  3579. 3577
  3580. 3578
  3581. 3579
  3582. 3580
  3583. 3581
  3584. 3582
  3585. 3583
  3586. 3584
  3587. 3585
  3588. 3586
  3589. 3587
  3590. 3588
  3591. 3589
  3592. 3590
  3593. 3591
  3594. 3592
  3595. 3593
  3596. 3594
  3597. 3595
  3598. 3596
  3599. 3597
  3600. 3598
  3601. 3599
  3602. 3600
  3603. 3601
  3604. 3602
  3605. 3603
  3606. 3604
  3607. 3605
  3608. 3606
  3609. 3607
  3610. 3608
  3611. 3609
  3612. 3610
  3613. 3611
  3614. 3612
  3615. 3613
  3616. 3614
  3617. 3615
  3618. 3616
  3619. 3617
  3620. 3618
  3621. 3619
  3622. 3620
  3623. 3621
  3624. 3622
  3625. 3623
  3626. 3624
  3627. 3625
  3628. 3626
  3629. 3627
  3630. 3628
  3631. 3629
  3632. 3630
  3633. 3631
  3634. 3632
  3635. 3633
  3636. 3634
  3637. 3635
  3638. 3636
  3639. 3637
  3640. 3638
  3641. 3639
  3642. 3640
  3643. 3641
  3644. 3642
  3645. 3643
  3646. 3644
  3647. 3645
  3648. 3646
  3649. 3647
  3650. 3648
  3651. 3649
  3652. 3650
  3653. 3651
  3654. 3652
  3655. 3653
  3656. 3654
  3657. 3655
  3658. 3656
  3659. 3657
  3660. 3658
  3661. 3659
  3662. 3660
  3663. 3661
  3664. 3662
  3665. 3663
  3666. 3664
  3667. 3665
  3668. 3666
  3669. 3667
  3670. 3668
  3671. 3669
  3672. 3670
  3673. 3671
  3674. 3672
  3675. 3673
  3676. 3674
  3677. 3675
  3678. 3676
  3679. 3677
  3680. 3678
  3681. 3679
  3682. 3680
  3683. 3681
  3684. 3682
  3685. 3683
  3686. 3684
  3687. 3685
  3688. 3686
  3689. 3687
  3690. 3688
  3691. 3689
  3692. 3690
  3693. 3691
  3694. 3692
  3695. 3693
  3696. 3694
  3697. 3695
  3698. 3696
  3699. 3697
  3700. 3698
  3701. 3699
  3702. 3700
  3703. 3701
  3704. 3702
  3705. 3703
  3706. 3704
  3707. 3705
  3708. 3706
  3709. 3707
  3710. 3708
  3711. 3709
  3712. 3710
  3713. 3711
  3714. 3712
  3715. 3713
  3716. 3714
  3717. 3715
  3718. 3716
  3719. 3717
  3720. 3718
  3721. 3719
  3722. 3720
  3723. 3721
  3724. 3722
  3725. 3723
  3726. 3724
  3727. 3725
  3728. 3726
  3729. 3727
  3730. 3728
  3731. 3729
  3732. 3730
  3733. 3731
  3734. 3732
  3735. 3733
  3736. 3734
  3737. 3735
  3738. 3736
  3739. 3737
  3740. 3738
  3741. 3739
  3742. 3740
  3743. 3741
  3744. 3742
  3745. 3743
  3746. 3744
  3747. 3745
  3748. 3746
  3749. 3747
  3750. 3748
  3751. 3749
  3752. 3750
  3753. 3751
  3754. 3752
  3755. 3753
  3756. 3754
  3757. 3755
  3758. 3756
  3759. 3757
  3760. 3758
  3761. 3759
  3762. 3760
  3763. 3761
  3764. 3762
  3765. 3763
  3766. 3764
  3767. 3765
  3768. 3766
  3769. 3767
  3770. 3768
  3771. 3769
  3772. 3770
  3773. 3771
  3774. 3772
  3775. 3773
  3776. 3774
  3777. 3775
  3778. 3776
  3779. 3777
  3780. 3778
  3781. 3779
  3782. 3780
  3783. 3781
  3784. 3782
  3785. 3783
  3786. 3784
  3787. 3785
  3788. 3786
  3789. 3787
  3790. 3788
  3791. 3789
  3792. 3790
  3793. 3791
  3794. 3792
  3795. 3793
  3796. 3794
  3797. 3795
  3798. 3796
  3799. 3797
  3800. 3798
  3801. 3799
  3802. 3800
  3803. 3801
  3804. 3802
  3805. 3803
  3806. 3804
  3807. 3805
  3808. 3806
  3809. 3807
  3810. 3808
  3811. 3809
  3812. 3810
  3813. 3811
  3814. 3812
  3815. 3813
  3816. 3814
  3817. 3815
  3818. 3816
  3819. 3817
  3820. 3818
  3821. 3819
  3822. 3820
  3823. 3821
  3824. 3822
  3825. 3823
  3826. 3824
  3827. 3825
  3828. 3826
  3829. 3827
  3830. 3828
  3831. 3829
  3832. 3830
  3833. 3831
  3834. 3832
  3835. 3833
  3836. 3834
  3837. 3835
  3838. 3836
  3839. 3837
  3840. 3838
  3841. 3839
  3842. 3840
  3843. 3841
  3844. 3842
  3845. 3843
  3846. 3844
  3847. 3845
  3848. 3846
  3849. 3847
  3850. 3848
  3851. 3849
  3852. 3850
  3853. 3851
  3854. 3852
  3855. 3853
  3856. 3854
  3857. 3855
  3858. 3856
  3859. 3857
  3860. 3858
  3861. 3859
  3862. 3860
  3863. 3861
  3864. 3862
  3865. 3863
  3866. 3864
  3867. 3865
  3868. 3866
  3869. 3867
  3870. 3868
  3871. 3869
  3872. 3870
  3873. 3871
  3874. 3872
  3875. 3873
  3876. 3874
  3877. 3875
  3878. 3876
  3879. 3877
  3880. 3878
  3881. 3879
  3882. 3880
  3883. 3881
  3884. 3882
  3885. 3883
  3886. 3884
  3887. 3885
  3888. 3886
  3889. 3887
  3890. 3888
  3891. 3889
  3892. 3890
  3893. 3891
  3894. 3892
  3895. 3893
  3896. 3894
  3897. 3895
  3898. 3896
  3899. 3897
  3900. 3898
  3901. 3899
  3902. 3900
  3903. 3901
  3904. 3902
  3905. 3903
  3906. 3904
  3907. 3905
  3908. 3906
  3909. 3907
  3910. 3908
  3911. 3909
  3912. 3910
  3913. 3911
  3914. 3912
  3915. 3913
  3916. 3914
  3917. 3915
  3918. 3916
  3919. 3917
  3920. 3918
  3921. 3919
  3922. 3920
  3923. 3921
  3924. 3922
  3925. 3923
  3926. 3924
  3927. 3925
  3928. 3926
  3929. 3927
  3930. 3928
  3931. 3929
  3932. 3930
  3933. 3931
  3934. 3932
  3935. 3933
  3936. 3934
  3937. 3935
  3938. 3936
  3939. 3937
  3940. 3938
  3941. 3939
  3942. 3940
  3943. 3941
  3944. 3942
  3945. 3943
  3946. 3944
  3947. 3945
  3948. 3946
  3949. 3947
  3950. 3948
  3951. 3949
  3952. 3950
  3953. 3951
  3954. 3952
  3955. 3953
  3956. 3954
  3957. 3955
  3958. 3956
  3959. 3957
  3960. 3958
  3961. 3959
  3962. 3960
  3963. 3961
  3964. 3962
  3965. 3963
  3966. 3964
  3967. 3965
  3968. 3966
  3969. 3967
  3970. 3968
  3971. 3969
  3972. 3970
  3973. 3971
  3974. 3972
  3975. 3973
  3976. 3974
  3977. 3975
  3978. 3976
  3979. 3977
  3980. 3978
  3981. 3979
  3982. 3980
  3983. 3981
  3984. 3982
  3985. 3983
  3986. 3984
  3987. 3985
  3988. 3986
  3989. 3987
  3990. 3988
  3991. 3989
  3992. 3990
  3993. 3991
  3994. 3992
  3995. 3993
  3996. 3994
  3997. 3995
  3998. 3996
  3999. 3997
  4000. 3998
  4001. 3999
  4002. 4000
  4003. 4001
  4004. 4002
  4005. 4003
  4006. 4004
  4007. 4005
  4008. 4006
  4009. 4007
  4010. 4008
  4011. 4009
  4012. 4010
  4013. 4011
  4014. 4012
  4015. 4013
  4016. 4014
  4017. 4015
  4018. 4016
  4019. 4017
  4020. 4018
  4021. 4019
  4022. 4020
  4023. 4021
  4024. 4022
  4025. 4023
  4026. 4024
  4027. 4025
  4028. 4026
  4029. 4027
  4030. 4028
  4031. 4029
  4032. 4030
  4033. 4031
  4034. 4032
  4035. 4033
  4036. 4034
  4037. 4035
  4038. 4036
  4039. 4037
  4040. 4038
  4041. 4039
  4042. 4040
  4043. 4041
  4044. 4042
  4045. 4043
  4046. 4044
  4047. 4045
  4048. 4046
  4049. 4047
  4050. 4048
  4051. 4049
  4052. 4050
  4053. 4051
  4054. 4052
  4055. 4053
  4056. 4054
  4057. 4055
  4058. 4056
  4059. 4057
  4060. 4058
  4061. 4059
  4062. 4060
  4063. 4061
  4064. 4062
  4065. 4063
  4066. 4064
  4067. 4065
  4068. 4066
  4069. 4067
  4070. 4068
  4071. 4069
  4072. 4070
  4073. 4071
  4074. 4072
  4075. 4073
  4076. 4074
  4077. 4075
  4078. 4076
  4079. 4077
  4080. 4078
  4081. 4079
  4082. 4080
  4083. 4081
  4084. 4082
  4085. 4083
  4086. 4084
  4087. 4085
  4088. 4086
  4089. 4087
  4090. 4088
  4091. 4089
  4092. 4090
  4093. 4091
  4094. 4092
  4095. 4093
  4096. 4094
  4097. 4095
  4098. 4096
  4099. 4097
  4100. 4098
  4101. 4099
  4102. 4100
  4103. 4101
  4104. 4102
  4105. 4103
  4106. 4104
  4107. 4105
  4108. 4106
  4109. 4107
  4110. 4108
  4111. 4109
  4112. 4110
  4113. 4111
  4114. 4112
  4115. 4113
  4116. 4114
  4117. 4115
  4118. 4116
  4119. 4117
  4120. 4118
  4121. 4119
  4122. 4120
  4123. 4121
  4124. 4122
  4125. 4123
  4126. 4124
  4127. 4125
  4128. 4126
  4129. 4127
  4130. 4128
  4131. 4129
  4132. 4130
  4133. 4131
  4134. 4132
  4135. 4133
  4136. 4134
  4137. 4135
  4138. 4136
  4139. 4137
  4140. 4138
  4141. 4139
  4142. 4140
  4143. 4141
  4144. 4142
  4145. 4143
  4146. 4144
  4147. 4145
  4148. 4146
  4149. 4147
  4150. 4148
  4151. 4149
  4152. 4150
  4153. 4151
  4154. 4152
  4155. 4153
  4156. 4154
  4157. 4155
  4158. 4156
  4159. 4157
  4160. 4158
  4161. 4159
  4162. 4160
  4163. 4161
  4164. 4162
  4165. 4163
  4166. 4164
  4167. 4165
  4168. 4166
  4169. 4167
  4170. 4168
  4171. 4169
  4172. 4170
  4173. 4171
  4174. 4172
  4175. 4173
  4176. 4174
  4177. 4175
  4178. 4176
  4179. 4177
  4180. 4178
  4181. 4179
  4182. 4180
  4183. 4181
  4184. 4182
  4185. 4183
  4186. 4184
  4187. 4185
  4188. 4186
  4189. 4187
  4190. 4188
  4191. 4189
  4192. 4190
  4193. 4191
  4194. 4192
  4195. 4193
  4196. 4194
  4197. 4195
  4198. 4196
  4199. 4197
  4200. 4198
  4201. 4199
  4202. 4200
  4203. 4201
  4204. 4202
  4205. 4203
  4206. 4204
  4207. 4205
  4208. 4206
  4209. 4207
  4210. 4208
  4211. 4209
  4212. 4210
  4213. 4211
  4214. 4212
  4215. 4213
  4216. 4214
  4217. 4215
  4218. 4216
  4219. 4217
  4220. 4218
  4221. 4219
  4222. 4220
  4223. 4221
  4224. 4222
  4225. 4223
  4226. 4224
  4227. 4225
  4228. 4226
  4229. 4227
  4230. 4228
  4231. 4229
  4232. 4230
  4233. 4231
  4234. 4232
  4235. 4233
  4236. 4234
  4237. 4235
  4238. 4236
  4239. 4237
  4240. 4238
  4241. 4239
  4242. 4240
  4243. 4241
  4244. 4242
  4245. 4243
  4246. 4244
  4247. 4245
  4248. 4246
  4249. 4247
  4250. 4248
  4251. 4249
  4252. 4250
  4253. 4251
  4254. 4252
  4255. 4253
  4256. 4254
  4257. 4255
  4258. 4256
  4259. 4257
  4260. 4258
  4261. 4259
  4262. 4260
  4263. 4261
  4264. 4262
  4265. 4263
  4266. 4264
  4267. 4265
  4268. 4266
  4269. 4267
  4270. 4268
  4271. 4269
  4272. 4270
  4273. 4271
  4274. 4272
  4275. 4273
  4276. 4274
  4277. 4275
  4278. 4276
  4279. 4277
  4280. 4278
  4281. 4279
  4282. 4280
  4283. 4281
  4284. 4282
  4285. 4283
  4286. 4284
  4287. 4285
  4288. 4286
  4289. 4287
  4290. 4288
  4291. 4289
  4292. 4290
  4293. 4291
  4294. 4292
  4295. 4293
  4296. 4294
  4297. 4295
  4298. 4296
  4299. 4297
  4300. 4298
  4301. 4299
  4302. 4300
  4303. 4301
  4304. 4302
  4305. 4303
  4306. 4304
  4307. 4305
  4308. 4306
  4309. 4307
  4310. 4308
  4311. 4309
  4312. 4310
  4313. 4311
  4314. 4312
  4315. 4313
  4316. 4314
  4317. 4315
  4318. 4316
  4319. 4317
  4320. 4318
  4321. 4319
  4322. 4320
  4323. 4321
  4324. 4322
  4325. 4323
  4326. 4324
  4327. 4325
  4328. 4326
  4329. 4327
  4330. 4328
  4331. 4329
  4332. 4330
  4333. 4331
  4334. 4332
  4335. 4333
  4336. 4334
  4337. 4335
  4338. 4336
  4339. 4337
  4340. 4338
  4341. 4339
  4342. 4340
  4343. 4341
  4344. 4342
  4345. 4343
  4346. 4344
  4347. 4345
  4348. 4346
  4349. 4347
  4350. 4348
  4351. 4349
  4352. 4350
  4353. 4351
  4354. 4352
  4355. 4353
  4356. 4354
  4357. 4355
  4358. 4356
  4359. 4357
  4360. 4358
  4361. 4359
  4362. 4360
  4363. 4361
  4364. 4362
  4365. 4363
  4366. 4364
  4367. 4365
  4368. 4366
  4369. 4367
  4370. 4368
  4371. 4369
  4372. 4370
  4373. 4371
  4374. 4372
  4375. 4373
  4376. 4374
  4377. 4375
  4378. 4376
  4379. 4377
  4380. 4378
  4381. 4379
  4382. 4380
  4383. 4381
  4384. 4382
  4385. 4383
  4386. 4384
  4387. 4385
  4388. 4386
  4389. 4387
  4390. 4388
  4391. 4389
  4392. 4390
  4393. 4391
  4394. 4392
  4395. 4393
  4396. 4394
  4397. 4395
  4398. 4396
  4399. 4397
  4400. 4398
  4401. 4399
  4402. 4400
  4403. 4401
  4404. 4402
  4405. 4403
  4406. 4404
  4407. 4405
  4408. 4406
  4409. 4407
  4410. 4408
  4411. 4409
  4412. 4410
  4413. 4411
  4414. 4412
  4415. 4413
  4416. 4414
  4417. 4415
  4418. 4416
  4419. 4417
  4420. 4418
  4421. 4419
  4422. 4420
  4423. 4421
  4424. 4422
  4425. 4423
  4426. 4424
  4427. 4425
  4428. 4426
  4429. 4427
  4430. 4428
  4431. 4429
  4432. 4430
  4433. 4431
  4434. 4432
  4435. 4433
  4436. 4434
  4437. 4435
  4438. 4436
  4439. 4437
  4440. 4438
  4441. 4439
  4442. 4440
  4443. 4441
  4444. 4442
  4445. 4443
  4446. 4444
  4447. 4445
  4448. 4446
  4449. 4447
  4450. 4448
  4451. 4449
  4452. 4450
  4453. 4451
  4454. 4452
  4455. 4453
  4456. 4454
  4457. 4455
  4458. 4456
  4459. 4457
  4460. 4458
  4461. 4459
  4462. 4460
  4463. 4461
  4464. 4462
  4465. 4463
  4466. 4464
  4467. 4465
  4468. 4466
  4469. 4467
  4470. 4468
  4471. 4469
  4472. 4470
  4473. 4471
  4474. 4472
  4475. 4473
  4476. 4474
  4477. 4475
  4478. 4476
  4479. 4477
  4480. 4478
  4481. 4479
  4482. 4480
  4483. 4481
  4484. 4482
  4485. 4483
  4486. 4484
  4487. 4485
  4488. 4486
  4489. 4487
  4490. 4488
  4491. 4489
  4492. 4490
  4493. 4491
  4494. 4492
  4495. 4493
  4496. 4494
  4497. 4495
  4498. 4496
  4499. 4497
  4500. 4498
  4501. 4499
  4502. 4500
  4503. 4501
  4504. 4502
  4505. 4503
  4506. 4504
  4507. 4505
  4508. 4506
  4509. 4507
  4510. 4508
  4511. 4509
  4512. 4510
  4513. 4511
  4514. 4512
  4515. 4513
  4516. 4514
  4517. 4515
  4518. 4516
  4519. 4517
  4520. 4518
  4521. 4519
  4522. 4520
  4523. 4521
  4524. 4522
  4525. 4523
  4526. 4524
  4527. 4525
  4528. 4526
  4529. 4527
  4530. 4528
  4531. 4529
  4532. 4530
  4533. 4531
  4534. 4532
  4535. 4533
  4536. 4534
  4537. 4535
  4538. 4536
  4539. 4537
  4540. 4538
  4541. 4539
  4542. 4540
  4543. 4541
  4544. 4542
  4545. 4543
  4546. 4544
  4547. 4545
  4548. 4546
  4549. 4547
  4550. 4548
  4551. 4549
  4552. 4550
  4553. 4551
  4554. 4552
  4555. 4553
  4556. 4554
  4557. 4555
  4558. 4556
  4559. 4557
  4560. 4558
  4561. 4559
  4562. 4560
  4563. 4561
  4564. 4562
  4565. 4563
  4566. 4564
  4567. 4565
  4568. 4566
  4569. 4567
  4570. 4568
  4571. 4569
  4572. 4570
  4573. 4571
  4574. 4572
  4575. 4573
  4576. 4574
  4577. 4575
  4578. 4576
  4579. 4577
  4580. 4578
  4581. 4579
  4582. 4580
  4583. 4581
  4584. 4582
  4585. 4583
  4586. 4584
  4587. 4585
  4588. 4586
  4589. 4587
  4590. 4588
  4591. 4589
  4592. 4590
  4593. 4591
  4594. 4592
  4595. 4593
  4596. 4594
  4597. 4595
  4598. 4596
  4599. 4597
  4600. 4598
  4601. 4599
  4602. 4600
  4603. 4601
  4604. 4602
  4605. 4603
  4606. 4604
  4607. 4605
  4608. 4606
  4609. 4607
  4610. 4608
  4611. 4609
  4612. 4610
  4613. 4611
  4614. 4612
  4615. 4613
  4616. 4614
  4617. 4615
  4618. 4616
  4619. 4617
  4620. 4618
  4621. 4619
  4622. 4620
  4623. 4621
  4624. 4622
  4625. 4623
  4626. 4624
  4627. 4625
  4628. 4626
  4629. 4627
  4630. 4628
  4631. 4629
  4632. 4630
  4633. 4631
  4634. 4632
  4635. 4633
  4636. 4634
  4637. 4635
  4638. 4636
  4639. 4637
  4640. 4638
  4641. 4639
  4642. 4640
  4643. 4641
  4644. 4642
  4645. 4643
  4646. 4644
  4647. 4645
  4648. 4646
  4649. 4647
  4650. 4648
  4651. 4649
  4652. 4650
  4653. 4651
  4654. 4652
  4655. 4653
  4656. 4654
  4657. 4655
  4658. 4656
  4659. 4657
  4660. 4658
  4661. 4659
  4662. 4660
  4663. 4661
  4664. 4662
  4665. 4663
  4666. 4664
  4667. 4665
  4668. 4666
  4669. 4667
  4670. 4668
  4671. 4669
  4672. 4670
  4673. 4671
  4674. 4672
  4675. 4673
  4676. 4674
  4677. 4675
  4678. 4676
  4679. 4677
  4680. 4678
  4681. 4679
  4682. 4680
  4683. 4681
  4684. 4682
  4685. 4683
  4686. 4684
  4687. 4685
  4688. 4686
  4689. 4687
  4690. 4688
  4691. 4689
  4692. 4690
  4693. 4691
  4694. 4692
  4695. 4693
  4696. 4694
  4697. 4695
  4698. 4696
  4699. 4697
  4700. 4698
  4701. 4699
  4702. 4700
  4703. 4701
  4704. 4702
  4705. 4703
  4706. 4704
  4707. 4705
  4708. 4706
  4709. 4707
  4710. 4708
  4711. 4709
  4712. 4710
  4713. 4711
  4714. 4712
  4715. 4713
  4716. 4714
  4717. 4715
  4718. 4716
  4719. 4717
  4720. 4718
  4721. 4719
  4722. 4720
  4723. 4721
  4724. 4722
  4725. 4723
  4726. 4724
  4727. 4725
  4728. 4726
  4729. 4727
  4730. 4728
  4731. 4729
  4732. 4730
  4733. 4731
  4734. 4732
  4735. 4733
  4736. 4734
  4737. 4735
  4738. 4736
  4739. 4737
  4740. 4738
  4741. 4739
  4742. 4740
  4743. 4741
  4744. 4742
  4745. 4743
  4746. 4744
  4747. 4745
  4748. 4746
  4749. 4747
  4750. 4748
  4751. 4749
  4752. 4750
  4753. 4751
  4754. 4752
  4755. 4753
  4756. 4754
  4757. 4755
  4758. 4756
  4759. 4757
  4760. 4758
  4761. 4759
  4762. 4760
  4763. 4761
  4764. 4762
  4765. 4763
  4766. 4764
  4767. 4765
  4768. 4766
  4769. 4767
  4770. 4768
  4771. 4769
  4772. 4770
  4773. 4771
  4774. 4772
  4775. 4773
  4776. 4774
  4777. 4775
  4778. 4776
  4779. 4777
  4780. 4778
  4781. 4779
  4782. 4780
  4783. 4781
  4784. 4782
  4785. 4783
  4786. 4784
  4787. 4785
  4788. 4786
  4789. 4787
  4790. 4788
  4791. 4789
  4792. 4790
  4793. 4791
  4794. 4792
  4795. 4793
  4796. 4794
  4797. 4795
  4798. 4796
  4799. 4797
  4800. 4798
  4801. 4799
  4802. 4800
  4803. 4801
  4804. 4802
  4805. 4803
  4806. 4804
  4807. 4805
  4808. 4806
  4809. 4807
  4810. 4808
  4811. 4809
  4812. 4810
  4813. 4811
  4814. 4812
  4815. 4813
  4816. 4814
  4817. 4815
  4818. 4816
  4819. 4817
  4820. 4818
  4821. 4819
  4822. 4820
  4823. 4821
  4824. 4822
  4825. 4823
  4826. 4824
  4827. 4825
  4828. 4826
  4829. 4827
  4830. 4828
  4831. 4829
  4832. 4830
  4833. 4831
  4834. 4832
  4835. 4833
  4836. 4834
  4837. 4835
  4838. 4836
  4839. 4837
  4840. 4838
  4841. 4839
  4842. 4840
  4843. 4841
  4844. 4842
  4845. 4843
  4846. 4844
  4847. 4845
  4848. 4846
  4849. 4847
  4850. 4848
  4851. 4849
  4852. 4850
  4853. 4851
  4854. 4852
  4855. 4853
  4856. 4854
  4857. 4855
  4858. 4856
  4859. 4857
  4860. 4858
  4861. 4859
  4862. 4860
  4863. 4861
  4864. 4862
  4865. 4863
  4866. 4864
  4867. 4865
  4868. 4866
  4869. 4867
  4870. 4868
  4871. 4869
  4872. 4870
  4873. 4871
  4874. 4872
  4875. 4873
  4876. 4874
  4877. 4875
  4878. 4876
  4879. 4877
  4880. 4878
  4881. 4879
  4882. 4880
  4883. 4881
  4884. 4882
  4885. 4883
  4886. 4884
  4887. 4885
  4888. 4886
  4889. 4887
  4890. 4888
  4891. 4889
  4892. 4890
  4893. 4891
  4894. 4892
  4895. 4893
  4896. 4894
  4897. 4895
  4898. 4896
  4899. 4897
  4900. 4898
  4901. 4899
  4902. 4900
  4903. 4901
  4904. 4902
  4905. 4903
  4906. 4904
  4907. 4905
  4908. 4906
  4909. 4907
  4910. 4908
  4911. 4909
  4912. 4910
  4913. 4911
  4914. 4912
  4915. 4913
  4916. 4914
  4917. 4915
  4918. 4916
  4919. 4917
  4920. 4918
  4921. 4919
  4922. 4920
  4923. 4921
  4924. 4922
  4925. 4923
  4926. 4924
  4927. 4925
  4928. 4926
  4929. 4927
  4930. 4928
  4931. 4929
  4932. 4930
  4933. 4931
  4934. 4932
  4935. 4933
  4936. 4934
  4937. 4935
  4938. 4936
  4939. 4937
  4940. 4938
  4941. 4939
  4942. 4940
  4943. 4941
  4944. 4942
  4945. 4943
  4946. 4944
  4947. 4945
  4948. 4946
  4949. 4947
  4950. 4948
  4951. 4949
  4952. 4950
  4953. 4951
  4954. 4952
  4955. 4953
  4956. 4954
  4957. 4955
  4958. 4956
  4959. 4957
  4960. 4958
  4961. 4959
  4962. 4960
  4963. 4961
  4964. 4962
  4965. 4963
  4966. 4964
  4967. 4965
  4968. 4966
  4969. 4967
  4970. 4968
  4971. 4969
  4972. 4970
  4973. 4971
  4974. 4972
  4975. 4973
  4976. 4974
  4977. 4975
  4978. 4976
  4979. 4977
  4980. 4978
  4981. 4979
  4982. 4980
  4983. 4981
  4984. 4982
  4985. 4983
  4986. 4984
  4987. 4985
  4988. 4986
  4989. 4987
  4990. 4988
  4991. 4989
  4992. 4990
  4993. 4991
  4994. 4992
  4995. 4993
  4996. 4994
  4997. 4995
  4998. 4996
  4999. 4997
  5000. 4998
  5001. 4999
  5002. 5000
  5003. 5001
  5004. 5002
  5005. 5003
  5006. 5004
  5007. 5005
  5008. 5006
  5009. 5007
  5010. 5008
  5011. 5009
  5012. 5010
  5013. 5011
  5014. 5012
  5015. 5013
  5016. 5014
  5017. 5015
  5018. 5016
  5019. 5017
  5020. 5018
  5021. 5019
  5022. 5020
  5023. 5021
  5024. 5022
  5025. 5023
  5026. 5024
  5027. 5025
  5028. 5026
  5029. 5027
  5030. 5028
  5031. 5029
  5032. 5030
  5033. 5031
  5034. 5032
  5035. 5033
  5036. 5034
  5037. 5035
  5038. 5036
  5039. 5037
  5040. 5038
  5041. 5039
  5042. 5040
  5043. 5041
  5044. 5042
  5045. 5043
  5046. 5044
  5047. 5045
  5048. 5046
  5049. 5047
  5050. 5048
  5051. 5049
  5052. 5050
  5053. 5051
  5054. 5052
  5055. 5053
  5056. 5054
  5057. 5055
  5058. 5056
  5059. 5057
  5060. 5058
  5061. 5059
  5062. 5060
  5063. 5061
  5064. 5062
  5065. 5063
  5066. 5064
  5067. 5065
  5068. 5066
  5069. 5067
  5070. 5068
  5071. 5069
  5072. 5070
  5073. 5071
  5074. 5072
  5075. 5073
  5076. 5074
  5077. 5075
  5078. 5076
  5079. 5077
  5080. 5078
  5081. 5079
  5082. 5080
  5083. 5081
  5084. 5082
  5085. 5083
  5086. 5084
  5087. 5085
  5088. 5086
  5089. 5087
  5090. 5088
  5091. 5089
  5092. 5090
  5093. 5091
  5094. 5092
  5095. 5093
  5096. 5094
  5097. 5095
  5098. 5096
  5099. 5097
  5100. 5098
  5101. 5099
  5102. 5100
  5103. 5101
  5104. 5102
  5105. 5103
  5106. 5104
  5107. 5105
  5108. 5106
  5109. 5107
  5110. 5108
  5111. 5109
  5112. 5110
  5113. 5111
  5114. 5112
  5115. 5113
  5116. 5114
  5117. 5115
  5118. 5116
  5119. 5117
  5120. 5118
  5121. 5119
  5122. 5120
  5123. 5121
  5124. 5122
  5125. 5123
  5126. 5124
  5127. 5125
  5128. 5126
  5129. 5127
  5130. 5128
  5131. 5129
  5132. 5130
  5133. 5131
  5134. 5132
  5135. 5133
  5136. 5134
  5137. 5135
  5138. 5136
  5139. 5137
  5140. 5138
  5141. 5139
  5142. 5140
  5143. 5141
  5144. 5142
  5145. 5143
  5146. 5144
  5147. 5145
  5148. 5146
  5149. 5147
  5150. 5148
  5151. 5149
  5152. 5150
  5153. 5151
  5154. 5152
  5155. 5153
  5156. 5154
  5157. 5155
  5158. 5156
  5159. 5157
  5160. 5158
  5161. 5159
  5162. 5160
  5163. 5161
  5164. 5162
  5165. 5163
  5166. 5164
  5167. 5165
  5168. 5166
  5169. 5167
  5170. 5168
  5171. 5169
  5172. 5170
  5173. 5171
  5174. 5172
  5175. 5173
  5176. 5174
  5177. 5175
  5178. 5176
  5179. 5177
  5180. 5178
  5181. 5179
  5182. 5180
  5183. 5181
  5184. 5182
  5185. 5183
  5186. 5184
  5187. 5185
  5188. 5186
  5189. 5187
  5190. 5188
  5191. 5189
  5192. 5190
  5193. 5191
  5194. 5192
  5195. 5193
  5196. 5194
  5197. 5195
  5198. 5196
  5199. 5197
  5200. 5198
  5201. 5199
  5202. 5200
  5203. 5201
  5204. 5202
  5205. 5203
  5206. 5204
  5207. 5205
  5208. 5206
  5209. 5207
  5210. 5208
  5211. 5209
  5212. 5210
  5213. 5211
  5214. 5212
  5215. 5213
  5216. 5214
  5217. 5215
  5218. 5216
  5219. 5217
  5220. 5218
  5221. 5219
  5222. 5220
  5223. 5221
  5224. 5222
  5225. 5223
  5226. 5224
  5227. 5225
  5228. 5226
  5229. 5227
  5230. 5228
  5231. 5229
  5232. 5230
  5233. 5231
  5234. 5232
  5235. 5233
  5236. 5234
  5237. 5235
  5238. 5236
  5239. 5237
  5240. 5238
  5241. 5239
  5242. 5240
  5243. 5241
  5244. 5242
  5245. 5243
  5246. 5244
  5247. 5245
  5248. 5246
  5249. 5247
  5250. 5248
  5251. 5249
  5252. 5250
  5253. 5251
  5254. 5252
  5255. 5253
  5256. 5254
  5257. 5255
  5258. 5256
  5259. 5257
  5260. 5258
  5261. 5259
  5262. 5260
  5263. 5261
  5264. 5262
  5265. 5263
  5266. 5264
  5267. 5265
  5268. 5266
  5269. 5267
  5270. 5268
  5271. 5269
  5272. 5270
  5273. 5271
  5274. 5272
  5275. 5273
  5276. 5274
  5277. 5275
  5278. 5276
  5279. 5277
  5280. 5278
  5281. 5279
  5282. 5280
  5283. 5281
  5284. 5282
  5285. 5283
  5286. 5284
  5287. 5285
  5288. 5286
  5289. 5287
  5290. 5288
  5291. 5289
  5292. 5290
  5293. 5291
  5294. 5292
  5295. 5293
  5296. 5294
  5297. 5295
  5298. 5296
  5299. 5297
  5300. 5298
  5301. 5299
  5302. 5300
  5303. 5301
  5304. 5302
  5305. 5303
  5306. 5304
  5307. 5305
  5308. 5306
  5309. 5307
  5310. 5308
  5311. 5309
  5312. 5310
  5313. 5311
  5314. 5312
  5315. 5313
  5316. 5314
  5317. 5315
  5318. 5316
  5319. 5317
  5320. 5318
  5321. 5319
  5322. 5320
  5323. 5321
  5324. 5322
  5325. 5323
  5326. 5324
  5327. 5325
  5328. 5326
  5329. 5327
  5330. 5328
  5331. 5329
  5332. 5330
  5333. 5331
  5334. 5332
  5335. 5333
  5336. 5334
  5337. 5335
  5338. 5336
  5339. 5337
  5340. 5338
  5341. 5339
  5342. 5340
  5343. 5341
  5344. 5342
  5345. 5343
  5346. 5344
  5347. 5345
  5348. 5346
  5349. 5347
  5350. 5348
  5351. 5349
  5352. 5350
  5353. 5351
  5354. 5352
  5355. 5353
  5356. 5354
  5357. 5355
  5358. 5356
  5359. 5357
  5360. 5358
  5361. 5359
  5362. 5360
  5363. 5361
  5364. 5362
  5365. 5363
  5366. 5364
  5367. 5365
  5368. 5366
  5369. 5367
  5370. 5368
  5371. 5369
  5372. 5370
  5373. 5371
  5374. 5372
  5375. 5373
  5376. 5374
  5377. 5375
  5378. 5376
  5379. 5377
  5380. 5378
  5381. 5379
  5382. 5380
  5383. 5381
  5384. 5382
  5385. 5383
  5386. 5384
  5387. 5385
  5388. 5386
  5389. 5387
  5390. 5388
  5391. 5389
  5392. 5390
  5393. 5391
  5394. 5392
  5395. 5393
  5396. 5394
  5397. 5395
  5398. 5396
  5399. 5397
  5400. 5398
  5401. 5399
  5402. 5400
  5403. 5401
  5404. 5402
  5405. 5403
  5406. 5404
  5407. 5405
  5408. 5406
  5409. 5407
  5410. 5408
  5411. 5409
  5412. 5410
  5413. 5411
  5414. 5412
  5415. 5413
  5416. 5414
  5417. 5415
  5418. 5416
  5419. 5417
  5420. 5418
  5421. 5419
  5422. 5420
  5423. 5421
  5424. 5422
  5425. 5423
  5426. 5424
  5427. 5425
  5428. 5426
  5429. 5427
  5430. 5428
  5431. 5429
  5432. 5430
  5433. 5431
  5434. 5432
  5435. 5433
  5436. 5434
  5437. 5435
  5438. 5436
  5439. 5437
  5440. 5438
  5441. 5439
  5442. 5440
  5443. 5441
  5444. 5442
  5445. 5443
  5446. 5444
  5447. 5445
  5448. 5446
  5449. 5447
  5450. 5448
  5451. 5449
  5452. 5450
  5453. 5451
  5454. 5452
  5455. 5453
  5456. 5454
  5457. 5455
  5458. 5456
  5459. 5457
  5460. 5458
  5461. 5459
  5462. 5460
  5463. 5461
  5464. 5462
  5465. 5463
  5466. 5464
  5467. 5465
  5468. 5466
  5469. 5467
  5470. 5468
  5471. 5469
  5472. 5470
  5473. 5471
  5474. 5472
  5475. 5473
  5476. 5474
  5477. 5475
  5478. 5476
  5479. 5477
  5480. 5478
  5481. 5479
  5482. 5480
  5483. 5481
  5484. 5482
  5485. 5483
  5486. 5484
  5487. 5485
  5488. 5486
  5489. 5487
  5490. 5488
  5491. 5489
  5492. 5490
  5493. 5491
  5494. 5492
  5495. 5493
  5496. 5494
  5497. 5495
  5498. 5496
  5499. 5497
  5500. 5498
  5501. 5499
  5502. 5500
  5503. 5501
  5504. 5502
  5505. 5503
  5506. 5504
  5507. 5505
  5508. 5506
  5509. 5507
  5510. 5508
  5511. 5509
  5512. 5510
  5513. 5511
  5514. 5512
  5515. 5513
  5516. 5514
  5517. 5515
  5518. 5516
  5519. 5517
  5520. 5518
  5521. 5519
  5522. 5520
  5523. 5521
  5524. 5522
  5525. 5523
  5526. 5524
  5527. 5525
  5528. 5526
  5529. 5527
  5530. 5528
  5531. 5529
  5532. 5530
  5533. 5531
  5534. 5532
  5535. 5533
  5536. 5534
  5537. 5535
  5538. 5536
  5539. 5537
  5540. 5538
  5541. 5539
  5542. 5540
  5543. 5541
  5544. 5542
  5545. 5543
  5546. 5544
  5547. 5545
  5548. 5546
  5549. 5547
  5550. 5548
  5551. 5549
  5552. 5550
  5553. 5551
  5554. 5552
  5555. 5553
  5556. 5554
  5557. 5555
  5558. 5556
  5559. 5557
  5560. 5558
  5561. 5559
  5562. 5560
  5563. 5561
  5564. 5562
  5565. 5563
  5566. 5564
  5567. 5565
  5568. 5566
  5569. 5567
  5570. 5568
  5571. 5569
  5572. 5570
  5573. 5571
  5574. 5572
  5575. 5573
  5576. 5574
  5577. 5575
  5578. 5576
  5579. 5577
  5580. 5578
  5581. 5579
  5582. 5580
  5583. 5581
  5584. 5582
  5585. 5583
  5586. 5584
  5587. 5585
  5588. 5586
  5589. 5587
  5590. 5588
  5591. 5589
  5592. 5590
  5593. 5591
  5594. 5592
  5595. 5593
  5596. 5594
  5597. 5595
  5598. 5596
  5599. 5597
  5600. 5598
  5601. 5599
  5602. 5600
  5603. 5601
  5604. 5602
  5605. 5603
  5606. 5604
  5607. 5605
  5608. 5606
  5609. 5607
  5610. 5608
  5611. 5609
  5612. 5610
  5613. 5611
  5614. 5612
  5615. 5613
  5616. 5614
  5617. 5615
  5618. 5616
  5619. 5617
  5620. 5618
  5621. 5619
  5622. 5620
  5623. 5621
  5624. 5622
  5625. 5623
  5626. 5624
  5627. 5625
  5628. 5626
  5629. 5627
  5630. 5628
  5631. 5629
  5632. 5630
  5633. 5631
  5634. 5632
  5635. 5633
  5636. 5634
  5637. 5635
  5638. 5636
  5639. 5637
  5640. 5638
  5641. 5639
  5642. 5640
  5643. 5641
  5644. 5642
  5645. 5643
  5646. 5644
  5647. 5645
  5648. 5646
  5649. 5647
  5650. 5648
  5651. 5649
  5652. 5650
  5653. 5651
  5654. 5652
  5655. 5653
  5656. 5654
  5657. 5655
  5658. 5656
  5659. 5657
  5660. 5658
  5661. 5659
  5662. 5660
  5663. 5661
  5664. 5662
  5665. 5663
  5666. 5664
  5667. 5665
  5668. 5666
  5669. 5667
  5670. 5668
  5671. 5669
  5672. 5670
  5673. 5671
  5674. 5672
  5675. 5673
  5676. 5674
  5677. 5675
  5678. 5676
  5679. 5677
  5680. 5678
  5681. 5679
  5682. 5680
  5683. 5681
  5684. 5682
  5685. 5683
  5686. 5684
  5687. 5685
  5688. 5686
  5689. 5687
  5690. 5688
  5691. 5689
  5692. 5690
  5693. 5691
  5694. 5692
  5695. 5693
  5696. 5694
  5697. 5695
  5698. 5696
  5699. 5697
  5700. 5698
  5701. 5699
  5702. 5700
  5703. 5701
  5704. 5702
  5705. 5703
  5706. 5704
  5707. 5705
  5708. 5706
  5709. 5707
  5710. 5708
  5711. 5709
  5712. 5710
  5713. 5711
  5714. 5712
  5715. 5713
  5716. 5714
  5717. 5715
  5718. 5716
  5719. 5717
  5720. 5718
  5721. 5719
  5722. 5720
  5723. 5721
  5724. 5722
  5725. 5723
  5726. 5724
  5727. 5725
  5728. 5726
  5729. 5727
  5730. 5728
  5731. 5729
  5732. 5730
  5733. 5731
  5734. 5732
  5735. 5733
  5736. 5734
  5737. 5735
  5738. 5736
  5739. 5737
  5740. 5738
  5741. 5739
  5742. 5740
  5743. 5741
  5744. 5742
  5745. 5743
  5746. 5744
  5747. 5745
  5748. 5746
  5749. 5747
  5750. 5748
  5751. 5749
  5752. 5750
  5753. 5751
  5754. 5752
  5755. 5753
  5756. 5754
  5757. 5755
  5758. 5756
  5759. 5757
  5760. 5758
  5761. 5759
  5762. 5760
  5763. 5761
  5764. 5762
  5765. 5763
  5766. 5764
  5767. 5765
  5768. 5766
  5769. 5767
  5770. 5768
  5771. 5769
  5772. 5770
  5773. 5771
  5774. 5772
  5775. 5773
  5776. 5774
  5777. 5775
  5778. 5776
  5779. 5777
  5780. 5778
  5781. 5779
  5782. 5780
  5783. 5781
  5784. 5782
  5785. 5783
  5786. 5784
  5787. 5785
  5788. 5786
  5789. 5787
  5790. 5788
  5791. 5789
  5792. 5790
  5793. 5791
  5794. 5792
  5795. 5793
  5796. 5794
  5797. 5795
  5798. 5796
  5799. 5797
  5800. 5798
  5801. 5799
  5802. 5800
  5803. 5801
  5804. 5802
  5805. 5803
  5806. 5804
  5807. 5805
  5808. 5806
  5809. 5807
  5810. 5808
  5811. 5809
  5812. 5810
  5813. 5811
  5814. 5812
  5815. 5813
  5816. 5814
  5817. 5815
  5818. 5816
  5819. 5817
  5820. 5818
  5821. 5819
  5822. 5820
  5823. 5821
  5824. 5822
  5825. 5823
  5826. 5824
  5827. 5825
  5828. 5826
  5829. 5827
  5830. 5828
  5831. 5829
  5832. 5830
  5833. 5831
  5834. 5832
  5835. 5833
  5836. 5834
  5837. 5835
  5838. 5836
  5839. 5837
  5840. 5838
  5841. 5839
  5842. 5840
  5843. 5841
  5844. 5842
  5845. 5843
  5846. 5844
  5847. 5845
  5848. 5846
  5849. 5847
  5850. 5848
  5851. 5849
  5852. 5850
  5853. 5851
  5854. 5852
  5855. 5853
  5856. 5854
  5857. 5855
  5858. 5856
  5859. 5857
  5860. 5858
  5861. 5859
  5862. 5860
  5863. 5861
  5864. 5862
  5865. 5863
  5866. 5864
  5867. 5865
  5868. 5866
  5869. 5867
  5870. 5868
  5871. 5869
  5872. 5870
  5873. 5871
  5874. 5872
  5875. 5873
  5876. 5874
  5877. 5875
  5878. 5876
  5879. 5877
  5880. 5878
  5881. 5879
  5882. 5880
  5883. 5881
  5884. 5882
  5885. 5883
  5886. 5884
  5887. 5885
  5888. 5886
  5889. 5887
  5890. 5888
  5891. 5889
  5892. 5890
  5893. 5891
  5894. 5892
  5895. 5893
  5896. 5894
  5897. 5895
  5898. 5896
  5899. 5897
  5900. 5898
  5901. 5899
  5902. 5900
  5903. 5901
  5904. 5902
  5905. 5903
  5906. 5904
  5907. 5905
  5908. 5906
  5909. 5907
  5910. 5908
  5911. 5909
  5912. 5910
  5913. 5911
  5914. 5912
  5915. 5913
  5916. 5914
  5917. 5915
  5918. 5916
  5919. 5917
  5920. 5918
  5921. 5919
  5922. 5920
  5923. 5921
  5924. 5922
  5925. 5923
  5926. 5924
  5927. 5925
  5928. 5926
  5929. 5927
  5930. 5928
  5931. 5929
  5932. 5930
  5933. 5931
  5934. 5932
  5935. 5933
  5936. 5934
  5937. 5935
  5938. 5936
  5939. 5937
  5940. 5938
  5941. 5939
  5942. 5940
  5943. 5941
  5944. 5942
  5945. 5943
  5946. 5944
  5947. 5945
  5948. 5946
  5949. 5947
  5950. 5948
  5951. 5949
  5952. 5950
  5953. 5951
  5954. 5952
  5955. 5953
  5956. 5954
  5957. 5955
  5958. 5956
  5959. 5957
  5960. 5958
  5961. 5959
  5962. 5960
  5963. 5961
  5964. 5962
  5965. 5963
  5966. 5964
  5967. 5965
  5968. 5966
  5969. 5967
  5970. 5968
  5971. 5969
  5972. 5970
  5973. 5971
  5974. 5972
  5975. 5973
  5976. 5974
  5977. 5975
  5978. 5976
  5979. 5977
  5980. 5978
  5981. 5979
  5982. 5980
  5983. 5981
  5984. 5982
  5985. 5983
  5986. 5984
  5987. 5985
  5988. 5986
  5989. 5987
  5990. 5988
  5991. 5989
  5992. 5990
  5993. 5991
  5994. 5992
  5995. 5993
  5996. 5994
  5997. 5995
  5998. 5996
  5999. 5997
  6000. 5998
  6001. 5999
  6002. 6000
  6003. 6001
  6004. 6002
  6005. 6003
  6006. 6004
  6007. 6005
  6008. 6006
  6009. 6007
  6010. 6008
  6011. 6009
  6012. 6010
  6013. 6011
  6014. 6012
  6015. 6013
  6016. 6014
  6017. 6015
  6018. 6016
  6019. 6017
  6020. 6018
  6021. 6019
  6022. 6020
  6023. 6021
  6024. 6022
  6025. 6023
  6026. 6024
  6027. 6025
  6028. 6026
  6029. 6027
  6030. 6028
  6031. 6029
  6032. 6030
  6033. 6031
  6034. 6032
  6035. 6033
  6036. 6034
  6037. 6035
  6038. 6036
  6039. 6037
  6040. 6038
  6041. 6039
  6042. 6040
  6043. 6041
  6044. 6042
  6045. 6043
  6046. 6044
  6047. 6045
  6048. 6046
  6049. 6047
  6050. 6048
  6051. 6049
  6052. 6050
  6053. 6051
  6054. 6052
  6055. 6053
  6056. 6054
  6057. 6055
  6058. 6056
  6059. 6057
  6060. 6058
  6061. 6059
  6062. 6060
  6063. 6061
  6064. 6062
  6065. 6063
  6066. 6064
  6067. 6065
  6068. 6066
  6069. 6067
  6070. 6068
  6071. 6069
  6072. 6070
  6073. 6071
  6074. 6072
  6075. 6073
  6076. 6074
  6077. 6075
  6078. 6076
  6079. 6077
  6080. 6078
  6081. 6079
  6082. 6080
  6083. 6081
  6084. 6082
  6085. 6083
  6086. 6084
  6087. 6085
  6088. 6086
  6089. 6087
  6090. 6088
  6091. 6089
  6092. 6090
  6093. 6091
  6094. 6092
  6095. 6093
  6096. 6094
  6097. 6095
  6098. 6096
  6099. 6097
  6100. 6098
  6101. 6099
  6102. 6100
  6103. 6101
  6104. 6102
  6105. 6103
  6106. 6104
  6107. 6105
  6108. 6106
  6109. 6107
  6110. 6108
  6111. 6109
  6112. 6110
  6113. 6111
  6114. 6112
  6115. 6113
  6116. 6114
  6117. 6115
  6118. 6116
  6119. 6117
  6120. 6118
  6121. 6119
  6122. 6120
  6123. 6121
  6124. 6122
  6125. 6123
  6126. 6124
  6127. 6125
  6128. 6126
  6129. 6127
  6130. 6128
  6131. 6129
  6132. 6130
  6133. 6131
  6134. 6132
  6135. 6133
  6136. 6134
  6137. 6135
  6138. 6136
  6139. 6137
  6140. 6138
  6141. 6139
  6142. 6140
  6143. 6141
  6144. 6142
  6145. 6143
  6146. 6144
  6147. 6145
  6148. 6146
  6149. 6147
  6150. 6148
  6151. 6149
  6152. 6150
  6153. 6151
  6154. 6152
  6155. 6153
  6156. 6154
  6157. 6155
  6158. 6156
  6159. 6157
  6160. 6158
  6161. 6159
  6162. 6160
  6163. 6161
  6164. 6162
  6165. 6163
  6166. 6164
  6167. 6165
  6168. 6166
  6169. 6167
  6170. 6168
  6171. 6169
  6172. 6170
  6173. 6171
  6174. 6172
  6175. 6173
  6176. 6174
  6177. 6175
  6178. 6176
  6179. 6177
  6180. 6178
  6181. 6179
  6182. 6180
  6183. 6181
  6184. 6182
  6185. 6183
  6186. 6184
  6187. 6185
  6188. 6186
  6189. 6187
  6190. 6188
  6191. 6189
  6192. 6190
  6193. 6191
  6194. 6192
  6195. 6193
  6196. 6194
  6197. 6195
  6198. 6196
  6199. 6197
  6200. 6198
  6201. 6199
  6202. 6200
  6203. 6201
  6204. 6202
  6205. 6203
  6206. 6204
  6207. 6205
  6208. 6206
  6209. 6207
  6210. 6208
  6211. 6209
  6212. 6210
  6213. 6211
  6214. 6212
  6215. 6213
  6216. 6214
  6217. 6215
  6218. 6216
  6219. 6217
  6220. 6218
  6221. 6219
  6222. 6220
  6223. 6221
  6224. 6222
  6225. 6223
  6226. 6224
  6227. 6225
  6228. 6226
  6229. 6227
  6230. 6228
  6231. 6229
  6232. 6230
  6233. 6231
  6234. 6232
  6235. 6233
  6236. 6234
  6237. 6235
  6238. 6236
  6239. 6237
  6240. 6238
  6241. 6239
  6242. 6240
  6243. 6241
  6244. 6242
  6245. 6243
  6246. 6244
  6247. 6245
  6248. 6246
  6249. 6247
  6250. 6248
  6251. 6249
  6252. 6250
  6253. 6251
  6254. 6252
  6255. 6253
  6256. 6254
  6257. 6255
  6258. 6256
  6259. 6257
  6260. 6258
  6261. 6259
  6262. 6260
  6263. 6261
  6264. 6262
  6265. 6263
  6266. 6264
  6267. 6265
  6268. 6266
  6269. 6267
  6270. 6268
  6271. 6269
  6272. 6270
  6273. 6271
  6274. 6272
  6275. 6273
  6276. 6274
  6277. 6275
  6278. 6276
  6279. 6277
  6280. 6278
  6281. 6279
  6282. 6280
  6283. 6281
  6284. 6282
  6285. 6283
  6286. 6284
  6287. 6285
  6288. 6286
  6289. 6287
  6290. 6288
  6291. 6289
  6292. 6290
  6293. 6291
  6294. 6292
  6295. 6293
  6296. 6294
  6297. 6295
  6298. 6296
  6299. 6297
  6300. 6298
  6301. 6299
  6302. 6300
  6303. 6301
  6304. 6302
  6305. 6303
  6306. 6304
  6307. 6305
  6308. 6306
  6309. 6307
  6310. 6308
  6311. 6309
  6312. 6310
  6313. 6311
  6314. 6312
  6315. 6313
  6316. 6314
  6317. 6315
  6318. 6316
  6319. 6317
  6320. 6318
  6321. 6319
  6322. 6320
  6323. 6321
  6324. 6322
  6325. 6323
  6326. 6324
  6327. 6325
  6328. 6326
  6329. 6327
  6330. 6328
  6331. 6329
  6332. 6330
  6333. 6331
  6334. 6332
  6335. 6333
  6336. 6334
  6337. 6335
  6338. 6336
  6339. 6337
  6340. 6338
  6341. 6339
  6342. 6340
  6343. 6341
  6344. 6342
  6345. 6343
  6346. 6344
  6347. 6345
  6348. 6346
  6349. 6347
  6350. 6348
  6351. 6349
  6352. 6350
  6353. 6351
  6354. 6352
  6355. 6353
  6356. 6354
  6357. 6355
  6358. 6356
  6359. 6357
  6360. 6358
  6361. 6359
  6362. 6360
  6363. 6361
  6364. 6362
  6365. 6363
  6366. 6364
  6367. 6365
  6368. 6366
  6369. 6367
  6370. 6368
  6371. 6369
  6372. 6370
  6373. 6371
  6374. 6372
  6375. 6373
  6376. 6374
  6377. 6375
  6378. 6376
  6379. 6377
  6380. 6378
  6381. 6379
  6382. 6380
  6383. 6381
  6384. 6382
  6385. 6383
  6386. 6384
  6387. 6385
  6388. 6386
  6389. 6387
  6390. 6388
  6391. 6389
  6392. 6390
  6393. 6391
  6394. 6392
  6395. 6393
  6396. 6394
  6397. 6395
  6398. 6396
  6399. 6397
  6400. 6398
  6401. 6399
  6402. 6400
  6403. 6401
  6404. 6402
  6405. 6403
  6406. 6404
  6407. 6405
  6408. 6406
  6409. 6407
  6410. 6408
  6411. 6409
  6412. 6410
  6413. 6411
  6414. 6412
  6415. 6413
  6416. 6414
  6417. 6415
  6418. 6416
  6419. 6417
  6420. 6418
  6421. 6419
  6422. 6420
  6423. 6421
  6424. 6422
  6425. 6423
  6426. 6424
  6427. 6425
  6428. 6426
  6429. 6427
  6430. 6428
  6431. 6429
  6432. 6430
  6433. 6431
  6434. 6432
  6435. 6433
  6436. 6434
  6437. 6435
  6438. 6436
  6439. 6437
  6440. 6438
  6441. 6439
  6442. 6440
  6443. 6441
  6444. 6442
  6445. 6443
  6446. 6444
  6447. 6445
  6448. 6446
  6449. 6447
  6450. 6448
  6451. 6449
  6452. 6450
  6453. 6451
  6454. 6452
  6455. 6453
  6456. 6454
  6457. 6455
  6458. 6456
  6459. 6457
  6460. 6458
  6461. 6459
  6462. 6460
  6463. 6461
  6464. 6462
  6465. 6463
  6466. 6464
  6467. 6465
  6468. 6466
  6469. 6467
  6470. 6468
  6471. 6469
  6472. 6470
  6473. 6471
  6474. 6472
  6475. 6473
  6476. 6474
  6477. 6475
  6478. 6476
  6479. 6477
  6480. 6478
  6481. 6479
  6482. 6480
  6483. 6481
  6484. 6482
  6485. 6483
  6486. 6484
  6487. 6485
  6488. 6486
  6489. 6487
  6490. 6488
  6491. 6489
  6492. 6490
  6493. ////////////////////////////////////////////////////////////////////////
  6494. // OpenTibia - an opensource roleplaying game
  6495. ////////////////////////////////////////////////////////////////////////
  6496. // This program is free software: you can redistribute it and/or modify
  6497. // it under the terms of the GNU General Public License as published by
  6498. // the Free Software Foundation, either version 3 of the License, or
  6499. // (at your option) any later version.
  6500. //
  6501. // This program is distributed in the hope that it will be useful,
  6502. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  6503. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  6504. // GNU General Public License for more details.
  6505. //
  6506. // You should have received a copy of the GNU General Public License
  6507. // along with this program. If not, see <http://www.gnu.org/licenses/>.
  6508. ////////////////////////////////////////////////////////////////////////
  6509. #include "otpch.h"
  6510. #include "game.h"
  6511.  
  6512. #include "configmanager.h"
  6513. #ifdef __LOGIN_SERVER__
  6514. #include "gameservers.h"
  6515. #endif
  6516. #include "server.h"
  6517. #include "chat.h"
  6518.  
  6519. #include "luascript.h"
  6520. #include "creature.h"
  6521. #include "combat.h"
  6522. #include "tile.h"
  6523.  
  6524. #include "database.h"
  6525. #include "iologindata.h"
  6526. #include "ioban.h"
  6527. #include "ioguild.h"
  6528.  
  6529. #include "items.h"
  6530. #include "trashholder.h"
  6531. #include "container.h"
  6532. #include "monsters.h"
  6533.  
  6534. #include "house.h"
  6535. #include "quests.h"
  6536.  
  6537. #include "actions.h"
  6538. #include "globalevent.h"
  6539. #include "movement.h"
  6540. #include "raids.h"
  6541. #include "scriptmanager.h"
  6542. #include "spells.h"
  6543. #include "talkaction.h"
  6544. #include "weapons.h"
  6545.  
  6546. #include "vocation.h"
  6547. #include "group.h"
  6548.  
  6549. #ifdef __EXCEPTION_TRACER__
  6550. #include "exception.h"
  6551. #endif
  6552.  
  6553. extern ConfigManager g_config;
  6554. extern Actions* g_actions;
  6555. extern Monsters g_monsters;
  6556. extern Npcs g_npcs;
  6557. extern Chat g_chat;
  6558. extern TalkActions* g_talkActions;
  6559. extern Spells* g_spells;
  6560. extern MoveEvents* g_moveEvents;
  6561. extern Weapons* g_weapons;
  6562. extern CreatureEvents* g_creatureEvents;
  6563. extern GlobalEvents* g_globalEvents;
  6564.  
  6565. Game::Game()
  6566. {
  6567. gameState = GAMESTATE_NORMAL;
  6568. worldType = WORLDTYPE_OPEN;
  6569. map = NULL;
  6570. playersRecord = lastStageLevel = 0;
  6571.  
  6572. //(1440 minutes/day) * 10 seconds event interval / (3600 seconds/day)
  6573. lightHourDelta = 1440 * 10 / 3600;
  6574. lightHour = SUNRISE + (SUNSET - SUNRISE) / 2;
  6575. lightLevel = LIGHT_LEVEL_DAY;
  6576. lightState = LIGHT_STATE_DAY;
  6577.  
  6578. lastBucket = checkCreatureLastIndex = checkLightEvent = checkCreatureEvent = checkDecayEvent = saveEvent = 0;
  6579. checkWarsEvent = 0;
  6580. }
  6581.  
  6582. Game::~Game()
  6583. {
  6584. delete map;
  6585. }
  6586.  
  6587. void Game::start(ServiceManager* servicer)
  6588. {
  6589. checkDecayEvent = Scheduler::getInstance().addEvent(createSchedulerTask(EVENT_DECAYINTERVAL,
  6590. boost::bind(&Game::checkDecay, this)));
  6591. checkCreatureEvent = Scheduler::getInstance().addEvent(createSchedulerTask(EVENT_CREATURE_THINK_INTERVAL,
  6592. boost::bind(&Game::checkCreatures, this)));
  6593. checkLightEvent = Scheduler::getInstance().addEvent(createSchedulerTask(EVENT_LIGHTINTERVAL,
  6594. boost::bind(&Game::checkLight, this)));
  6595. checkWarsEvent = Scheduler::getInstance().addEvent(createSchedulerTask(EVENT_WARSINTERVAL,
  6596. boost::bind(&Game::checkWars, this)));
  6597.  
  6598. services = servicer;
  6599. if(!g_config.getBool(ConfigManager::GLOBALSAVE_ENABLED))
  6600. return;
  6601.  
  6602. int32_t prepareHour = g_config.getNumber(ConfigManager::GLOBALSAVE_H),
  6603. prepareMinute = g_config.getNumber(ConfigManager::GLOBALSAVE_M);
  6604.  
  6605. if(prepareHour < 0 || prepareHour > 24)
  6606. {
  6607. std::clog << "> WARNING: No valid hour (" << prepareHour << ") for a global save, should be between 0-23. Global save disabled." << std::endl;
  6608. return;
  6609. }
  6610.  
  6611. if(prepareMinute < 0 || prepareMinute > 59)
  6612. {
  6613. std::clog << "> WARNING: No valid minute (" << prepareMinute << ") for a global save, should be between 0-59. Global save disabled." << std::endl;
  6614. return;
  6615. }
  6616.  
  6617. time_t timeNow = time(NULL);
  6618. const tm* theTime = localtime(&timeNow);
  6619.  
  6620. int32_t hour = theTime->tm_hour, minute = theTime->tm_min, second = theTime->tm_sec,
  6621. hoursLeft = 0, minutesLeft = 0, broadcast = 5;
  6622.  
  6623. if(prepareHour == 0)
  6624. prepareHour = 24;
  6625.  
  6626. if(hour != prepareHour)
  6627. {
  6628. if(prepareMinute >= 5)
  6629. prepareMinute -= 5;
  6630. else
  6631. {
  6632. prepareHour--;
  6633. prepareMinute = 55 + prepareMinute;
  6634. }
  6635.  
  6636. if(hour > prepareHour)
  6637. hoursLeft = 24 - (hour - prepareHour);
  6638. else
  6639. hoursLeft = prepareHour - hour;
  6640.  
  6641. if(minute > prepareMinute)
  6642. {
  6643. minutesLeft = 60 - (minute - prepareMinute);
  6644. hoursLeft--;
  6645. }
  6646. else if(minute != prepareMinute)
  6647. minutesLeft = prepareMinute - minute;
  6648. }
  6649. else
  6650. {
  6651. if(minute > prepareMinute)
  6652. {
  6653. minutesLeft = 55 - (minute - prepareMinute);
  6654. hoursLeft = 23;
  6655. }
  6656. else
  6657. {
  6658. minutesLeft = prepareMinute - minute;
  6659. if(minutesLeft >= 5)
  6660. minutesLeft = minutesLeft - 5;
  6661. else if(minutesLeft == 3 || minutesLeft == 1)
  6662. {
  6663. prepareGlobalSave(minutesLeft);
  6664. return;
  6665. }
  6666. else if(minutesLeft > 0)
  6667. {
  6668. broadcast = (minutesLeft == 2 ? 1 : 3);
  6669. minutesLeft = 1;
  6670. }
  6671. }
  6672. }
  6673.  
  6674. uint32_t timeLeft = (hoursLeft * 60 * 60 * 1000) + (minutesLeft * 60 * 1000);
  6675. if(timeLeft > 0)
  6676. {
  6677. timeLeft -= second * 1000;
  6678. saveEvent = Scheduler::getInstance().addEvent(createSchedulerTask(timeLeft,
  6679. boost::bind(&Game::prepareGlobalSave, this, broadcast)));
  6680. }
  6681. }
  6682.  
  6683. void Game::loadGameState()
  6684. {
  6685. ScriptEnviroment::loadGameState();
  6686. loadMotd();
  6687. loadPlayersRecord();
  6688. checkHighscores();
  6689. }
  6690.  
  6691. void Game::setGameState(GameState_t newState)
  6692. {
  6693. if(gameState == GAMESTATE_SHUTDOWN)
  6694. return; //this cannot be stopped
  6695.  
  6696. if(gameState != newState)
  6697. {
  6698. gameState = newState;
  6699. switch(newState)
  6700. {
  6701. case GAMESTATE_INIT:
  6702. {
  6703. Spawns::getInstance()->startup();
  6704. Raids::getInstance()->loadFromXml();
  6705. Raids::getInstance()->startup();
  6706. Quests::getInstance()->loadFromXml();
  6707.  
  6708. loadGameState();
  6709. g_globalEvents->startup();
  6710.  
  6711. IOBan::getInstance()->clearTemporials();
  6712. if(g_config.getBool(ConfigManager::INIT_PREMIUM_UPDATE))
  6713. IOLoginData::getInstance()->updatePremiumDays();
  6714.  
  6715. IOGuild::getInstance()->checkWars();
  6716. break;
  6717. }
  6718.  
  6719. case GAMESTATE_SHUTDOWN:
  6720. {
  6721. g_globalEvents->execute(GLOBALEVENT_SHUTDOWN);
  6722. AutoList<Player>::iterator it = Player::autoList.begin();
  6723. while(it != Player::autoList.end()) //kick all players that are still online
  6724. {
  6725. it->second->kick(true, true);
  6726. it = Player::autoList.begin();
  6727. }
  6728.  
  6729. Houses::getInstance()->payHouses();
  6730. saveGameState(false);
  6731. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::shutdown, this)));
  6732.  
  6733. Scheduler::getInstance().stop();
  6734. Dispatcher::getInstance().stop();
  6735. break;
  6736. }
  6737.  
  6738. case GAMESTATE_CLOSED:
  6739. {
  6740. AutoList<Player>::iterator it = Player::autoList.begin();
  6741. while(it != Player::autoList.end()) //kick all players who not allowed to stay
  6742. {
  6743. if(!it->second->hasFlag(PlayerFlag_CanAlwaysLogin))
  6744. {
  6745. it->second->kick(true, true);
  6746. it = Player::autoList.begin();
  6747. }
  6748. else
  6749. ++it;
  6750. }
  6751.  
  6752. saveGameState(false);
  6753. break;
  6754. }
  6755.  
  6756. case GAMESTATE_NORMAL:
  6757. case GAMESTATE_MAINTAIN:
  6758. case GAMESTATE_STARTUP:
  6759. case GAMESTATE_CLOSING:
  6760. default:
  6761. break;
  6762. }
  6763. }
  6764. }
  6765.  
  6766. void Game::saveGameState(bool shallow)
  6767. {
  6768. std::clog << "> Saving server..." << std::endl;
  6769. uint64_t start = OTSYS_TIME();
  6770. if(gameState == GAMESTATE_NORMAL)
  6771. setGameState(GAMESTATE_MAINTAIN);
  6772.  
  6773. IOLoginData* io = IOLoginData::getInstance();
  6774. for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
  6775. {
  6776. it->second->loginPosition = it->second->getPosition();
  6777. io->savePlayer(it->second, false, shallow);
  6778. }
  6779.  
  6780. map->saveMap();
  6781. ScriptEnviroment::saveGameState();
  6782. if(gameState == GAMESTATE_MAINTAIN)
  6783. setGameState(GAMESTATE_NORMAL);
  6784.  
  6785. std::clog << "> SAVE: Complete in " << (OTSYS_TIME() - start) / (1000.) << " seconds using "
  6786. << asLowerCaseString(g_config.getString(ConfigManager::HOUSE_STORAGE))
  6787. << " house storage." << std::endl;
  6788. }
  6789.  
  6790. int32_t Game::loadMap(std::string filename)
  6791. {
  6792. if(!map)
  6793. map = new Map;
  6794.  
  6795. std::string file = getFilePath(FILE_TYPE_CONFIG, "world/" + filename);
  6796. if(!fileExists(file.c_str()))
  6797. file = getFilePath(FILE_TYPE_OTHER, "world/" + filename);
  6798.  
  6799. return map->loadMap(file);
  6800. }
  6801.  
  6802. void Game::cleanMap(uint32_t& count)
  6803. {
  6804. uint64_t start = OTSYS_TIME();
  6805. uint32_t tiles = 0; count = 0;
  6806.  
  6807. int32_t marked = -1;
  6808. if(gameState == GAMESTATE_NORMAL)
  6809. setGameState(GAMESTATE_MAINTAIN);
  6810.  
  6811. Tile* tile = NULL;
  6812. ItemVector::iterator tit;
  6813. if(g_config.getBool(ConfigManager::STORE_TRASH))
  6814. {
  6815. marked = trash.size();
  6816. Trash::iterator it = trash.begin();
  6817. if(g_config.getBool(ConfigManager::CLEAN_PROTECTED_ZONES))
  6818. {
  6819. for(; it != trash.end(); ++it)
  6820. {
  6821. if(!(tile = getTile(*it)))
  6822. continue;
  6823.  
  6824. tile->resetFlag(TILESTATE_TRASHED);
  6825. if(tile->hasFlag(TILESTATE_HOUSE) || !tile->getItemList())
  6826. continue;
  6827.  
  6828. ++tiles;
  6829. tit = tile->getItemList()->begin();
  6830. while(tile->getItemList() && tit != tile->getItemList()->end())
  6831. {
  6832. if((*tit)->isMovable() && !(*tit)->isLoadedFromMap()
  6833. && !(*tit)->isScriptProtected())
  6834. {
  6835. internalRemoveItem(NULL, *tit);
  6836. if(tile->getItemList())
  6837. tit = tile->getItemList()->begin();
  6838.  
  6839. ++count;
  6840. }
  6841. else
  6842. ++tit;
  6843. }
  6844. }
  6845. }
  6846. else
  6847. {
  6848. for(; it != trash.end(); ++it)
  6849. {
  6850. if(!(tile = getTile(*it)))
  6851. continue;
  6852.  
  6853. tile->resetFlag(TILESTATE_TRASHED);
  6854. if(tile->hasFlag(TILESTATE_PROTECTIONZONE) || !tile->getItemList())
  6855. continue;
  6856.  
  6857. ++tiles;
  6858. tit = tile->getItemList()->begin();
  6859. while(tile->getItemList() && tit != tile->getItemList()->end())
  6860. {
  6861. if((*tit)->isMovable() && !(*tit)->isLoadedFromMap()
  6862. && !(*tit)->isScriptProtected())
  6863. {
  6864. internalRemoveItem(NULL, *tit);
  6865. if(tile->getItemList())
  6866. tit = tile->getItemList()->begin();
  6867.  
  6868. ++count;
  6869. }
  6870. else
  6871. ++tit;
  6872. }
  6873. }
  6874. }
  6875. trash.clear();
  6876. }
  6877. else if(g_config.getBool(ConfigManager::CLEAN_PROTECTED_ZONES))
  6878. {
  6879. for(uint16_t z = 0; z < (uint16_t)MAP_MAX_LAYERS; z++)
  6880. {
  6881. for(uint16_t y = 1; y <= map->mapHeight; y++)
  6882. {
  6883. for(uint16_t x = 1; x <= map->mapWidth; x++)
  6884. {
  6885. if(!(tile = getTile(x, y, z)) || tile->hasFlag(TILESTATE_HOUSE) || !tile->getItemList())
  6886. continue;
  6887.  
  6888. ++tiles;
  6889. tit = tile->getItemList()->begin();
  6890. while(tile->getItemList() && tit != tile->getItemList()->end())
  6891. {
  6892. if((*tit)->isMovable() && !(*tit)->isLoadedFromMap()
  6893. && !(*tit)->isScriptProtected())
  6894. {
  6895. internalRemoveItem(NULL, *tit);
  6896. if(tile->getItemList())
  6897. tit = tile->getItemList()->begin();
  6898.  
  6899. ++count;
  6900. }
  6901. else
  6902. ++tit;
  6903. }
  6904. }
  6905. }
  6906. }
  6907. }
  6908. else
  6909. {
  6910. for(uint16_t z = 0; z < (uint16_t)MAP_MAX_LAYERS; z++)
  6911. {
  6912. for(uint16_t y = 1; y <= map->mapHeight; y++)
  6913. {
  6914. for(uint16_t x = 1; x <= map->mapWidth; x++)
  6915. {
  6916. if(!(tile = getTile(x, y, z)) || tile->hasFlag(TILESTATE_PROTECTIONZONE) || !tile->getItemList())
  6917. continue;
  6918.  
  6919. ++tiles;
  6920. tit = tile->getItemList()->begin();
  6921. while(tile->getItemList() && tit != tile->getItemList()->end())
  6922. {
  6923. if((*tit)->isMovable() && !(*tit)->isLoadedFromMap()
  6924. && !(*tit)->isScriptProtected())
  6925. {
  6926. internalRemoveItem(NULL, *tit);
  6927. if(tile->getItemList())
  6928. tit = tile->getItemList()->begin();
  6929.  
  6930. ++count;
  6931. }
  6932. else
  6933. ++tit;
  6934. }
  6935. }
  6936. }
  6937. }
  6938. }
  6939.  
  6940. if(gameState == GAMESTATE_MAINTAIN)
  6941. setGameState(GAMESTATE_NORMAL);
  6942.  
  6943. std::clog << "> CLEAN: Removed " << count << " item" << (count != 1 ? "s" : "")
  6944. << " from " << tiles << " tile" << (tiles != 1 ? "s" : "");
  6945. if(marked >= 0)
  6946. std::clog << " (" << marked << " were marked)";
  6947.  
  6948. std::clog << " in " << (OTSYS_TIME() - start) / (1000.) << " seconds." << std::endl;
  6949. }
  6950.  
  6951. void Game::proceduralRefresh(RefreshTiles::iterator* it/* = NULL*/)
  6952. {
  6953. if(!it)
  6954. it = new RefreshTiles::iterator(refreshTiles.begin());
  6955.  
  6956. // Refresh 250 tiles each cycle
  6957. refreshMap(it, 250);
  6958. if((*it) != refreshTiles.end())
  6959. {
  6960. delete it;
  6961. return;
  6962. }
  6963.  
  6964. // Refresh some items every 100 ms until all tiles has been checked
  6965. // For 100k tiles, this would take 100000/2500 = 40s = half a minute
  6966. Scheduler::getInstance().addEvent(createSchedulerTask(100,
  6967. boost::bind(&Game::proceduralRefresh, this, it)));
  6968. }
  6969.  
  6970. void Game::refreshMap(RefreshTiles::iterator* it/* = NULL*/, uint32_t limit/* = 0*/)
  6971. {
  6972. RefreshTiles::iterator end = refreshTiles.end();
  6973. if(!it)
  6974. {
  6975. RefreshTiles::iterator begin = refreshTiles.begin();
  6976. it = &begin;
  6977. }
  6978.  
  6979. Tile* tile = NULL;
  6980. TileItemVector* items = NULL;
  6981.  
  6982. Item* item = NULL;
  6983. for(uint32_t cleaned = 0, downItemsSize = 0; (*it) != end &&
  6984. (limit ? (cleaned < limit) : true); ++(*it), ++cleaned)
  6985. {
  6986. if(!(tile = (*it)->first))
  6987. continue;
  6988.  
  6989. if((items = tile->getItemList()))
  6990. {
  6991. downItemsSize = tile->getDownItemCount();
  6992. for(uint32_t i = downItemsSize - 1; i; --i)
  6993. {
  6994. if((item = items->at(i)))
  6995. {
  6996. #ifndef __DEBUG__
  6997. internalRemoveItem(NULL, item);
  6998. #else
  6999. if(internalRemoveItem(NULL, item) != RET_NOERROR)
  7000. {
  7001. std::clog << "> WARNING: Could not refresh item: " << item->getID();
  7002. std::clog << " at position: " << tile->getPosition() << std::endl;
  7003. }
  7004. #endif
  7005. }
  7006. }
  7007. }
  7008.  
  7009. cleanup();
  7010. TileItemVector list = (*it)->second.list;
  7011. for(ItemVector::reverse_iterator it = list.rbegin(); it != list.rend(); ++it)
  7012. {
  7013. Item* item = (*it)->clone();
  7014. if(internalAddItem(NULL, tile, item , INDEX_WHEREEVER, FLAG_NOLIMIT) == RET_NOERROR)
  7015. {
  7016. if(item->getUniqueId() != 0)
  7017. ScriptEnviroment::addUniqueThing(item);
  7018.  
  7019. startDecay(item);
  7020. }
  7021. else
  7022. {
  7023. std::clog << "> WARNING: Could not refresh item: " << item->getID()
  7024. << " at position: " << tile->getPosition() << std::endl;
  7025. delete item;
  7026. }
  7027. }
  7028. }
  7029. }
  7030.  
  7031. bool Game::isSwimmingPool(Item* item, const Tile* tile, bool checkProtection) const
  7032. {
  7033. if(!tile)
  7034. return false;
  7035.  
  7036. TrashHolder* trashHolder = NULL;
  7037. if(!item)
  7038. trashHolder = tile->getTrashHolder();
  7039. else
  7040. trashHolder = item->getTrashHolder();
  7041.  
  7042. return trashHolder && trashHolder->getEffect() == MAGIC_EFFECT_LOSE_ENERGY && (!checkProtection
  7043. || tile->getZone() == ZONE_PROTECTION || tile->getZone() == ZONE_OPTIONAL);
  7044. }
  7045.  
  7046. Cylinder* Game::internalGetCylinder(Player* player, const Position& pos)
  7047. {
  7048. if(pos.x != 0xFFFF)
  7049. return getTile(pos);
  7050.  
  7051. //container
  7052. if(pos.y & 0x40)
  7053. return player->getContainer((uint8_t)(pos.y & 0x0F));
  7054.  
  7055. return player;
  7056. }
  7057.  
  7058. Thing* Game::internalGetThing(Player* player, const Position& pos, int32_t index,
  7059. uint32_t spriteId/* = 0*/, stackposType_t type/* = STACKPOS_NORMAL*/)
  7060. {
  7061. if(pos.x != 0xFFFF)
  7062. {
  7063. Tile* tile = getTile(pos);
  7064. if(!tile)
  7065. return NULL;
  7066.  
  7067. if(type == STACKPOS_LOOK)
  7068. return tile->getTopVisibleThing(player);
  7069.  
  7070. Thing* thing = NULL;
  7071. switch(type)
  7072. {
  7073. case STACKPOS_MOVE:
  7074. {
  7075. Item* item = tile->getTopDownItem();
  7076. if(item && item->isMovable())
  7077. thing = item;
  7078. else
  7079. thing = tile->getTopVisibleCreature(player);
  7080.  
  7081. break;
  7082. }
  7083.  
  7084. case STACKPOS_USE:
  7085. {
  7086. thing = tile->getTopDownItem();
  7087. break;
  7088. }
  7089.  
  7090. case STACKPOS_USEITEM:
  7091. {
  7092. Item* downItem = tile->getTopDownItem();
  7093. Item* item = tile->getItemByTopOrder(2);
  7094. if(item && g_actions->hasAction(item))
  7095. {
  7096. const ItemType& it = Item::items[item->getID()];
  7097. if(!downItem || (!it.hasHeight && !it.allowPickupable))
  7098. thing = item;
  7099. }
  7100.  
  7101. if(!thing)
  7102. thing = downItem;
  7103.  
  7104. if(!thing)
  7105. thing = tile->getTopTopItem();
  7106.  
  7107. if(!thing)
  7108. thing = tile->ground;
  7109.  
  7110. break;
  7111. }
  7112.  
  7113. default:
  7114. thing = tile->__getThing(index);
  7115. break;
  7116. }
  7117.  
  7118. if(player && thing && thing->getItem())
  7119. {
  7120. if(tile->hasProperty(ISVERTICAL))
  7121. {
  7122. if(player->getPosition().x + 1 == tile->getPosition().x)
  7123. thing = NULL;
  7124. }
  7125. else if(tile->hasProperty(ISHORIZONTAL) && player->getPosition().y + 1 == tile->getPosition().y)
  7126. thing = NULL;
  7127. }
  7128.  
  7129. return thing;
  7130. }
  7131. else if(pos.y & 0x40)
  7132. {
  7133. uint8_t fromCid = pos.y & 0x0F, slot = pos.z;
  7134. if(Container* parentcontainer = player->getContainer(fromCid))
  7135. return parentcontainer->getItem(slot);
  7136. }
  7137. else if(!pos.y && !pos.z)
  7138. {
  7139. const ItemType& it = Item::items.getItemIdByClientId(spriteId);
  7140. if(!it.id)
  7141. return NULL;
  7142.  
  7143. int32_t subType = -1;
  7144. if(it.isFluidContainer() && index < int32_t(sizeof(reverseFluidMap) / sizeof(int8_t)))
  7145. subType = reverseFluidMap[index];
  7146.  
  7147. return findItemOfType(player, it.id, true, subType);
  7148. }
  7149.  
  7150. return player->getInventoryItem((slots_t)static_cast<uint8_t>(pos.y));
  7151. }
  7152.  
  7153. void Game::internalGetPosition(Item* item, Position& pos, int16_t& stackpos)
  7154. {
  7155. pos.x = pos.y = pos.z = stackpos = 0;
  7156. if(Cylinder* topParent = item->getTopParent())
  7157. {
  7158. if(Player* player = dynamic_cast<Player*>(topParent))
  7159. {
  7160. pos.x = 0xFFFF;
  7161.  
  7162. Container* container = dynamic_cast<Container*>(item->getParent());
  7163. if(container)
  7164. {
  7165. pos.y = ((uint16_t) ((uint16_t)0x40) | ((uint16_t)player->getContainerID(container)) );
  7166. pos.z = container->__getIndexOfThing(item);
  7167. stackpos = pos.z;
  7168. }
  7169. else
  7170. {
  7171. pos.y = player->__getIndexOfThing(item);
  7172. stackpos = pos.y;
  7173. }
  7174. }
  7175. else if(Tile* tile = topParent->getTile())
  7176. {
  7177. pos = tile->getPosition();
  7178. stackpos = tile->__getIndexOfThing(item);
  7179. }
  7180. }
  7181. }
  7182.  
  7183. Creature* Game::getCreatureByID(uint32_t id)
  7184. {
  7185. if(!id)
  7186. return NULL;
  7187.  
  7188. AutoList<Creature>::iterator it = autoList.find(id);
  7189. if(it != autoList.end() && !it->second->isRemoved())
  7190. return it->second;
  7191.  
  7192. return NULL; //just in case the player doesnt exist
  7193. }
  7194.  
  7195. Player* Game::getPlayerByID(uint32_t id)
  7196. {
  7197. if(!id)
  7198. return NULL;
  7199.  
  7200. AutoList<Player>::iterator it = Player::autoList.find(id);
  7201. if(it != Player::autoList.end() && !it->second->isRemoved())
  7202. return it->second;
  7203.  
  7204. return NULL; //just in case the player doesnt exist
  7205. }
  7206.  
  7207. Creature* Game::getCreatureByName(std::string s)
  7208. {
  7209. if(s.empty())
  7210. return NULL;
  7211.  
  7212. toLowerCaseString(s);
  7213. for(AutoList<Creature>::iterator it = autoList.begin(); it != autoList.end(); ++it)
  7214. {
  7215. if(!it->second->isRemoved() && asLowerCaseString(it->second->getName()) == s)
  7216. return it->second;
  7217. }
  7218.  
  7219. return NULL; //just in case the creature doesnt exist
  7220. }
  7221.  
  7222. Player* Game::getPlayerByName(std::string s)
  7223. {
  7224. if(s.empty())
  7225. return NULL;
  7226.  
  7227. toLowerCaseString(s);
  7228. for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
  7229. {
  7230. if(!it->second->isRemoved() && asLowerCaseString(it->second->getName()) == s)
  7231. return it->second;
  7232. }
  7233.  
  7234. return NULL;
  7235. }
  7236.  
  7237. Player* Game::getPlayerByNameEx(const std::string& s)
  7238. {
  7239. Player* player = getPlayerByName(s);
  7240. if(player)
  7241. return player;
  7242.  
  7243. std::string name = s;
  7244. if(!IOLoginData::getInstance()->playerExists(name))
  7245. return NULL;
  7246.  
  7247. player = new Player(name, NULL);
  7248. if(IOLoginData::getInstance()->loadPlayer(player, name))
  7249. return player;
  7250.  
  7251. #ifdef __DEBUG__
  7252. std::clog << "[Failure - Game::getPlayerByNameEx] Cannot load player: " << name << std::endl;
  7253. #endif
  7254. delete player;
  7255. return NULL;
  7256. }
  7257.  
  7258. Player* Game::getPlayerByGuid(uint32_t guid)
  7259. {
  7260. if(!guid)
  7261. return NULL;
  7262.  
  7263. for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
  7264. {
  7265. if(!it->second->isRemoved() && it->second->getGUID() == guid)
  7266. return it->second;
  7267. }
  7268.  
  7269. return NULL;
  7270. }
  7271.  
  7272. Player* Game::getPlayerByGuidEx(uint32_t guid)
  7273. {
  7274. Player* player = getPlayerByGuid(guid);
  7275. if(player)
  7276. return player;
  7277.  
  7278. std::string name;
  7279. if(!IOLoginData::getInstance()->getNameByGuid(guid, name))
  7280. return NULL;
  7281.  
  7282. player = new Player(name, NULL);
  7283. if(IOLoginData::getInstance()->loadPlayer(player, name))
  7284. return player;
  7285.  
  7286. #ifdef __DEBUG__
  7287. std::clog << "[Failure - Game::getPlayerByGuidEx] Cannot load player: " << name << std::endl;
  7288. #endif
  7289. delete player;
  7290. return NULL;
  7291. }
  7292.  
  7293. ReturnValue Game::getPlayerByNameWildcard(std::string s, Player*& player)
  7294. {
  7295. player = NULL;
  7296. if(s.empty())
  7297. return RET_PLAYERWITHTHISNAMEISNOTONLINE;
  7298.  
  7299. char tmp = *s.rbegin();
  7300. if(tmp != '~' && tmp != '*')
  7301. {
  7302. player = getPlayerByName(s);
  7303. if(!player)
  7304. return RET_PLAYERWITHTHISNAMEISNOTONLINE;
  7305.  
  7306. return RET_NOERROR;
  7307. }
  7308.  
  7309. Player* last = NULL;
  7310. s = s.substr(0, s.length() - 1);
  7311.  
  7312. toLowerCaseString(s);
  7313. for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
  7314. {
  7315. if(it->second->isRemoved())
  7316. continue;
  7317.  
  7318. std::string name = asLowerCaseString(it->second->getName());
  7319. if(name.substr(0, s.length()) != s)
  7320. continue;
  7321.  
  7322. if(last)
  7323. return RET_NAMEISTOOAMBIGUOUS;
  7324.  
  7325. last = it->second;
  7326. }
  7327.  
  7328. if(!last)
  7329. return RET_PLAYERWITHTHISNAMEISNOTONLINE;
  7330.  
  7331. player = last;
  7332. return RET_NOERROR;
  7333. }
  7334.  
  7335. Player* Game::getPlayerByAccount(uint32_t acc)
  7336. {
  7337. for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
  7338. {
  7339. if(!it->second->isRemoved() && it->second->getAccount() == acc)
  7340. return it->second;
  7341. }
  7342.  
  7343. return NULL;
  7344. }
  7345.  
  7346. PlayerVector Game::getPlayersByName(std::string s)
  7347. {
  7348. toLowerCaseString(s);
  7349. PlayerVector players;
  7350. for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
  7351. {
  7352. if(!it->second->isRemoved() && asLowerCaseString(it->second->getName()) == s)
  7353. players.push_back(it->second);
  7354. }
  7355.  
  7356. return players;
  7357. }
  7358.  
  7359. PlayerVector Game::getPlayersByAccount(uint32_t acc)
  7360. {
  7361. PlayerVector players;
  7362. for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
  7363. {
  7364. if(!it->second->isRemoved() && it->second->getAccount() == acc)
  7365. players.push_back(it->second);
  7366. }
  7367.  
  7368. return players;
  7369. }
  7370.  
  7371. PlayerVector Game::getPlayersByIP(uint32_t ip, uint32_t mask)
  7372. {
  7373. PlayerVector players;
  7374. for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
  7375. {
  7376. if(!it->second->isRemoved() && (it->second->getIP() & mask) == (ip & mask))
  7377. players.push_back(it->second);
  7378. }
  7379.  
  7380. return players;
  7381. }
  7382.  
  7383. bool Game::internalPlaceCreature(Creature* creature, const Position& pos, bool extendedPos /*= false*/, bool forced /*= false*/)
  7384. {
  7385. if(creature->getParent())
  7386. return false;
  7387.  
  7388. if(!map->placeCreature(pos, creature, extendedPos, forced))
  7389. return false;
  7390.  
  7391. creature->addRef();
  7392. creature->setID();
  7393.  
  7394. autoList[creature->getID()] = creature;
  7395. creature->addList();
  7396. return true;
  7397. }
  7398.  
  7399. bool Game::placeCreature(Creature* creature, const Position& pos, bool extendedPos /*= false*/, bool forced /*= false*/)
  7400. {
  7401. if(!internalPlaceCreature(creature, pos, extendedPos, forced))
  7402. return false;
  7403.  
  7404. Player* tmpPlayer = NULL;
  7405. if((tmpPlayer = creature->getPlayer()) && !tmpPlayer->storedConditionList.empty())
  7406. {
  7407. for(ConditionList::iterator it = tmpPlayer->storedConditionList.begin(); it != tmpPlayer->storedConditionList.end(); ++it)
  7408. {
  7409. if((*it)->getType() == CONDITION_MUTED && (*it)->getTicks() != -1 &&
  7410. (*it)->getTicks() - ((time(NULL) - tmpPlayer->getLastLogout()) * 1000) <= 0)
  7411. continue;
  7412.  
  7413. tmpPlayer->addCondition(*it);
  7414. }
  7415.  
  7416. tmpPlayer->storedConditionList.clear();
  7417. }
  7418.  
  7419. SpectatorVec::iterator it;
  7420. SpectatorVec list;
  7421.  
  7422. getSpectators(list, creature->getPosition(), false, true);
  7423. for(it = list.begin(); it != list.end(); ++it)
  7424. {
  7425. if((tmpPlayer = (*it)->getPlayer()))
  7426. tmpPlayer->sendCreatureAppear(creature);
  7427. }
  7428.  
  7429. for(it = list.begin(); it != list.end(); ++it)
  7430. (*it)->onCreatureAppear(creature);
  7431.  
  7432. creature->setLastPosition(pos);
  7433. creature->getParent()->postAddNotification(NULL, creature, NULL, creature->getParent()->__getIndexOfThing(creature));
  7434. addCreatureCheck(creature);
  7435.  
  7436. creature->onPlacedCreature();
  7437. return true;
  7438. }
  7439.  
  7440. ReturnValue Game::placeSummon(Creature* creature, const std::string& name)
  7441. {
  7442. Monster* monster = Monster::createMonster(name);
  7443. if(!monster)
  7444. return RET_NOTPOSSIBLE;
  7445.  
  7446. // Place the monster
  7447. creature->addSummon(monster);
  7448. if(placeCreature(monster, creature->getPosition(), true))
  7449. {
  7450. addMagicEffect(monster->getPosition(), MAGIC_EFFECT_TELEPORT);
  7451. return RET_NOERROR;
  7452. }
  7453.  
  7454. creature->removeSummon(monster);
  7455. return RET_NOTENOUGHROOM;
  7456. }
  7457.  
  7458. bool Game::removeCreature(Creature* creature, bool isLogout /*= true*/)
  7459. {
  7460. if(creature->isRemoved())
  7461. return false;
  7462.  
  7463. Tile* tile = creature->getTile();
  7464. SpectatorVec list;
  7465. getSpectators(list, tile->getPosition(), false, true);
  7466.  
  7467. SpectatorVec::iterator it;
  7468. for(it = list.begin(); it != list.end(); ++it)
  7469. (*it)->onCreatureDisappear(creature, isLogout);
  7470.  
  7471. if(tile != creature->getTile())
  7472. {
  7473. list.clear();
  7474. tile = creature->getTile();
  7475. getSpectators(list, tile->getPosition(), false, true);
  7476. }
  7477.  
  7478. Player* player = NULL;
  7479. std::vector<uint32_t> oldStackPosVector;
  7480. for(it = list.begin(); it != list.end(); ++it)
  7481. {
  7482. if((player = (*it)->getPlayer()) && player->canSeeCreature(creature))
  7483. oldStackPosVector.push_back(tile->getClientIndexOfThing(player, creature));
  7484. }
  7485.  
  7486. int32_t oldIndex = tile->__getIndexOfThing(creature);
  7487. if(!map->removeCreature(creature))
  7488. return false;
  7489.  
  7490. //send to client
  7491. uint32_t i = 0;
  7492. for(it = list.begin(); it != list.end(); ++it)
  7493. {
  7494. if(creature != (*it))
  7495. (*it)->updateTileCache(tile);
  7496.  
  7497. if(!(player = (*it)->getPlayer()) || !player->canSeeCreature(creature))
  7498. continue;
  7499.  
  7500. player->setWalkthrough(creature, false);
  7501. player->sendCreatureDisappear(creature, oldStackPosVector[i]);
  7502. ++i;
  7503. }
  7504.  
  7505. creature->getParent()->postRemoveNotification(NULL, creature, NULL, oldIndex, true);
  7506. creature->onRemovedCreature();
  7507.  
  7508. autoList.erase(creature->getID());
  7509. freeThing(creature);
  7510.  
  7511. removeCreatureCheck(creature);
  7512. for(std::list<Creature*>::iterator it = creature->summons.begin(); it != creature->summons.end(); ++it)
  7513. removeCreature(*it);
  7514.  
  7515. return true;
  7516. }
  7517.  
  7518. bool Game::playerMoveThing(uint32_t playerId, const Position& fromPos,
  7519. uint16_t spriteId, int16_t fromStackpos, const Position& toPos, uint8_t count)
  7520. {
  7521. Player* player = getPlayerByID(playerId);
  7522. if(!player || player->isRemoved())
  7523. return false;
  7524.  
  7525. uint8_t fromIndex = 0;
  7526. if(fromPos.x == 0xFFFF)
  7527. {
  7528. if(fromPos.y & 0x40)
  7529. fromIndex = static_cast<uint8_t>(fromPos.z);
  7530. else
  7531. fromIndex = static_cast<uint8_t>(fromPos.y);
  7532. }
  7533. else
  7534. fromIndex = fromStackpos;
  7535.  
  7536. Thing* thing = internalGetThing(player, fromPos, fromIndex, spriteId, STACKPOS_MOVE);
  7537. Cylinder* toCylinder = internalGetCylinder(player, toPos);
  7538. if(!thing || !toCylinder)
  7539. {
  7540. player->sendCancelMessage(RET_NOTPOSSIBLE);
  7541. return false;
  7542. }
  7543.  
  7544. if(Creature* movingCreature = thing->getCreature())
  7545. playerMoveCreature(playerId, movingCreature->getID(), movingCreature->getPosition(), toCylinder->getPosition(), true);
  7546. else if(thing->getItem())
  7547. playerMoveItem(playerId, fromPos, spriteId, fromStackpos, toPos, count);
  7548.  
  7549. return true;
  7550. }
  7551.  
  7552. bool Game::playerMoveCreature(uint32_t playerId, uint32_t movingCreatureId,
  7553. const Position& movingCreaturePos, const Position& toPos, bool delay)
  7554. {
  7555. Player* player = getPlayerByID(playerId);
  7556. if(!player || player->isRemoved() || player->hasFlag(PlayerFlag_CannotMoveCreatures))
  7557. return false;
  7558.  
  7559. if(!player->canDoAction())
  7560. {
  7561. uint32_t delay = player->getNextActionTime();
  7562. SchedulerTask* task = createSchedulerTask(delay, boost::bind(&Game::playerMoveCreature,
  7563. this, playerId, movingCreatureId, movingCreaturePos, toPos, true));
  7564.  
  7565. player->setNextActionTask(task);
  7566. return false;
  7567. }
  7568.  
  7569. Creature* movingCreature = getCreatureByID(movingCreatureId);
  7570. if(!movingCreature || movingCreature->isRemoved() || !player->canSeeCreature(movingCreature))
  7571. return false;
  7572.  
  7573. player->setNextActionTask(NULL);
  7574. if(!Position::areInRange<1,1,0>(movingCreaturePos, player->getPosition()) && !player->hasCustomFlag(PlayerCustomFlag_CanMoveFromFar))
  7575. {
  7576. //need to walk to the creature first before moving it
  7577. std::list<Direction> listDir;
  7578. if(getPathToEx(player, movingCreaturePos, listDir, 0, 1, true, true))
  7579. {
  7580. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::playerAutoWalk,
  7581. this, player->getID(), listDir)));
  7582. SchedulerTask* task = createSchedulerTask(std::max((int32_t)SCHEDULER_MINTICKS, player->getStepDuration()),
  7583. boost::bind(&Game::playerMoveCreature, this, playerId, movingCreatureId, movingCreaturePos, toPos, false));
  7584.  
  7585. player->setNextWalkActionTask(task);
  7586. return true;
  7587. }
  7588.  
  7589. player->sendCancelMessage(RET_THEREISNOWAY);
  7590. return false;
  7591. }
  7592. else if(delay)
  7593. {
  7594. uint32_t delayTime = g_config.getNumber(ConfigManager::PUSH_CREATURE_DELAY);
  7595. if(delayTime > 0)
  7596. {
  7597. SchedulerTask* task = createSchedulerTask(delayTime,
  7598. boost::bind(&Game::playerMoveCreature, this, playerId, movingCreatureId, movingCreaturePos, toPos, false));
  7599. player->setNextActionTask(task);
  7600. return true;
  7601. }
  7602. }
  7603.  
  7604. Tile* toTile = map->getTile(toPos);
  7605. if(!toTile)
  7606. {
  7607. player->sendCancelMessage(RET_NOTPOSSIBLE);
  7608. return false;
  7609. }
  7610.  
  7611. if(!player->hasFlag(PlayerFlag_CanPushAllCreatures))
  7612. {
  7613. if(!movingCreature->isPushable())
  7614. {
  7615. player->sendCancelMessage(RET_NOTMOVABLE);
  7616. return false;
  7617. }
  7618.  
  7619. if(movingCreature->getNoMove())
  7620. {
  7621. player->sendCancelMessage(RET_NOTPOSSIBLE);
  7622. return false;
  7623. }
  7624.  
  7625. if(toTile->hasProperty(BLOCKPATH))
  7626. {
  7627. player->sendCancelMessage(RET_NOTENOUGHROOM);
  7628. return false;
  7629. }
  7630. }
  7631.  
  7632. //check throw distance
  7633. const Position& pos = movingCreature->getPosition();
  7634. if(!player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere) && ((std::abs(pos.x - toPos.x) > movingCreature->getThrowRange()) ||
  7635. (std::abs(pos.y - toPos.y) > movingCreature->getThrowRange()) || (std::abs(pos.z - toPos.z) * 4 > movingCreature->getThrowRange())))
  7636. {
  7637. player->sendCancelMessage(RET_DESTINATIONOUTOFREACH);
  7638. return false;
  7639. }
  7640.  
  7641. if(player != movingCreature)
  7642. {
  7643. if(!player->hasFlag(PlayerFlag_IgnoreProtectionZone) && (movingCreature->getZone() == ZONE_PROTECTION
  7644. || movingCreature->getZone() == ZONE_OPTIONAL) && !toTile->hasFlag(TILESTATE_OPTIONALZONE)
  7645. && !toTile->hasFlag(TILESTATE_PROTECTIONZONE))
  7646. {
  7647. player->sendCancelMessage(RET_ACTIONNOTPERMITTEDINANOPVPZONE);
  7648. return false;
  7649. }
  7650.  
  7651. if(!player->hasFlag(PlayerFlag_CanPushAllCreatures))
  7652. {
  7653. if(toTile->getCreatureCount() && !Item::items[
  7654. movingCreature->getTile()->ground->getID()].walkStack)
  7655. {
  7656. player->sendCancelMessage(RET_NOTENOUGHROOM);
  7657. return false;
  7658. }
  7659.  
  7660. if(MagicField* field = toTile->getFieldItem())
  7661. {
  7662. if(field->isUnstepable() || field->isBlocking(movingCreature)
  7663. || !movingCreature->isImmune(field->getCombatType()))
  7664. {
  7665. player->sendCancelMessage(RET_NOTPOSSIBLE);
  7666. return false;
  7667. }
  7668. }
  7669.  
  7670. uint32_t protectionLevel = g_config.getNumber(ConfigManager::PROTECTION_LEVEL);
  7671. if(player->getLevel() < protectionLevel && player->getVocation()->isAttackable())
  7672. {
  7673. Player* movingPlayer = movingCreature->getPlayer();
  7674. if(movingPlayer && movingPlayer->getLevel() >= protectionLevel
  7675. && movingPlayer->getVocation()->isAttackable())
  7676. {
  7677. player->sendCancelMessage(RET_NOTMOVABLE);
  7678. return false;
  7679. }
  7680. }
  7681. }
  7682. }
  7683.  
  7684. bool deny = false;
  7685. CreatureEventList pushEvents = player->getCreatureEvents(CREATURE_EVENT_PUSH);
  7686. for(CreatureEventList::iterator it = pushEvents.begin(); it != pushEvents.end(); ++it)
  7687. {
  7688. if(!(*it)->executePush(player, movingCreature) && !deny)
  7689. deny = true;
  7690. }
  7691.  
  7692. if(deny)
  7693. return false;
  7694.  
  7695. ReturnValue ret = internalMoveCreature(player, movingCreature, movingCreature->getTile(), toTile);
  7696. if(ret != RET_NOERROR)
  7697. {
  7698. if(!player->hasCustomFlag(PlayerCustomFlag_CanMoveAnywhere))
  7699. {
  7700. player->sendCancelMessage(ret);
  7701. return false;
  7702. }
  7703.  
  7704. if(!toTile->ground)
  7705. {
  7706. player->sendCancelMessage(RET_NOTPOSSIBLE);
  7707. return false;
  7708. }
  7709.  
  7710. internalTeleport(movingCreature, toTile->getPosition(), false);
  7711. }
  7712. else if(Player* movingPlayer = movingCreature->getPlayer())
  7713. {
  7714. uint64_t delay = OTSYS_TIME() + movingPlayer->getStepDuration();
  7715. if(delay > movingPlayer->getNextActionTime())
  7716. movingPlayer->setNextAction(delay);
  7717. }
  7718.  
  7719. return true;
  7720. }
  7721.  
  7722. ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/)
  7723. {
  7724. const Position& currentPos = creature->getPosition();
  7725. Cylinder* fromTile = creature->getTile();
  7726. Cylinder* toTile = NULL;
  7727.  
  7728. Position destPos = getNextPosition(direction, currentPos);
  7729. if(direction < SOUTHWEST && creature->getPlayer())
  7730. {
  7731. Tile* tmpTile = NULL;
  7732. if(currentPos.z != 8 && creature->getTile()->hasHeight(3)) //try go up
  7733. {
  7734. if((!(tmpTile = map->getTile(Position(currentPos.x, currentPos.y, currentPos.z - 1)))
  7735. || (!tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID))) &&
  7736. (tmpTile = map->getTile(Position(destPos.x, destPos.y, destPos.z - 1)))
  7737. && tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID) && !tmpTile->hasProperty(FLOORCHANGEDOWN))
  7738. {
  7739. flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE;
  7740. destPos.z--;
  7741. }
  7742. }
  7743. else if(currentPos.z != 7 && (!(tmpTile = map->getTile(destPos)) || (!tmpTile->ground &&
  7744. !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position(
  7745. destPos.x, destPos.y, destPos.z + 1))) && tmpTile->hasHeight(3)) //try go down
  7746. {
  7747. flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE;
  7748. destPos.z++;
  7749. }
  7750. }
  7751.  
  7752. ReturnValue ret = RET_NOTPOSSIBLE;
  7753. if((toTile = map->getTile(destPos)))
  7754. ret = internalMoveCreature(NULL, creature, fromTile, toTile, flags);
  7755.  
  7756. if(ret == RET_NOERROR)
  7757. return RET_NOERROR;
  7758.  
  7759. Player* player = creature->getPlayer();
  7760. if(!player)
  7761. return ret;
  7762.  
  7763. player->sendCancelMessage(ret);
  7764. player->sendCancelWalk();
  7765. return ret;
  7766. }
  7767.  
  7768. ReturnValue Game::internalMoveCreature(Creature* actor, Creature* creature, Cylinder* fromCylinder,
  7769. Cylinder* toCylinder, uint32_t flags/* = 0*/, bool forceTeleport/* = false*/)
  7770. {
  7771. //check if we can move the creature to the destination
  7772. ReturnValue ret = toCylinder->__queryAdd(0, creature, 1, flags, actor);
  7773. if(ret != RET_NOERROR)
  7774. return ret;
  7775.  
  7776. fromCylinder->getTile()->moveCreature(actor, creature, toCylinder, forceTeleport);
  7777. if(creature->getParent() != toCylinder)
  7778. return RET_NOERROR;
  7779.  
  7780. Item* toItem = NULL;
  7781. Cylinder* subCylinder = NULL;
  7782.  
  7783. int32_t n = 0, tmp = 0;
  7784. while((subCylinder = toCylinder->__queryDestination(tmp, creature, &toItem, flags)) != toCylinder)
  7785. {
  7786. toCylinder->getTile()->moveCreature(actor, creature, subCylinder);
  7787. if(creature->getParent() != subCylinder) //could happen if a script move the creature
  7788. break;
  7789.  
  7790. toCylinder = subCylinder;
  7791. flags = 0;
  7792. if(++n >= MAP_MAX_LAYERS) //to prevent infinite loop
  7793. break;
  7794. }
  7795.  
  7796. return RET_NOERROR;
  7797. }
  7798.  
  7799. bool Game::playerMoveItem(uint32_t playerId, const Position& fromPos,
  7800. uint16_t spriteId, int16_t fromStackpos, const Position& toPos, uint8_t count)
  7801. {
  7802. Player* player = getPlayerByID(playerId);
  7803. if(!player || player->isRemoved() || player->hasFlag(PlayerFlag_CannotMoveItems))
  7804. return false;
  7805.  
  7806. if(!player->canDoAction())
  7807. {
  7808. uint32_t delay = player->getNextActionTime();
  7809. SchedulerTask* task = createSchedulerTask(delay, boost::bind(&Game::playerMoveItem, this,
  7810. playerId, fromPos, spriteId, fromStackpos, toPos, count));
  7811.  
  7812. player->setNextActionTask(task);
  7813. return false;
  7814. }
  7815.  
  7816. player->setNextActionTask(NULL);
  7817. Cylinder* fromCylinder = internalGetCylinder(player, fromPos);
  7818.  
  7819. uint8_t fromIndex = 0;
  7820. if(fromPos.x == 0xFFFF)
  7821. {
  7822. if(fromPos.y & 0x40)
  7823. fromIndex = static_cast<uint8_t>(fromPos.z);
  7824. else
  7825. fromIndex = static_cast<uint8_t>(fromPos.y);
  7826. }
  7827. else
  7828. fromIndex = fromStackpos;
  7829.  
  7830. Thing* thing = internalGetThing(player, fromPos, fromIndex, spriteId, STACKPOS_MOVE);
  7831. if(!thing || !thing->getItem())
  7832. {
  7833. player->sendCancelMessage(RET_NOTPOSSIBLE);
  7834. return false;
  7835. }
  7836.  
  7837. Item* item = thing->getItem();
  7838. Cylinder* toCylinder = internalGetCylinder(player, toPos);
  7839.  
  7840. uint8_t toIndex = 0;
  7841. if(toPos.x == 0xFFFF)
  7842. {
  7843. if(toPos.y & 0x40)
  7844. toIndex = static_cast<uint8_t>(toPos.z);
  7845. else
  7846. toIndex = static_cast<uint8_t>(toPos.y);
  7847. }
  7848.  
  7849. if(!fromCylinder || !toCylinder || !item || item->getClientID() != spriteId)
  7850. {
  7851. player->sendCancelMessage(RET_NOTPOSSIBLE);
  7852. return false;
  7853. }
  7854.  
  7855. if(!player->hasCustomFlag(PlayerCustomFlag_CanPushAllItems) && (!item->isPushable() || (item->isLoadedFromMap() &&
  7856. (item->getUniqueId() != 0 || (item->getActionId() != 0 && item->getContainer())))))
  7857. {
  7858. player->sendCancelMessage(RET_NOTMOVABLE);
  7859. return false;
  7860. }
  7861.  
  7862. const Position &mapToPos = toCylinder->getTile()->getPosition(), &playerPos = player->getPosition(),
  7863. &mapFromPos = fromCylinder->getTile()->getPosition();
  7864. if(playerPos.z > mapFromPos.z && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
  7865. {
  7866. player->sendCancelMessage(RET_FIRSTGOUPSTAIRS);
  7867. return false;
  7868. }
  7869.  
  7870. if(playerPos.z < mapFromPos.z && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
  7871. {
  7872. player->sendCancelMessage(RET_FIRSTGODOWNSTAIRS);
  7873. return false;
  7874. }
  7875.  
  7876. if(!Position::areInRange<1,1,0>(playerPos, mapFromPos) && !player->hasCustomFlag(PlayerCustomFlag_CanMoveFromFar))
  7877. {
  7878. //need to walk to the item first before using it
  7879. std::list<Direction> listDir;
  7880. if(getPathToEx(player, item->getPosition(), listDir, 0, 1, true, true))
  7881. {
  7882. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::playerAutoWalk,
  7883. this, player->getID(), listDir)));
  7884. SchedulerTask* task = createSchedulerTask(std::max((int32_t)SCHEDULER_MINTICKS, player->getStepDuration()),
  7885. boost::bind(&Game::playerMoveItem, this, playerId, fromPos, spriteId, fromStackpos, toPos, count));
  7886.  
  7887. player->setNextWalkActionTask(task);
  7888. return true;
  7889. }
  7890.  
  7891. player->sendCancelMessage(RET_THEREISNOWAY);
  7892. return false;
  7893. }
  7894.  
  7895. //hangable item specific code
  7896. if(item->isHangable() && toCylinder->getTile()->hasProperty(SUPPORTHANGABLE))
  7897. {
  7898. //destination supports hangable objects so need to move there first
  7899. if(toCylinder->getTile()->hasProperty(ISVERTICAL))
  7900. {
  7901. if(player->getPosition().x + 1 == mapToPos.x)
  7902. {
  7903. player->sendCancelMessage(RET_NOTPOSSIBLE);
  7904. return false;
  7905. }
  7906. }
  7907. else if(toCylinder->getTile()->hasProperty(ISHORIZONTAL))
  7908. {
  7909. if(player->getPosition().y + 1 == mapToPos.y)
  7910. {
  7911. player->sendCancelMessage(RET_NOTPOSSIBLE);
  7912. return false;
  7913. }
  7914. }
  7915.  
  7916. if(!Position::areInRange<1,1,0>(playerPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanMoveFromFar))
  7917. {
  7918. Position walkPos = mapToPos;
  7919. if(toCylinder->getTile()->hasProperty(ISVERTICAL))
  7920. walkPos.x -= -1;
  7921.  
  7922. if(toCylinder->getTile()->hasProperty(ISHORIZONTAL))
  7923. walkPos.y -= -1;
  7924.  
  7925. Position itemPos = fromPos;
  7926. int16_t itemStackpos = fromStackpos;
  7927. if(fromPos.x != 0xFFFF && Position::areInRange<1,1,0>(mapFromPos, player->getPosition())
  7928. && !Position::areInRange<1,1,0>(mapFromPos, walkPos))
  7929. {
  7930. //need to pickup the item first
  7931. Item* moveItem = NULL;
  7932. ReturnValue ret = internalMoveItem(player, fromCylinder, player, INDEX_WHEREEVER, item, count, &moveItem);
  7933. if(ret != RET_NOERROR)
  7934. {
  7935. player->sendCancelMessage(ret);
  7936. return false;
  7937. }
  7938.  
  7939. //changing the position since its now in the inventory of the player
  7940. internalGetPosition(moveItem, itemPos, itemStackpos);
  7941. }
  7942.  
  7943. std::list<Direction> listDir;
  7944. if(map->getPathTo(player, walkPos, listDir))
  7945. {
  7946. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::playerAutoWalk,
  7947. this, player->getID(), listDir)));
  7948. SchedulerTask* task = createSchedulerTask(std::max((int32_t)SCHEDULER_MINTICKS, player->getStepDuration()),
  7949. boost::bind(&Game::playerMoveItem, this, playerId, itemPos, spriteId, itemStackpos, toPos, count));
  7950.  
  7951. player->setNextWalkActionTask(task);
  7952. return true;
  7953. }
  7954.  
  7955. player->sendCancelMessage(RET_THEREISNOWAY);
  7956. return false;
  7957. }
  7958. }
  7959.  
  7960. if(!player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
  7961. {
  7962. if((std::abs(playerPos.x - mapToPos.x) > item->getThrowRange()) ||
  7963. (std::abs(playerPos.y - mapToPos.y) > item->getThrowRange()) ||
  7964. (std::abs(mapFromPos.z - mapToPos.z) * 4 > item->getThrowRange()))
  7965. {
  7966. player->sendCancelMessage(RET_DESTINATIONOUTOFREACH);
  7967. return false;
  7968. }
  7969. }
  7970.  
  7971. if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
  7972. {
  7973. player->sendCancelMessage(RET_CANNOTTHROW);
  7974. return false;
  7975. }
  7976.  
  7977. bool success = true;
  7978. CreatureEventList moveitemEvents = player->getCreatureEvents(CREATURE_EVENT_MOVEITEM);
  7979. for(CreatureEventList::iterator it = moveitemEvents.begin(); it != moveitemEvents.end(); ++it)
  7980. {
  7981. Item* toContainer = toCylinder->getItem();
  7982. Item* fromContainer = fromCylinder->getItem();
  7983. if(!(*it)->executeMoveItem(player, item, count, fromPos, toPos, (toContainer ? toContainer : 0), (fromContainer ? fromContainer : 0), fromStackpos) && success)
  7984. success = false;
  7985. }
  7986.  
  7987. if(!success)
  7988. return false;
  7989. ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL);
  7990. if(ret == RET_NOERROR)
  7991. return true;
  7992.  
  7993. player->setNextAction(OTSYS_TIME() + g_config.getNumber(ConfigManager::ACTIONS_DELAY_INTERVAL) - 2000);
  7994. player->sendCancelMessage(ret);
  7995. return false;
  7996. }
  7997.  
  7998. ReturnValue Game::internalMoveItem(Creature* actor, Cylinder* fromCylinder, Cylinder* toCylinder,
  7999. int32_t index, Item* item, uint32_t count, Item** _moveItem, uint32_t flags /*= 0*/)
  8000. {
  8001. if(!toCylinder)
  8002. return RET_NOTPOSSIBLE;
  8003.  
  8004. if(!item->getParent())
  8005. {
  8006. assert(fromCylinder == item->getParent());
  8007. return internalAddItem(actor, toCylinder, item, INDEX_WHEREEVER, FLAG_NOLIMIT);
  8008. }
  8009.  
  8010. Item* toItem = NULL;
  8011. Cylinder* subCylinder = NULL;
  8012.  
  8013. int32_t floor = 0;
  8014. while((subCylinder = toCylinder->__queryDestination(index, item, &toItem, flags)) != toCylinder)
  8015. {
  8016. flags = 0;
  8017. toCylinder = subCylinder;
  8018. //to prevent infinite loop
  8019. if(++floor >= MAP_MAX_LAYERS)
  8020. break;
  8021. }
  8022.  
  8023. //destination is the same as the source?
  8024. if(item == toItem)
  8025. return RET_NOERROR; //silently ignore move
  8026.  
  8027. //check if we can add this item
  8028. ReturnValue ret = toCylinder->__queryAdd(index, item, count, flags, actor);
  8029. if(ret == RET_NEEDEXCHANGE)
  8030. {
  8031. //check if we can add it to source cylinder
  8032. int32_t fromIndex = fromCylinder->__getIndexOfThing(item);
  8033. if((ret = fromCylinder->__queryAdd(fromIndex, toItem, toItem->getItemCount(), 0, actor)) == RET_NOERROR)
  8034. {
  8035. //check how much we can move
  8036. uint32_t maxExchangeQueryCount = 0;
  8037. ReturnValue retExchangeMaxCount = fromCylinder->__queryMaxCount(-1, toItem, toItem->getItemCount(), maxExchangeQueryCount, 0);
  8038. if(retExchangeMaxCount != RET_NOERROR && maxExchangeQueryCount == 0)
  8039. return retExchangeMaxCount;
  8040.  
  8041. if((toCylinder->__queryRemove(toItem, toItem->getItemCount(), flags, actor) == RET_NOERROR) && ret == RET_NOERROR)
  8042. {
  8043. int32_t oldToItemIndex = toCylinder->__getIndexOfThing(toItem);
  8044. toCylinder->__removeThing(toItem, toItem->getItemCount());
  8045.  
  8046. fromCylinder->__addThing(actor, toItem);
  8047. if(oldToItemIndex != -1)
  8048. toCylinder->postRemoveNotification(actor, toItem, fromCylinder, oldToItemIndex, true);
  8049.  
  8050. int32_t newToItemIndex = fromCylinder->__getIndexOfThing(toItem);
  8051. if(newToItemIndex != -1)
  8052. fromCylinder->postAddNotification(actor, toItem, toCylinder, newToItemIndex);
  8053.  
  8054. ret = toCylinder->__queryAdd(index, item, count, flags, actor);
  8055. toItem = NULL;
  8056. }
  8057. }
  8058. }
  8059.  
  8060. if(ret != RET_NOERROR)
  8061. return ret;
  8062.  
  8063. //check how much we can move
  8064. uint32_t maxQueryCount = 0;
  8065. ReturnValue retMaxCount = toCylinder->__queryMaxCount(index, item, count, maxQueryCount, flags);
  8066. if(retMaxCount != RET_NOERROR && !maxQueryCount)
  8067. return retMaxCount;
  8068.  
  8069. uint32_t m = maxQueryCount;
  8070. if(item->isStackable())
  8071. m = std::min((uint32_t)count, m);
  8072.  
  8073. Item* moveItem = item;
  8074. //check if we can remove this item
  8075. if((fromCylinder->__queryRemove(item, m, flags, actor)) != RET_NOERROR)
  8076. return ret;
  8077.  
  8078. //remove the item
  8079. int32_t itemIndex = fromCylinder->__getIndexOfThing(item);
  8080. fromCylinder->__removeThing(item, m);
  8081. bool isCompleteRemoval = item->isRemoved();
  8082.  
  8083. Item* updateItem = NULL;
  8084. if(item->isStackable())
  8085. {
  8086. uint8_t n = 0;
  8087. if(toItem && toItem->getID() == item->getID())
  8088. {
  8089. n = std::min((uint32_t)100 - toItem->getItemCount(), m);
  8090. toCylinder->__updateThing(toItem, toItem->getID(), toItem->getItemCount() + n);
  8091. updateItem = toItem;
  8092. }
  8093.  
  8094. if(m - n > 0)
  8095. moveItem = Item::CreateItem(item->getID(), m - n);
  8096. else
  8097. moveItem = NULL;
  8098.  
  8099. if(item->isRemoved())
  8100. freeThing(item);
  8101. }
  8102.  
  8103. if(moveItem)
  8104. toCylinder->__addThing(actor, index, moveItem);
  8105.  
  8106. if(itemIndex != -1)
  8107. fromCylinder->postRemoveNotification(actor, item, toCylinder, itemIndex, isCompleteRemoval);
  8108.  
  8109. if(moveItem)
  8110. {
  8111. int32_t moveItemIndex = toCylinder->__getIndexOfThing(moveItem);
  8112. if(moveItemIndex != -1)
  8113. toCylinder->postAddNotification(actor, moveItem, fromCylinder, moveItemIndex);
  8114. }
  8115.  
  8116. if(updateItem)
  8117. {
  8118. int32_t updateItemIndex = toCylinder->__getIndexOfThing(updateItem);
  8119. if(updateItemIndex != -1)
  8120. toCylinder->postAddNotification(actor, updateItem, fromCylinder, updateItemIndex);
  8121. }
  8122.  
  8123. if(_moveItem)
  8124. {
  8125. if(moveItem)
  8126. *_moveItem = moveItem;
  8127. else
  8128. *_moveItem = item;
  8129. }
  8130.  
  8131. //we could not move all, inform the player
  8132. if(item->isStackable() && maxQueryCount < count)
  8133. return retMaxCount;
  8134.  
  8135. return ret;
  8136. }
  8137.  
  8138. ReturnValue Game::internalAddItem(Creature* actor, Cylinder* toCylinder, Item* item, int32_t index /*= INDEX_WHEREEVER*/,
  8139. uint32_t flags/* = 0*/, bool test/* = false*/)
  8140. {
  8141. uint32_t remainderCount = 0;
  8142. return internalAddItem(actor, toCylinder, item, index, flags, test, remainderCount);
  8143. }
  8144.  
  8145. ReturnValue Game::internalAddItem(Creature* actor, Cylinder* toCylinder, Item* item, int32_t index,
  8146. uint32_t flags, bool test, uint32_t& remainderCount)
  8147. {
  8148. Item* stackItem = NULL;
  8149. return internalAddItem(actor, toCylinder, item, index, flags, test, remainderCount, &stackItem);
  8150. }
  8151.  
  8152. ReturnValue Game::internalAddItem(Creature* actor, Cylinder* toCylinder, Item* item, int32_t index,
  8153. uint32_t flags, bool test, uint32_t& remainderCount, Item** stackItem)
  8154. {
  8155. *stackItem = NULL;
  8156. remainderCount = 0;
  8157. if(!toCylinder || !item)
  8158. return RET_NOTPOSSIBLE;
  8159.  
  8160. Cylinder* destCylinder = toCylinder;
  8161. toCylinder = toCylinder->__queryDestination(index, item, stackItem, flags);
  8162.  
  8163. //check if we can add this item
  8164. ReturnValue ret = toCylinder->__queryAdd(index, item, item->getItemCount(), flags, actor);
  8165. if(ret != RET_NOERROR)
  8166. return ret;
  8167.  
  8168. uint32_t maxQueryCount = 0;
  8169. ret = destCylinder->__queryMaxCount(INDEX_WHEREEVER, item, item->getItemCount(), maxQueryCount, flags);
  8170. if(ret != RET_NOERROR)
  8171. return ret;
  8172.  
  8173. if(test)
  8174. return RET_NOERROR;
  8175.  
  8176. Item* toItem = *stackItem;
  8177. if(item->isStackable() && toItem)
  8178. {
  8179. uint32_t m = std::min((uint32_t)item->getItemCount(), maxQueryCount), n = 0;
  8180. if(toItem->getID() == item->getID())
  8181. {
  8182. n = std::min((uint32_t)100 - toItem->getItemCount(), m);
  8183. toCylinder->__updateThing(toItem, toItem->getID(), toItem->getItemCount() + n);
  8184. }
  8185.  
  8186. uint32_t count = m - n;
  8187. if(count > 0)
  8188. {
  8189. if(item->getItemCount() != count)
  8190. {
  8191. Item* remainderItem = Item::CreateItem(item->getID(), count);
  8192. if((ret = internalAddItem(NULL, toCylinder, remainderItem, INDEX_WHEREEVER, flags, false)) == RET_NOERROR)
  8193. {
  8194. if(item->getParent() != VirtualCylinder::virtualCylinder)
  8195. {
  8196. item->onRemoved();
  8197. freeThing(item);
  8198. }
  8199.  
  8200. return RET_NOERROR;
  8201. }
  8202.  
  8203. delete remainderItem;
  8204. remainderCount = count;
  8205. return ret;
  8206. }
  8207. }
  8208. else
  8209. {
  8210. if(item->getParent() != VirtualCylinder::virtualCylinder)
  8211. {
  8212. item->onRemoved();
  8213. freeThing(item);
  8214. }
  8215.  
  8216. return RET_NOERROR;
  8217. }
  8218. }
  8219.  
  8220. toCylinder->__addThing(NULL, index, item);
  8221. int32_t itemIndex = toCylinder->__getIndexOfThing(item);
  8222. if(itemIndex != -1)
  8223. toCylinder->postAddNotification(actor, item, NULL, itemIndex);
  8224.  
  8225. return RET_NOERROR;
  8226. }
  8227.  
  8228. ReturnValue Game::internalRemoveItem(Creature* actor, Item* item, int32_t count /*= -1*/, bool test /*= false*/, uint32_t flags /*= 0*/)
  8229. {
  8230. Cylinder* cylinder = item->getParent();
  8231. if(!cylinder)
  8232. return RET_NOTPOSSIBLE;
  8233.  
  8234. if(count == -1)
  8235. count = item->getItemCount();
  8236.  
  8237. //check if we can remove this item
  8238. ReturnValue ret = cylinder->__queryRemove(item, count, flags | FLAG_IGNORENOTMOVABLE, actor);
  8239. if(ret != RET_NOERROR)
  8240. return ret;
  8241.  
  8242. if(!item->canRemove())
  8243. return RET_NOTPOSSIBLE;
  8244.  
  8245. if(!test)
  8246. {
  8247. //remove the item
  8248. int32_t index = cylinder->__getIndexOfThing(item);
  8249. cylinder->__removeThing(item, count);
  8250.  
  8251. bool isCompleteRemoval = false;
  8252. if(item->isRemoved())
  8253. {
  8254. isCompleteRemoval = true;
  8255. freeThing(item);
  8256. }
  8257.  
  8258. cylinder->postRemoveNotification(actor, item, NULL, index, isCompleteRemoval);
  8259. }
  8260.  
  8261. item->onRemoved();
  8262. return RET_NOERROR;
  8263. }
  8264.  
  8265. ReturnValue Game::internalPlayerAddItem(Creature* actor, Player* player, Item* item,
  8266. bool dropOnMap/* = true*/, slots_t slot/* = SLOT_WHEREEVER*/)
  8267. {
  8268. Item* toItem = NULL;
  8269. uint32_t remainderCount = 0, count = item->getItemCount();
  8270.  
  8271. ReturnValue ret = internalAddItem(actor, player, item, (int32_t)slot, 0, false, remainderCount, &toItem);
  8272. if(ret == RET_NOERROR)
  8273. return RET_NOERROR;
  8274.  
  8275. if(dropOnMap)
  8276. {
  8277. if(!remainderCount)
  8278. return internalAddItem(actor, player->getTile(), item, (int32_t)slot, FLAG_NOLIMIT);
  8279.  
  8280. Item* remainderItem = Item::CreateItem(item->getID(), remainderCount);
  8281. ReturnValue remainderRet = internalAddItem(actor, player->getTile(), remainderItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
  8282. if(remainderRet == RET_NOERROR)
  8283. return RET_NOERROR;
  8284.  
  8285. delete remainderItem;
  8286. }
  8287.  
  8288. if(remainderCount && toItem)
  8289. transformItem(toItem, toItem->getID(), (toItem->getItemCount() - (count - remainderCount)));
  8290.  
  8291. return ret;
  8292. }
  8293.  
  8294. Item* Game::findItemOfType(Cylinder* cylinder, uint16_t itemId,
  8295. bool depthSearch /*= true*/, int32_t subType /*= -1*/)
  8296. {
  8297. if(!cylinder)
  8298. return NULL;
  8299.  
  8300. std::list<Container*> listContainer;
  8301. Container* tmpContainer = NULL;
  8302.  
  8303. Thing* thing = NULL;
  8304. Item* item = NULL;
  8305. for(int32_t i = cylinder->__getFirstIndex(); i < cylinder->__getLastIndex();)
  8306. {
  8307. if((thing = cylinder->__getThing(i)) && (item = thing->getItem()))
  8308. {
  8309. if(item->getID() == itemId && (subType == -1 || subType == item->getSubType()))
  8310. return item;
  8311. else
  8312. {
  8313. ++i;
  8314. if(depthSearch && (tmpContainer = item->getContainer()))
  8315. listContainer.push_back(tmpContainer);
  8316. }
  8317. }
  8318. else
  8319. ++i;
  8320. }
  8321.  
  8322. while(listContainer.size() > 0)
  8323. {
  8324. Container* container = listContainer.front();
  8325. listContainer.pop_front();
  8326. for(int32_t i = 0; i < (int32_t)container->size();)
  8327. {
  8328. Item* item = container->getItem(i);
  8329. if(item->getID() == itemId && (subType == -1 || subType == item->getSubType()))
  8330. return item;
  8331. else
  8332. {
  8333. ++i;
  8334. if((tmpContainer = item->getContainer()))
  8335. listContainer.push_back(tmpContainer);
  8336. }
  8337. }
  8338. }
  8339.  
  8340. return NULL;
  8341. }
  8342.  
  8343. bool Game::removeItemOfType(Cylinder* cylinder, uint16_t itemId, int32_t count, int32_t subType /*= -1*/)
  8344. {
  8345. if(!cylinder || ((int32_t)cylinder->__getItemTypeCount(itemId, subType) < count))
  8346. return false;
  8347.  
  8348. if(count <= 0)
  8349. return true;
  8350.  
  8351. std::list<Container*> listContainer;
  8352. Container* tmpContainer = NULL;
  8353. Item* item = NULL;
  8354.  
  8355. Thing* thing = NULL;
  8356. for(int32_t i = cylinder->__getFirstIndex(); i < cylinder->__getLastIndex() && count > 0;)
  8357. {
  8358. if((thing = cylinder->__getThing(i)) && (item = thing->getItem()))
  8359. {
  8360. if(item->getID() == itemId)
  8361. {
  8362. if(item->isStackable())
  8363. {
  8364. if(item->getItemCount() > count)
  8365. {
  8366. internalRemoveItem(NULL, item, count);
  8367. count = 0;
  8368. }
  8369. else
  8370. {
  8371. count -= item->getItemCount();
  8372. internalRemoveItem(NULL, item);
  8373. }
  8374. }
  8375. else if(subType == -1 || subType == item->getSubType())
  8376. {
  8377. --count;
  8378. internalRemoveItem(NULL, item);
  8379. }
  8380. else
  8381. ++i;
  8382. }
  8383. else
  8384. {
  8385. ++i;
  8386. if((tmpContainer = item->getContainer()))
  8387. listContainer.push_back(tmpContainer);
  8388. }
  8389. }
  8390. else
  8391. ++i;
  8392. }
  8393.  
  8394. while(listContainer.size() > 0 && count > 0)
  8395. {
  8396. Container* container = listContainer.front();
  8397. listContainer.pop_front();
  8398. for(int32_t i = 0; i < (int32_t)container->size() && count > 0;)
  8399. {
  8400. Item* item = container->getItem(i);
  8401. if(item->getID() == itemId)
  8402. {
  8403. if(item->isStackable())
  8404. {
  8405. if(item->getItemCount() > count)
  8406. {
  8407. internalRemoveItem(NULL, item, count);
  8408. count = 0;
  8409. }
  8410. else
  8411. {
  8412. count-= item->getItemCount();
  8413. internalRemoveItem(NULL, item);
  8414. }
  8415. }
  8416. else if(subType == -1 || subType == item->getSubType())
  8417. {
  8418. --count;
  8419. internalRemoveItem(NULL, item);
  8420. }
  8421. else
  8422. ++i;
  8423. }
  8424. else
  8425. {
  8426. ++i;
  8427. if((tmpContainer = item->getContainer()))
  8428. listContainer.push_back(tmpContainer);
  8429. }
  8430. }
  8431. }
  8432.  
  8433. return (count == 0);
  8434. }
  8435.  
  8436. uint64_t Game::getMoney(const Cylinder* cylinder)
  8437. {
  8438. if(!cylinder)
  8439. return 0;
  8440.  
  8441. std::list<Container*> listContainer;
  8442. Container* tmpContainer = NULL;
  8443. Item* item = NULL;
  8444.  
  8445. Thing* thing = NULL;
  8446. uint64_t moneyCount = 0;
  8447. for(int32_t i = cylinder->__getFirstIndex(); i < cylinder->__getLastIndex(); ++i)
  8448. {
  8449. if(!(thing = cylinder->__getThing(i)) || !(item = thing->getItem()))
  8450. continue;
  8451.  
  8452. if((tmpContainer = item->getContainer()))
  8453. listContainer.push_back(tmpContainer);
  8454. else if(item->getWorth() != 0)
  8455. moneyCount += item->getWorth();
  8456. }
  8457.  
  8458. while(listContainer.size() > 0)
  8459. {
  8460. Container* container = listContainer.front();
  8461. listContainer.pop_front();
  8462. for(ItemList::const_iterator it = container->getItems(); it != container->getEnd(); ++it)
  8463. {
  8464. item = *it;
  8465. if((tmpContainer = item->getContainer()))
  8466. listContainer.push_back(tmpContainer);
  8467. else if(item->getWorth() != 0)
  8468. moneyCount += item->getWorth();
  8469. }
  8470. }
  8471.  
  8472. return moneyCount;
  8473. }
  8474.  
  8475. bool Game::removeMoney(Cylinder* cylinder, int64_t money, uint32_t flags /*= 0*/)
  8476. {
  8477. if(!cylinder)
  8478. return false;
  8479.  
  8480. if(money <= 0)
  8481. return true;
  8482.  
  8483. typedef std::multimap<int32_t, Item*, std::less<int32_t> > MoneyMultiMap;
  8484. MoneyMultiMap moneyMap;
  8485.  
  8486. std::list<Container*> listContainer;
  8487. Container* tmpContainer = NULL;
  8488.  
  8489. Thing* thing = NULL;
  8490. Item* item = NULL;
  8491.  
  8492. int64_t moneyCount = 0;
  8493. for(int32_t i = cylinder->__getFirstIndex(); i < cylinder->__getLastIndex() && money > 0; ++i)
  8494. {
  8495. if(!(thing = cylinder->__getThing(i)) || !(item = thing->getItem()))
  8496. continue;
  8497.  
  8498. if((tmpContainer = item->getContainer()))
  8499. listContainer.push_back(tmpContainer);
  8500. else if(item->getWorth() != 0)
  8501. {
  8502. moneyCount += item->getWorth();
  8503. moneyMap.insert(std::make_pair(item->getWorth(), item));
  8504. }
  8505. }
  8506.  
  8507. while(listContainer.size() > 0 && money > 0)
  8508. {
  8509. Container* container = listContainer.front();
  8510. listContainer.pop_front();
  8511. for(int32_t i = 0; i < (int32_t)container->size() && money > 0; i++)
  8512. {
  8513. Item* item = container->getItem(i);
  8514. if((tmpContainer = item->getContainer()))
  8515. listContainer.push_back(tmpContainer);
  8516. else if(item->getWorth() != 0)
  8517. {
  8518. moneyCount += item->getWorth();
  8519. moneyMap.insert(std::make_pair(item->getWorth(), item));
  8520. }
  8521. }
  8522. }
  8523.  
  8524. // Not enough money
  8525. if(moneyCount < money)
  8526. return false;
  8527.  
  8528. for(MoneyMultiMap::iterator mit = moneyMap.begin(); mit != moneyMap.end() && money > 0; ++mit)
  8529. {
  8530. Item* item = mit->second;
  8531. if(!item)
  8532. continue;
  8533.  
  8534. internalRemoveItem(NULL, item);
  8535. if(mit->first > money)
  8536. {
  8537. // Remove a monetary value from an item
  8538. addMoney(cylinder, (int64_t)(item->getWorth() - money), flags);
  8539. money = 0;
  8540. }
  8541. else
  8542. money -= mit->first;
  8543.  
  8544. mit->second = NULL;
  8545. }
  8546.  
  8547. moneyMap.clear();
  8548. return money == 0;
  8549. }
  8550.  
  8551. void Game::addMoney(Cylinder* cylinder, int64_t money, uint32_t flags /*= 0*/)
  8552. {
  8553. IntegerMap moneyMap = Item::items.getMoneyMap();
  8554. for(IntegerMap::reverse_iterator it = moneyMap.rbegin(); it != moneyMap.rend(); ++it)
  8555. {
  8556. int64_t tmp = money / it->first;
  8557. money -= tmp * it->first;
  8558. if(!tmp)
  8559. continue;
  8560.  
  8561. do
  8562. {
  8563. uint32_t remainderCount = 0;
  8564. Item* item = Item::CreateItem(it->second, std::min((int64_t)100, tmp));
  8565. if(internalAddItem(NULL, cylinder, item, INDEX_WHEREEVER, flags, false, remainderCount) != RET_NOERROR)
  8566. {
  8567. if(remainderCount)
  8568. {
  8569. delete item;
  8570. item = Item::CreateItem(it->second, remainderCount);
  8571. }
  8572.  
  8573. if(internalAddItem(NULL, cylinder->getTile(), item, INDEX_WHEREEVER, FLAG_NOLIMIT) != RET_NOERROR)
  8574. delete item;
  8575. }
  8576.  
  8577. tmp -= std::min((int64_t)100, tmp);
  8578. }
  8579. while(tmp > 0);
  8580. }
  8581. }
  8582.  
  8583. Item* Game::transformItem(Item* item, uint16_t newId, int32_t newCount /*= -1*/)
  8584. {
  8585. if(item->getID() == newId && (newCount == -1 || (newCount == item->getSubType() && newCount != 0)))
  8586. return item;
  8587.  
  8588. Cylinder* cylinder = item->getParent();
  8589. if(!cylinder)
  8590. return NULL;
  8591.  
  8592. int32_t itemIndex = cylinder->__getIndexOfThing(item);
  8593. if(itemIndex == -1)
  8594. {
  8595. #ifdef __DEBUG__
  8596. std::clog << "Error: transformItem, itemIndex == -1" << std::endl;
  8597. #endif
  8598. return item;
  8599. }
  8600.  
  8601. if(!item->canTransform())
  8602. return item;
  8603.  
  8604. const ItemType& curType = Item::items[item->getID()];
  8605. const ItemType& newType = Item::items[newId];
  8606.  
  8607. if(curType.alwaysOnTop != newType.alwaysOnTop)
  8608. {
  8609. //This only occurs when you transform items on tiles from a downItem to a topItem (or vice versa)
  8610. //Remove the old, and add the new
  8611. ReturnValue ret = internalRemoveItem(NULL, item);
  8612. if(ret != RET_NOERROR)
  8613. return item;
  8614.  
  8615. Item* newItem = NULL;
  8616. if(newCount == -1)
  8617. newItem = Item::CreateItem(newId);
  8618. else
  8619. newItem = Item::CreateItem(newId, newCount);
  8620.  
  8621. if(!newItem)
  8622. return NULL;
  8623.  
  8624. newItem->copyAttributes(item);
  8625. if(internalAddItem(NULL, cylinder, newItem, INDEX_WHEREEVER, FLAG_NOLIMIT) == RET_NOERROR)
  8626. return newItem;
  8627.  
  8628. delete newItem;
  8629. return NULL;
  8630. }
  8631.  
  8632. if(curType.type == newType.type)
  8633. {
  8634. //Both items has the same type so we can safely change id/subtype
  8635. if(!newCount && (item->isStackable() || item->hasCharges()))
  8636. {
  8637. if(!item->isStackable() && (!item->getDefaultDuration() || item->getDuration() <= 0))
  8638. {
  8639. int32_t tmpId = newId;
  8640. if(curType.id == newType.id)
  8641. tmpId = curType.decayTo;
  8642.  
  8643. if(tmpId != -1)
  8644. {
  8645. item = transformItem(item, tmpId);
  8646. return item;
  8647. }
  8648. }
  8649.  
  8650. internalRemoveItem(NULL, item);
  8651. return NULL;
  8652. }
  8653.  
  8654. uint16_t itemId = item->getID();
  8655. int32_t count = item->getSubType();
  8656.  
  8657. cylinder->postRemoveNotification(NULL, item, cylinder, itemIndex, false);
  8658. if(curType.id != newType.id)
  8659. {
  8660. itemId = newId;
  8661. if(newType.group != curType.group)
  8662. item->setDefaultSubtype();
  8663. }
  8664.  
  8665. if(newCount != -1 && newType.hasSubType())
  8666. count = newCount;
  8667.  
  8668. cylinder->__updateThing(item, itemId, count);
  8669. cylinder->postAddNotification(NULL, item, cylinder, itemIndex);
  8670. return item;
  8671. }
  8672.  
  8673. //Replacing the the old item with the new while maintaining the old position
  8674. Item* newItem = NULL;
  8675. if(newCount == -1)
  8676. newItem = Item::CreateItem(newId);
  8677. else
  8678. newItem = Item::CreateItem(newId, newCount);
  8679.  
  8680. if(!newItem)
  8681. {
  8682. #ifdef __DEBUG__
  8683. std::clog << "Error: [Game::transformItem] Item of type " << item->getID() << " transforming into invalid type " << newId << std::endl;
  8684. #endif
  8685. return NULL;
  8686. }
  8687.  
  8688. cylinder->__replaceThing(itemIndex, newItem);
  8689. cylinder->postAddNotification(NULL, newItem, cylinder, itemIndex);
  8690.  
  8691. item->setParent(NULL);
  8692. cylinder->postRemoveNotification(NULL, item, cylinder, itemIndex, true);
  8693.  
  8694. freeThing(item);
  8695. return newItem;
  8696. }
  8697.  
  8698. ReturnValue Game::internalTeleport(Thing* thing, const Position& newPos, bool forceTeleport, uint32_t flags/* = 0*/, bool fullTeleport/* = true*/)
  8699. {
  8700. if(newPos == thing->getPosition())
  8701. return RET_NOERROR;
  8702.  
  8703. if(thing->isRemoved())
  8704. return RET_NOTPOSSIBLE;
  8705.  
  8706. if(Tile* toTile = map->getTile(newPos))
  8707. {
  8708. if(Creature* creature = thing->getCreature())
  8709. {
  8710. if(fullTeleport)
  8711. return internalMoveCreature(NULL, creature, creature->getParent(), toTile, flags, forceTeleport);
  8712.  
  8713. creature->getTile()->moveCreature(NULL, creature, toTile, forceTeleport);
  8714. return RET_NOERROR;
  8715. }
  8716.  
  8717. if(Item* item = thing->getItem())
  8718. return internalMoveItem(NULL, item->getParent(), toTile, INDEX_WHEREEVER, item, item->getItemCount(), NULL, flags);
  8719. }
  8720.  
  8721. return RET_NOTPOSSIBLE;
  8722. }
  8723.  
  8724. bool Game::playerMove(uint32_t playerId, Direction dir)
  8725. {
  8726. Player* player = getPlayerByID(playerId);
  8727. if(!player || player->isRemoved())
  8728. return false;
  8729.  
  8730. player->setIdleTime(0);
  8731. if(player->getNoMove())
  8732. {
  8733. player->sendCancelWalk();
  8734. return false;
  8735. }
  8736.  
  8737. std::list<Direction> dirs;
  8738. dirs.push_back(dir);
  8739. return player->startAutoWalk(dirs);
  8740. }
  8741.  
  8742. bool Game::playerBroadcastMessage(Player* player, SpeakClasses type, const std::string& text)
  8743. {
  8744. if(!player->hasFlag(PlayerFlag_CanBroadcast) || type < SPEAK_CLASS_FIRST || type > SPEAK_CLASS_LAST)
  8745. return false;
  8746.  
  8747. for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
  8748. it->second->sendCreatureSay(player, type, text);
  8749.  
  8750. //TODO: event handling - onCreatureSay
  8751. std::clog << "> " << player->getName() << " broadcasted: \"" << text << "\"." << std::endl;
  8752. return true;
  8753. }
  8754.  
  8755. bool Game::playerCreatePrivateChannel(uint32_t playerId)
  8756. {
  8757. Player* player = getPlayerByID(playerId);
  8758. if(!player || player->isRemoved() || !player->isPremium())
  8759. return false;
  8760.  
  8761. ChatChannel* channel = g_chat.createChannel(player, 0xFFFF);
  8762. if(!channel || !channel->addUser(player))
  8763. return false;
  8764.  
  8765. player->sendCreatePrivateChannel(channel->getId(), channel->getName());
  8766. return true;
  8767. }
  8768.  
  8769. bool Game::playerChannelInvite(uint32_t playerId, const std::string& name)
  8770. {
  8771. Player* player = getPlayerByID(playerId);
  8772. if(!player || player->isRemoved())
  8773. return false;
  8774.  
  8775. PrivateChatChannel* channel = g_chat.getPrivateChannel(player);
  8776. if(!channel)
  8777. return false;
  8778.  
  8779. Player* invitePlayer = getPlayerByName(name);
  8780. if(!invitePlayer)
  8781. return false;
  8782.  
  8783. channel->invitePlayer(player, invitePlayer);
  8784. return true;
  8785. }
  8786.  
  8787. bool Game::playerChannelExclude(uint32_t playerId, const std::string& name)
  8788. {
  8789. Player* player = getPlayerByID(playerId);
  8790. if(!player || player->isRemoved())
  8791. return false;
  8792.  
  8793. PrivateChatChannel* channel = g_chat.getPrivateChannel(player);
  8794. if(!channel)
  8795. return false;
  8796.  
  8797. Player* excludePlayer = getPlayerByName(name);
  8798. if(!excludePlayer)
  8799. return false;
  8800.  
  8801. channel->excludePlayer(player, excludePlayer);
  8802. return true;
  8803. }
  8804.  
  8805. bool Game::playerRequestChannels(uint32_t playerId)
  8806. {
  8807. Player* player = getPlayerByID(playerId);
  8808. if(!player || player->isRemoved())
  8809. return false;
  8810.  
  8811. player->sendChannelsDialog();
  8812. return true;
  8813. }
  8814.  
  8815. bool Game::playerOpenChannel(uint32_t playerId, uint16_t channelId)
  8816. {
  8817. Player* player = getPlayerByID(playerId);
  8818. if(!player || player->isRemoved())
  8819. return false;
  8820.  
  8821. ChatChannel* channel = g_chat.addUserToChannel(player, channelId);
  8822. if(!channel)
  8823. {
  8824. #ifdef __DEBUG_CHAT__
  8825. std::clog << "Game::playerOpenChannel - failed adding user to channel." << std::endl;
  8826. #endif
  8827. return false;
  8828. }
  8829.  
  8830. if(channel->getId() != CHANNEL_RVR)
  8831. player->sendChannel(channel->getId(), channel->getName());
  8832. else
  8833. player->sendRuleViolationsChannel(channel->getId());
  8834.  
  8835. return true;
  8836. }
  8837.  
  8838. bool Game::playerCloseChannel(uint32_t playerId, uint16_t channelId)
  8839. {
  8840. Player* player = getPlayerByID(playerId);
  8841. if(!player || player->isRemoved())
  8842. return false;
  8843.  
  8844. g_chat.removeUserFromChannel(player, channelId);
  8845. return true;
  8846. }
  8847.  
  8848. bool Game::playerOpenPrivateChannel(uint32_t playerId, std::string& receiver)
  8849. {
  8850. Player* player = getPlayerByID(playerId);
  8851. if(!player || player->isRemoved())
  8852. return false;
  8853.  
  8854. if(IOLoginData::getInstance()->playerExists(receiver))
  8855. player->sendOpenPrivateChannel(receiver);
  8856. else
  8857. player->sendCancel("A player with this name does not exist.");
  8858.  
  8859. return true;
  8860. }
  8861.  
  8862. bool Game::playerProcessRuleViolation(uint32_t playerId, const std::string& name)
  8863. {
  8864. Player* player = getPlayerByID(playerId);
  8865. if(!player || player->isRemoved())
  8866. return false;
  8867.  
  8868. if(!player->hasFlag(PlayerFlag_CanAnswerRuleViolations))
  8869. return false;
  8870.  
  8871. Player* reporter = getPlayerByName(name);
  8872. if(!reporter)
  8873. return false;
  8874.  
  8875. RuleViolationsMap::iterator it = ruleViolations.find(reporter->getID());
  8876. if(it == ruleViolations.end())
  8877. return false;
  8878.  
  8879. RuleViolation& rvr = *it->second;
  8880. if(!rvr.isOpen)
  8881. return false;
  8882.  
  8883. rvr.isOpen = false;
  8884. rvr.gamemaster = player;
  8885. if(ChatChannel* channel = g_chat.getChannelById(CHANNEL_RVR))
  8886. {
  8887. UsersMap tmpMap = channel->getUsers();
  8888. for(UsersMap::iterator tit = tmpMap.begin(); tit != tmpMap.end(); ++tit)
  8889. tit->second->sendRemoveReport(reporter->getName());
  8890. }
  8891.  
  8892. return true;
  8893. }
  8894.  
  8895. bool Game::playerCloseRuleViolation(uint32_t playerId, const std::string& name)
  8896. {
  8897. Player* player = getPlayerByID(playerId);
  8898. if(!player || player->isRemoved())
  8899. return false;
  8900.  
  8901. Player* reporter = getPlayerByName(name);
  8902. if(!reporter)
  8903. return false;
  8904.  
  8905. return closeRuleViolation(reporter);
  8906. }
  8907.  
  8908. bool Game::playerCancelRuleViolation(uint32_t playerId)
  8909. {
  8910. Player* player = getPlayerByID(playerId);
  8911. if(!player || player->isRemoved())
  8912. return false;
  8913.  
  8914. return cancelRuleViolation(player);
  8915. }
  8916.  
  8917. bool Game::playerCloseNpcChannel(uint32_t playerId)
  8918. {
  8919. Player* player = getPlayerByID(playerId);
  8920. if(!player || player->isRemoved())
  8921. return false;
  8922.  
  8923. SpectatorVec list;
  8924. SpectatorVec::iterator it;
  8925.  
  8926. getSpectators(list, player->getPosition());
  8927. Npc* npc = NULL;
  8928. for(it = list.begin(); it != list.end(); ++it)
  8929. {
  8930. if((npc = (*it)->getNpc()))
  8931. npc->onPlayerCloseChannel(player);
  8932. }
  8933.  
  8934. return true;
  8935. }
  8936.  
  8937. bool Game::playerReceivePing(uint32_t playerId)
  8938. {
  8939. Player* player = getPlayerByID(playerId);
  8940. if(!player || player->isRemoved())
  8941. return false;
  8942.  
  8943. player->receivePing();
  8944. return true;
  8945. }
  8946.  
  8947. bool Game::playerAutoWalk(uint32_t playerId, std::list<Direction>& listDir)
  8948. {
  8949. Player* player = getPlayerByID(playerId);
  8950. if(!player || player->isRemoved())
  8951. return false;
  8952.  
  8953. player->setIdleTime(0);
  8954. if(player->getNoMove())
  8955. {
  8956. player->sendCancelWalk();
  8957. return false;
  8958. }
  8959.  
  8960. if(player->hasCondition(CONDITION_GAMEMASTER, GAMEMASTER_TELEPORT))
  8961. {
  8962. Position pos = player->getPosition();
  8963. for(std::list<Direction>::iterator it = listDir.begin(); it != listDir.end(); ++it)
  8964. pos = getNextPosition((*it), pos);
  8965.  
  8966. pos = getClosestFreeTile(player, pos, true, false);
  8967. if(!pos.x || !pos.y)
  8968. {
  8969. player->sendCancelWalk();
  8970. return false;
  8971. }
  8972.  
  8973. internalCreatureTurn(player, getDirectionTo(player->getPosition(), pos, false));
  8974. internalTeleport(player, pos, true);
  8975. return true;
  8976. }
  8977.  
  8978. player->setNextWalkTask(NULL);
  8979. return player->startAutoWalk(listDir);
  8980. }
  8981.  
  8982. bool Game::playerStopAutoWalk(uint32_t playerId)
  8983. {
  8984. Player* player = getPlayerByID(playerId);
  8985. if(!player || player->isRemoved())
  8986. return false;
  8987.  
  8988. player->stopWalk();
  8989. return true;
  8990. }
  8991.  
  8992. bool Game::playerUseItemEx(uint32_t playerId, const Position& fromPos, int16_t fromStackpos, uint16_t fromSpriteId,
  8993. const Position& toPos, int16_t toStackpos, uint16_t toSpriteId, bool isHotkey)
  8994. {
  8995. Player* player = getPlayerByID(playerId);
  8996. if(!player || player->isRemoved())
  8997. return false;
  8998.  
  8999. if(isHotkey && !g_config.getBool(ConfigManager::AIMBOT_HOTKEY_ENABLED))
  9000. return false;
  9001.  
  9002. Thing* thing = internalGetThing(player, fromPos, fromStackpos, fromSpriteId, STACKPOS_USEITEM);
  9003. if(!thing)
  9004. {
  9005. player->sendCancelMessage(RET_NOTPOSSIBLE);
  9006. return false;
  9007. }
  9008.  
  9009. Item* item = thing->getItem();
  9010. if(!item || !item->isUsable())
  9011. {
  9012. player->sendCancelMessage(RET_CANNOTUSETHISOBJECT);
  9013. return false;
  9014. }
  9015.  
  9016. Position walkToPos = fromPos;
  9017. ReturnValue ret = g_actions->canUse(player, fromPos);
  9018. if(ret == RET_NOERROR)
  9019. {
  9020. ret = g_actions->canUse(player, toPos, item);
  9021. if(ret == RET_TOOFARAWAY)
  9022. walkToPos = toPos;
  9023. }
  9024.  
  9025. if(ret != RET_NOERROR)
  9026. {
  9027. if(ret == RET_TOOFARAWAY)
  9028. {
  9029. Position itemPos = fromPos;
  9030. int16_t itemStackpos = fromStackpos;
  9031. if(fromPos.x != 0xFFFF && toPos.x != 0xFFFF && Position::areInRange<1,1,0>(fromPos,
  9032. player->getPosition()) && !Position::areInRange<1,1,0>(fromPos, toPos))
  9033. {
  9034. Item* moveItem = NULL;
  9035. ReturnValue retTmp = internalMoveItem(player, item->getParent(), player,
  9036. INDEX_WHEREEVER, item, item->getItemCount(), &moveItem);
  9037. if(retTmp != RET_NOERROR)
  9038. {
  9039. player->sendCancelMessage(retTmp);
  9040. return false;
  9041. }
  9042.  
  9043. //changing the position since its now in the inventory of the player
  9044. internalGetPosition(moveItem, itemPos, itemStackpos);
  9045. }
  9046.  
  9047. std::list<Direction> listDir;
  9048. if(getPathToEx(player, walkToPos, listDir, 0, 1, true, true, 10))
  9049. {
  9050. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::playerAutoWalk,
  9051. this, player->getID(), listDir)));
  9052.  
  9053. SchedulerTask* task = createSchedulerTask(400, boost::bind(&Game::playerUseItemEx, this,
  9054. playerId, itemPos, itemStackpos, fromSpriteId, toPos, toStackpos, toSpriteId, isHotkey));
  9055.  
  9056. player->setNextWalkActionTask(task);
  9057. return true;
  9058. }
  9059.  
  9060. ret = RET_THEREISNOWAY;
  9061. }
  9062.  
  9063. player->sendCancelMessage(ret);
  9064. return false;
  9065. }
  9066.  
  9067. if(isHotkey)
  9068. showHotkeyUseMessage(player, item);
  9069.  
  9070. if(!player->canDoAction())
  9071. {
  9072. uint32_t delay = player->getNextActionTime();
  9073. SchedulerTask* task = createSchedulerTask(delay, boost::bind(&Game::playerUseItemEx, this,
  9074. playerId, fromPos, fromStackpos, fromSpriteId, toPos, toStackpos, toSpriteId, isHotkey));
  9075.  
  9076. player->setNextActionTask(task);
  9077. return false;
  9078. }
  9079.  
  9080. player->setNextActionTask(NULL);
  9081. return g_actions->useItemEx(player, fromPos, toPos, toStackpos, item, isHotkey);
  9082. }
  9083.  
  9084. bool Game::playerUseItem(uint32_t playerId, const Position& pos, int16_t stackpos,
  9085. uint8_t index, uint16_t spriteId, bool isHotkey)
  9086. {
  9087. Player* player = getPlayerByID(playerId);
  9088. if(!player || player->isRemoved())
  9089. return false;
  9090.  
  9091. if(isHotkey && !g_config.getBool(ConfigManager::AIMBOT_HOTKEY_ENABLED))
  9092. return false;
  9093.  
  9094. Thing* thing = internalGetThing(player, pos, stackpos, spriteId, STACKPOS_USEITEM);
  9095. if(!thing)
  9096. {
  9097. player->sendCancelMessage(RET_NOTPOSSIBLE);
  9098. return false;
  9099. }
  9100.  
  9101. Item* item = thing->getItem();
  9102. if(!item || item->isUsable())
  9103. {
  9104. player->sendCancelMessage(RET_CANNOTUSETHISOBJECT);
  9105. return false;
  9106. }
  9107.  
  9108. ReturnValue ret = g_actions->canUse(player, pos);
  9109. if(ret != RET_NOERROR)
  9110. {
  9111. if(ret == RET_TOOFARAWAY)
  9112. {
  9113. std::list<Direction> listDir;
  9114. if(getPathToEx(player, pos, listDir, 0, 1, true, true))
  9115. {
  9116. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::playerAutoWalk,
  9117. this, player->getID(), listDir)));
  9118.  
  9119. SchedulerTask* task = createSchedulerTask(400, boost::bind(&Game::playerUseItem, this,
  9120. playerId, pos, stackpos, index, spriteId, isHotkey));
  9121.  
  9122. player->setNextWalkActionTask(task);
  9123. return true;
  9124. }
  9125.  
  9126. ret = RET_THEREISNOWAY;
  9127. }
  9128.  
  9129. player->sendCancelMessage(ret);
  9130. return false;
  9131. }
  9132.  
  9133. if(isHotkey)
  9134. showHotkeyUseMessage(player, item);
  9135.  
  9136. if(!player->canDoAction())
  9137. {
  9138. uint32_t delay = player->getNextActionTime();
  9139. SchedulerTask* task = createSchedulerTask(delay, boost::bind(&Game::playerUseItem, this,
  9140. playerId, pos, stackpos, index, spriteId, isHotkey));
  9141.  
  9142. player->setNextActionTask(task);
  9143. return false;
  9144. }
  9145.  
  9146. player->setNextActionTask(NULL);
  9147. return g_actions->useItem(player, pos, index, item);
  9148. }
  9149.  
  9150. bool Game::playerUseBattleWindow(uint32_t playerId, const Position& fromPos, int16_t fromStackpos,
  9151. uint32_t creatureId, uint16_t spriteId, bool isHotkey)
  9152. {
  9153. Player* player = getPlayerByID(playerId);
  9154. if(!player || player->isRemoved())
  9155. return false;
  9156.  
  9157. Creature* creature = getCreatureByID(creatureId);
  9158. if(!creature)
  9159. return false;
  9160.  
  9161. if(!Position::areInRange<7,5,0>(creature->getPosition(), player->getPosition()))
  9162. return false;
  9163.  
  9164. if(!g_config.getBool(ConfigManager::AIMBOT_HOTKEY_ENABLED) && (creature->getPlayer() || isHotkey))
  9165. {
  9166. player->sendCancelMessage(RET_DIRECTPLAYERSHOOT);
  9167. return false;
  9168. }
  9169.  
  9170. Thing* thing = internalGetThing(player, fromPos, fromStackpos, spriteId, STACKPOS_USE);
  9171. if(!thing)
  9172. {
  9173. player->sendCancelMessage(RET_NOTPOSSIBLE);
  9174. return false;
  9175. }
  9176.  
  9177. Item* item = thing->getItem();
  9178. if(!item || item->getClientID() != spriteId)
  9179. {
  9180. player->sendCancelMessage(RET_CANNOTUSETHISOBJECT);
  9181. return false;
  9182. }
  9183.  
  9184. ReturnValue ret = g_actions->canUse(player, fromPos);
  9185. if(ret != RET_NOERROR)
  9186. {
  9187. if(ret == RET_TOOFARAWAY)
  9188. {
  9189. std::list<Direction> listDir;
  9190. if(getPathToEx(player, item->getPosition(), listDir, 0, 1, true, true))
  9191. {
  9192. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::playerAutoWalk,
  9193. this, player->getID(), listDir)));
  9194.  
  9195. SchedulerTask* task = createSchedulerTask(400, boost::bind(&Game::playerUseBattleWindow, this,
  9196. playerId, fromPos, fromStackpos, creatureId, spriteId, isHotkey));
  9197.  
  9198. player->setNextWalkActionTask(task);
  9199. return true;
  9200. }
  9201.  
  9202. ret = RET_THEREISNOWAY;
  9203. }
  9204.  
  9205. player->sendCancelMessage(ret);
  9206. return false;
  9207. }
  9208.  
  9209. if(isHotkey)
  9210. showHotkeyUseMessage(player, item);
  9211.  
  9212. if(!player->canDoAction())
  9213. {
  9214. uint32_t delay = player->getNextActionTime();
  9215. SchedulerTask* task = createSchedulerTask(delay, boost::bind(&Game::playerUseBattleWindow, this,
  9216. playerId, fromPos, fromStackpos, creatureId, spriteId, isHotkey));
  9217.  
  9218. player->setNextActionTask(task);
  9219. return false;
  9220. }
  9221.  
  9222. player->setNextActionTask(NULL);
  9223. return g_actions->useItemEx(player, fromPos, creature->getPosition(),
  9224. creature->getParent()->__getIndexOfThing(creature), item, isHotkey, creatureId);
  9225. }
  9226.  
  9227. bool Game::playerCloseContainer(uint32_t playerId, uint8_t cid)
  9228. {
  9229. Player* player = getPlayerByID(playerId);
  9230. if(!player || player->isRemoved())
  9231. return false;
  9232.  
  9233. player->closeContainer(cid);
  9234. player->sendCloseContainer(cid);
  9235. return true;
  9236. }
  9237.  
  9238. bool Game::playerMoveUpContainer(uint32_t playerId, uint8_t cid)
  9239. {
  9240. Player* player = getPlayerByID(playerId);
  9241. if(!player || player->isRemoved())
  9242. return false;
  9243.  
  9244. Container* container = player->getContainer(cid);
  9245. if(!container)
  9246. return false;
  9247.  
  9248. Container* parentContainer = dynamic_cast<Container*>(container->getParent());
  9249. if(!parentContainer)
  9250. return false;
  9251.  
  9252. player->addContainer(cid, parentContainer);
  9253. player->sendContainer(cid, parentContainer, (dynamic_cast<const Container*>(parentContainer->getParent()) != NULL));
  9254. return true;
  9255. }
  9256.  
  9257. bool Game::playerUpdateTile(uint32_t playerId, const Position& pos)
  9258. {
  9259. Player* player = getPlayerByID(playerId);
  9260. if(!player || player->isRemoved())
  9261. return false;
  9262.  
  9263. if(!player->canSee(pos))
  9264. return false;
  9265.  
  9266. if(Tile* tile = getTile(pos))
  9267. player->sendUpdateTile(tile, pos);
  9268.  
  9269. return true;
  9270. }
  9271.  
  9272. bool Game::playerUpdateContainer(uint32_t playerId, uint8_t cid)
  9273. {
  9274. Player* player = getPlayerByID(playerId);
  9275. if(!player || player->isRemoved())
  9276. return false;
  9277.  
  9278. Container* container = player->getContainer(cid);
  9279. if(!container)
  9280. return false;
  9281.  
  9282. player->sendContainer(cid, container, (dynamic_cast<const Container*>(container->getParent()) != NULL));
  9283. return true;
  9284. }
  9285.  
  9286. bool Game::playerRotateItem(uint32_t playerId, const Position& pos, int16_t stackpos, const uint16_t spriteId)
  9287. {
  9288. Player* player = getPlayerByID(playerId);
  9289. if(!player || player->isRemoved())
  9290. return false;
  9291.  
  9292. Thing* thing = internalGetThing(player, pos, stackpos);
  9293. if(!thing)
  9294. return false;
  9295.  
  9296. Item* item = thing->getItem();
  9297. if(!item || item->getClientID() != spriteId || !item->isRoteable() || (item->isLoadedFromMap() &&
  9298. (item->getUniqueId() != 0 || (item->getActionId() != 0 && item->getContainer()))))
  9299. {
  9300. player->sendCancelMessage(RET_NOTPOSSIBLE);
  9301. return false;
  9302. }
  9303.  
  9304. if(pos.x != 0xFFFF && !Position::areInRange<1,1,0>(pos, player->getPosition()))
  9305. {
  9306. std::list<Direction> listDir;
  9307. if(getPathToEx(player, pos, listDir, 0, 1, true, true))
  9308. {
  9309. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::playerAutoWalk,
  9310. this, player->getID(), listDir)));
  9311.  
  9312. SchedulerTask* task = createSchedulerTask(400, boost::bind(&Game::playerRotateItem, this,
  9313. playerId, pos, stackpos, spriteId));
  9314.  
  9315. player->setNextWalkActionTask(task);
  9316. return true;
  9317. }
  9318.  
  9319. player->sendCancelMessage(RET_THEREISNOWAY);
  9320. return false;
  9321. }
  9322.  
  9323. uint16_t newId = Item::items[item->getID()].rotateTo;
  9324. if(newId != 0)
  9325. transformItem(item, newId);
  9326.  
  9327. return true;
  9328. }
  9329.  
  9330. bool Game::playerWriteItem(uint32_t playerId, uint32_t windowTextId, const std::string& text)
  9331. {
  9332. Player* player = getPlayerByID(playerId);
  9333. if(!player || player->isRemoved())
  9334. return false;
  9335.  
  9336. uint16_t maxTextLength = 0;
  9337. uint32_t internalWindowTextId = 0;
  9338.  
  9339. Item* writeItem = player->getWriteItem(internalWindowTextId, maxTextLength);
  9340. if(text.length() > maxTextLength || windowTextId != internalWindowTextId)
  9341. return false;
  9342.  
  9343. if(!writeItem || writeItem->isRemoved())
  9344. {
  9345. player->sendCancelMessage(RET_NOTPOSSIBLE);
  9346. return false;
  9347. }
  9348.  
  9349. Cylinder* topParent = writeItem->getTopParent();
  9350. Player* owner = dynamic_cast<Player*>(topParent);
  9351. if(owner && owner != player)
  9352. {
  9353. player->sendCancelMessage(RET_NOTPOSSIBLE);
  9354. return false;
  9355. }
  9356.  
  9357. if(!Position::areInRange<1,1,0>(writeItem->getPosition(), player->getPosition()))
  9358. {
  9359. player->sendCancelMessage(RET_NOTPOSSIBLE);
  9360. return false;
  9361. }
  9362.  
  9363. bool deny = false;
  9364. CreatureEventList textEditEvents = player->getCreatureEvents(CREATURE_EVENT_TEXTEDIT);
  9365. for(CreatureEventList::iterator it = textEditEvents.begin(); it != textEditEvents.end(); ++it)
  9366. {
  9367. if(!(*it)->executeTextEdit(player, writeItem, text))
  9368. deny = true;
  9369. }
  9370.  
  9371. if(deny)
  9372. return false;
  9373.  
  9374. if(!text.empty())
  9375. {
  9376. if(writeItem->getText() != text)
  9377. {
  9378. writeItem->setText(text);
  9379. writeItem->setWriter(player->getName());
  9380. writeItem->setDate(std::time(NULL));
  9381. }
  9382. }
  9383. else
  9384. {
  9385. writeItem->resetText();
  9386. writeItem->resetWriter();
  9387. writeItem->resetDate();
  9388. }
  9389.  
  9390. uint16_t newId = Item::items[writeItem->getID()].writeOnceItemId;
  9391. if(newId != 0)
  9392. transformItem(writeItem, newId);
  9393.  
  9394. player->setWriteItem(NULL);
  9395. return true;
  9396. }
  9397.  
  9398. bool Game::playerUpdateHouseWindow(uint32_t playerId, uint8_t listId, uint32_t windowTextId, const std::string& text)
  9399. {
  9400. Player* player = getPlayerByID(playerId);
  9401. if(!player || player->isRemoved())
  9402. return false;
  9403.  
  9404. uint32_t internalWindowTextId = 0;
  9405. uint32_t internalListId = 0;
  9406.  
  9407. House* house = player->getEditHouse(internalWindowTextId, internalListId);
  9408. if(house && internalWindowTextId == windowTextId && listId == 0)
  9409. {
  9410. house->setAccessList(internalListId, text);
  9411. player->setEditHouse(NULL);
  9412. }
  9413.  
  9414. return true;
  9415. }
  9416.  
  9417. bool Game::playerRequestTrade(uint32_t playerId, const Position& pos, int16_t stackpos,
  9418. uint32_t tradePlayerId, uint16_t spriteId)
  9419. {
  9420. Player* player = getPlayerByID(playerId);
  9421. if(!player || player->isRemoved())
  9422. return false;
  9423.  
  9424. if(player->hasCondition(CONDITION_EXHAUST, 8))
  9425. {
  9426. player->sendTextMessage(MSG_STATUS_SMALL, "You have to wait a while.");
  9427. return false;
  9428. }
  9429.  
  9430. if(Condition* conditiontrade = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 300, 0, false, 8))
  9431. player->addCondition(conditiontrade);
  9432.  
  9433. Player* tradePartner = getPlayerByID(tradePlayerId);
  9434. if(!tradePartner || tradePartner == player)
  9435. {
  9436. player->sendTextMessage(MSG_INFO_DESCR, "Sorry, not possible.");
  9437. return false;
  9438. }
  9439.  
  9440. if(!Position::areInRange<2,2,0>(tradePartner->getPosition(), player->getPosition()))
  9441. {
  9442. std::stringstream ss;
  9443. ss << tradePartner->getName() << " tells you to move closer.";
  9444. player->sendTextMessage(MSG_INFO_DESCR, ss.str());
  9445. return false;
  9446. }
  9447.  
  9448. if(!canThrowObjectTo(tradePartner->getPosition(), player->getPosition())
  9449. && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
  9450. {
  9451. player->sendCancelMessage(RET_CREATUREISNOTREACHABLE);
  9452. return false;
  9453. }
  9454.  
  9455. Item* tradeItem = dynamic_cast<Item*>(internalGetThing(player, pos, stackpos, spriteId, STACKPOS_USE));
  9456. if(!tradeItem || tradeItem->getClientID() != spriteId || !tradeItem->isPickupable() || (tradeItem->isLoadedFromMap() &&
  9457. (tradeItem->getUniqueId() != 0 || (tradeItem->getActionId() != 0 && tradeItem->getContainer()))))
  9458. {
  9459. player->sendCancelMessage(RET_NOTPOSSIBLE);
  9460. return false;
  9461. }
  9462.  
  9463. if(player->getPosition().z > tradeItem->getPosition().z)
  9464. {
  9465. player->sendCancelMessage(RET_FIRSTGOUPSTAIRS);
  9466. return false;
  9467. }
  9468.  
  9469. if(player->getPosition().z < tradeItem->getPosition().z)
  9470. {
  9471. player->sendCancelMessage(RET_FIRSTGODOWNSTAIRS);
  9472. return false;
  9473. }
  9474.  
  9475. if(!Position::areInRange<1,1,0>(tradeItem->getPosition(), player->getPosition()))
  9476. {
  9477. std::list<Direction> listDir;
  9478. if(getPathToEx(player, pos, listDir, 0, 1, true, true))
  9479. {
  9480. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::playerAutoWalk,
  9481. this, player->getID(), listDir)));
  9482.  
  9483. SchedulerTask* task = createSchedulerTask(400, boost::bind(&Game::playerRequestTrade, this,
  9484. playerId, pos, stackpos, tradePlayerId, spriteId));
  9485.  
  9486. player->setNextWalkActionTask(task);
  9487. return true;
  9488. }
  9489.  
  9490. player->sendCancelMessage(RET_THEREISNOWAY);
  9491. return false;
  9492. }
  9493.  
  9494. const Container* container = NULL;
  9495. for(std::map<Item*, uint32_t>::const_iterator it = tradeItems.begin(); it != tradeItems.end(); it++)
  9496. {
  9497. if(tradeItem == it->first ||
  9498. ((container = dynamic_cast<const Container*>(tradeItem)) && container->isHoldingItem(it->first)) ||
  9499. ((container = dynamic_cast<const Container*>(it->first)) && container->isHoldingItem(tradeItem)))
  9500. {
  9501. player->sendTextMessage(MSG_INFO_DESCR, "This item is already being traded.");
  9502. return false;
  9503. }
  9504. }
  9505.  
  9506. Container* tradeContainer = tradeItem->getContainer();
  9507. if(tradeContainer && tradeContainer->getItemHoldingCount() + 1 > (uint32_t)g_config.getNumber(ConfigManager::TRADE_LIMIT))
  9508. {
  9509. player->sendTextMessage(MSG_INFO_DESCR, "You cannot trade more than 100 items.");
  9510. return false;
  9511. }
  9512.  
  9513. bool deny = false;
  9514. CreatureEventList tradeEvents = player->getCreatureEvents(CREATURE_EVENT_TRADE_REQUEST);
  9515. for(CreatureEventList::iterator it = tradeEvents.begin(); it != tradeEvents.end(); ++it)
  9516. {
  9517. if(!(*it)->executeTradeRequest(player, tradePartner, tradeItem))
  9518. deny = true;
  9519. }
  9520.  
  9521. if(deny)
  9522. return false;
  9523.  
  9524. return internalStartTrade(player, tradePartner, tradeItem);
  9525. }
  9526.  
  9527. bool Game::internalStartTrade(Player* player, Player* tradePartner, Item* tradeItem)
  9528. {
  9529. if(player->tradeState != TRADE_NONE && !(player->tradeState == TRADE_ACKNOWLEDGE && player->tradePartner == tradePartner))
  9530. {
  9531. player->sendCancelMessage(RET_YOUAREALREADYTRADING);
  9532. return false;
  9533. }
  9534. else if(tradePartner->tradeState != TRADE_NONE && tradePartner->tradePartner != player)
  9535. {
  9536. player->sendCancelMessage(RET_THISPLAYERISALREADYTRADING);
  9537. return false;
  9538. }
  9539.  
  9540. player->tradePartner = tradePartner;
  9541. player->tradeItem = tradeItem;
  9542. player->tradeState = TRADE_INITIATED;
  9543.  
  9544. tradeItem->addRef();
  9545. tradeItems[tradeItem] = player->getID();
  9546.  
  9547. player->sendTradeItemRequest(player, tradeItem, true);
  9548. if(tradePartner->tradeState == TRADE_NONE)
  9549. {
  9550. char buffer[100];
  9551. sprintf(buffer, "%s wants to trade with you", player->getName().c_str());
  9552. tradePartner->sendTextMessage(MSG_INFO_DESCR, buffer);
  9553.  
  9554. tradePartner->tradeState = TRADE_ACKNOWLEDGE;
  9555. tradePartner->tradePartner = player;
  9556. }
  9557. else
  9558. {
  9559. Item* counterItem = tradePartner->tradeItem;
  9560. player->sendTradeItemRequest(tradePartner, counterItem, false);
  9561. tradePartner->sendTradeItemRequest(player, tradeItem, false);
  9562. }
  9563.  
  9564. return true;
  9565. }
  9566.  
  9567. bool Game::playerAcceptTrade(uint32_t playerId)
  9568. {
  9569. Player* player = getPlayerByID(playerId);
  9570. if(!player || player->isRemoved() || (player->getTradeState() != TRADE_ACKNOWLEDGE
  9571. && player->getTradeState() != TRADE_INITIATED))
  9572. return false;
  9573.  
  9574. Player* tradePartner = player->tradePartner;
  9575. if(!tradePartner)
  9576. return false;
  9577.  
  9578. if(!canThrowObjectTo(tradePartner->getPosition(), player->getPosition())
  9579. && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
  9580. {
  9581. player->sendCancelMessage(RET_CREATUREISNOTREACHABLE);
  9582. return false;
  9583. }
  9584.  
  9585. player->setTradeState(TRADE_ACCEPT);
  9586. if(tradePartner->getTradeState() != TRADE_ACCEPT)
  9587. return false;
  9588.  
  9589. Item* tradeItem1 = player->tradeItem;
  9590. Item* tradeItem2 = tradePartner->tradeItem;
  9591.  
  9592. bool deny = false;
  9593. CreatureEventList tradeEvents = player->getCreatureEvents(CREATURE_EVENT_TRADE_ACCEPT);
  9594. for(CreatureEventList::iterator it = tradeEvents.begin(); it != tradeEvents.end(); ++it)
  9595. {
  9596. if(!(*it)->executeTradeAccept(player, tradePartner, tradeItem1, tradeItem2))
  9597. deny = true;
  9598. }
  9599.  
  9600. if(deny)
  9601. return false;
  9602.  
  9603. player->setTradeState(TRADE_TRANSFER);
  9604. tradePartner->setTradeState(TRADE_TRANSFER);
  9605.  
  9606. std::map<Item*, uint32_t>::iterator it = tradeItems.find(tradeItem1);
  9607. if(it != tradeItems.end())
  9608. {
  9609. freeThing(it->first);
  9610. tradeItems.erase(it);
  9611. }
  9612.  
  9613. it = tradeItems.find(tradeItem2);
  9614. if(it != tradeItems.end())
  9615. {
  9616. freeThing(it->first);
  9617. tradeItems.erase(it);
  9618. }
  9619.  
  9620. ReturnValue ret1 = internalAddItem(player, tradePartner, tradeItem1, INDEX_WHEREEVER, 0, true);
  9621. ReturnValue ret2 = internalAddItem(tradePartner, player, tradeItem2, INDEX_WHEREEVER, 0, true);
  9622.  
  9623. bool success = false;
  9624. if(ret1 == RET_NOERROR && ret2 == RET_NOERROR)
  9625. {
  9626. ret1 = internalRemoveItem(tradePartner, tradeItem1, tradeItem1->getItemCount(), true);
  9627. ret2 = internalRemoveItem(player, tradeItem2, tradeItem2->getItemCount(), true);
  9628. if(ret1 == RET_NOERROR && ret2 == RET_NOERROR)
  9629. {
  9630. Cylinder *cylinder1 = tradeItem1->getParent(), *cylinder2 = tradeItem2->getParent();
  9631. internalMoveItem(player, cylinder1, tradePartner, INDEX_WHEREEVER, tradeItem1, tradeItem1->getItemCount(), NULL);
  9632. internalMoveItem(tradePartner, cylinder2, player, INDEX_WHEREEVER, tradeItem2, tradeItem2->getItemCount(), NULL);
  9633.  
  9634. tradeItem1->onTradeEvent(ON_TRADE_TRANSFER, tradePartner, player);
  9635. tradeItem2->onTradeEvent(ON_TRADE_TRANSFER, player, tradePartner);
  9636. success = true;
  9637. }
  9638. }
  9639.  
  9640. if(!success)
  9641. {
  9642. std::string error;
  9643. if(tradeItem2)
  9644. {
  9645. error = getTradeErrorDescription(ret1, tradeItem1);
  9646. tradePartner->sendTextMessage(MSG_INFO_DESCR, error);
  9647. tradeItem2->onTradeEvent(ON_TRADE_CANCEL, tradePartner, NULL);
  9648. }
  9649.  
  9650. if(tradeItem1)
  9651. {
  9652. error = getTradeErrorDescription(ret2, tradeItem2);
  9653. player->sendTextMessage(MSG_INFO_DESCR, error);
  9654. tradeItem1->onTradeEvent(ON_TRADE_CANCEL, player, NULL);
  9655. }
  9656. }
  9657.  
  9658. player->setTradeState(TRADE_NONE);
  9659. player->tradeItem = NULL;
  9660. player->tradePartner = NULL;
  9661.  
  9662. tradePartner->setTradeState(TRADE_NONE);
  9663. tradePartner->tradeItem = NULL;
  9664. tradePartner->tradePartner = NULL;
  9665.  
  9666. player->sendTradeClose();
  9667. tradePartner->sendTradeClose();
  9668. return success;
  9669. }
  9670.  
  9671. std::string Game::getTradeErrorDescription(ReturnValue ret, Item* item)
  9672. {
  9673. if(!item)
  9674. return std::string();
  9675.  
  9676. std::stringstream ss;
  9677. if(ret == RET_NOTENOUGHCAPACITY)
  9678. {
  9679. ss << "You do not have enough capacity to carry";
  9680. if(item->isStackable() && item->getItemCount() > 1)
  9681. ss << " these objects.";
  9682. else
  9683. ss << " this object." ;
  9684.  
  9685. ss << std::endl << " " << item->getWeightDescription();
  9686. }
  9687. else if(ret == RET_NOTENOUGHROOM || ret == RET_CONTAINERNOTENOUGHROOM)
  9688. {
  9689. ss << "You do not have enough room to carry";
  9690. if(item->isStackable() && item->getItemCount() > 1)
  9691. ss << " these objects.";
  9692. else
  9693. ss << " this object.";
  9694. }
  9695. else
  9696. ss << "Trade could not be completed.";
  9697.  
  9698. return ss.str().c_str();
  9699. }
  9700.  
  9701. bool Game::playerLookInTrade(uint32_t playerId, bool lookAtCounterOffer, int32_t index)
  9702. {
  9703. Player* player = getPlayerByID(playerId);
  9704. if(!player || player->isRemoved())
  9705. return false;
  9706.  
  9707. Player* tradePartner = player->tradePartner;
  9708. if(!tradePartner)
  9709. return false;
  9710.  
  9711. Item* tradeItem = NULL;
  9712. if(lookAtCounterOffer)
  9713. tradeItem = tradePartner->getTradeItem();
  9714. else
  9715. tradeItem = player->getTradeItem();
  9716.  
  9717. if(!tradeItem)
  9718. return false;
  9719.  
  9720. std::stringstream ss;
  9721. ss << "You see ";
  9722.  
  9723. int32_t lookDistance = std::max(std::abs(player->getPosition().x - tradeItem->getPosition().x),
  9724. std::abs(player->getPosition().y - tradeItem->getPosition().y));
  9725. if(!index)
  9726. {
  9727. ss << tradeItem->getDescription(lookDistance);
  9728. if(player->hasCustomFlag(PlayerCustomFlag_CanSeeItemDetails))
  9729. {
  9730. ss << std::endl << "ItemID: [" << tradeItem->getID() << "]";
  9731. if(tradeItem->getActionId() > 0)
  9732. ss << ", ActionID: [" << tradeItem->getActionId() << "]";
  9733.  
  9734. if(tradeItem->getUniqueId() > 0)
  9735. ss << ", UniqueID: [" << tradeItem->getUniqueId() << "]";
  9736.  
  9737. ss << ".";
  9738. const ItemType& it = Item::items[tradeItem->getID()];
  9739. if(it.transformEquipTo)
  9740. ss << std::endl << "TransformTo (onEquip): [" << it.transformEquipTo << "]";
  9741. else if(it.transformDeEquipTo)
  9742. ss << std::endl << "TransformTo (onDeEquip): [" << it.transformDeEquipTo << "]";
  9743. else if(it.decayTo != -1)
  9744. ss << std::endl << "DecayTo: [" << it.decayTo << "]";
  9745. }
  9746.  
  9747. player->sendTextMessage(MSG_INFO_DESCR, ss.str());
  9748. return false;
  9749. }
  9750.  
  9751. Container* tradeContainer = tradeItem->getContainer();
  9752. if(!tradeContainer || index > (int32_t)tradeContainer->getItemHoldingCount())
  9753. return false;
  9754.  
  9755. std::list<const Container*> listContainer;
  9756. listContainer.push_back(tradeContainer);
  9757.  
  9758. ItemList::const_iterator it;
  9759. Container* tmpContainer = NULL;
  9760. while(listContainer.size() > 0)
  9761. {
  9762. const Container* container = listContainer.front();
  9763. listContainer.pop_front();
  9764. for(it = container->getItems(); it != container->getEnd(); ++it)
  9765. {
  9766. if((tmpContainer = (*it)->getContainer()))
  9767. listContainer.push_back(tmpContainer);
  9768.  
  9769. --index;
  9770. if(index != 0)
  9771. continue;
  9772.  
  9773. ss << (*it)->getDescription(lookDistance);
  9774. if(player->hasCustomFlag(PlayerCustomFlag_CanSeeItemDetails))
  9775. {
  9776. ss << std::endl << "ItemID: [" << (*it)->getID() << "]";
  9777. if((*it)->getActionId() > 0)
  9778. ss << ", ActionID: [" << (*it)->getActionId() << "]";
  9779.  
  9780. if((*it)->getUniqueId() > 0)
  9781. ss << ", UniqueID: [" << (*it)->getUniqueId() << "]";
  9782.  
  9783. ss << ".";
  9784. const ItemType& iit = Item::items[(*it)->getID()];
  9785. if(iit.transformEquipTo)
  9786. ss << std::endl << "TransformTo: [" << iit.transformEquipTo << "] (onEquip).";
  9787. else if(iit.transformDeEquipTo)
  9788. ss << std::endl << "TransformTo: [" << iit.transformDeEquipTo << "] (onDeEquip).";
  9789. else if(iit.decayTo != -1)
  9790. ss << std::endl << "DecayTo: [" << iit.decayTo << "].";
  9791. }
  9792.  
  9793. player->sendTextMessage(MSG_INFO_DESCR, ss.str());
  9794. return true;
  9795. }
  9796. }
  9797.  
  9798. return false;
  9799. }
  9800.  
  9801. bool Game::playerCloseTrade(uint32_t playerId)
  9802. {
  9803. Player* player = getPlayerByID(playerId);
  9804. if(!player || player->isRemoved())
  9805. return false;
  9806.  
  9807. return internalCloseTrade(player);
  9808. }
  9809.  
  9810. bool Game::internalCloseTrade(Player* player)
  9811. {
  9812. Player* tradePartner = player->tradePartner;
  9813. if((tradePartner && tradePartner->getTradeState() == TRADE_TRANSFER) || player->getTradeState() == TRADE_TRANSFER)
  9814. {
  9815. std::clog << "[Warning - Game::internalCloseTrade] TradeState == TRADE_TRANSFER, " <<
  9816. player->getName() << " " << player->getTradeState() << ", " <<
  9817. tradePartner->getName() << " " << tradePartner->getTradeState() << std::endl;
  9818. return true;
  9819. }
  9820.  
  9821. std::vector<Item*>::iterator it;
  9822. if(player->getTradeItem())
  9823. {
  9824. std::map<Item*, uint32_t>::iterator it = tradeItems.find(player->getTradeItem());
  9825. if(it != tradeItems.end())
  9826. {
  9827. freeThing(it->first);
  9828. tradeItems.erase(it);
  9829. }
  9830.  
  9831. player->tradeItem->onTradeEvent(ON_TRADE_CANCEL, player, NULL);
  9832. player->tradeItem = NULL;
  9833. }
  9834.  
  9835. player->setTradeState(TRADE_NONE);
  9836. player->tradePartner = NULL;
  9837.  
  9838. player->sendTextMessage(MSG_STATUS_SMALL, "Trade cancelled.");
  9839. player->sendTradeClose();
  9840. if(tradePartner)
  9841. {
  9842. if(tradePartner->getTradeItem())
  9843. {
  9844. std::map<Item*, uint32_t>::iterator it = tradeItems.find(tradePartner->getTradeItem());
  9845. if(it != tradeItems.end())
  9846. {
  9847. freeThing(it->first);
  9848. tradeItems.erase(it);
  9849. }
  9850.  
  9851. tradePartner->tradeItem->onTradeEvent(ON_TRADE_CANCEL, tradePartner, NULL);
  9852. tradePartner->tradeItem = NULL;
  9853. }
  9854.  
  9855. tradePartner->setTradeState(TRADE_NONE);
  9856. tradePartner->tradePartner = NULL;
  9857.  
  9858. tradePartner->sendTextMessage(MSG_STATUS_SMALL, "Trade cancelled.");
  9859. tradePartner->sendTradeClose();
  9860. }
  9861.  
  9862. return true;
  9863. }
  9864.  
  9865. bool Game::playerPurchaseItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint8_t amount,
  9866. bool ignoreCap/* = false*/, bool inBackpacks/* = false*/)
  9867. {
  9868. Player* player = getPlayerByID(playerId);
  9869. if(!player || player->isRemoved())
  9870. return false;
  9871.  
  9872. int32_t onBuy, onSell;
  9873. Npc* merchant = player->getShopOwner(onBuy, onSell);
  9874. if(!merchant)
  9875. return false;
  9876.  
  9877. const ItemType& it = Item::items.getItemIdByClientId(spriteId);
  9878. if(!it.id)
  9879. return false;
  9880.  
  9881. uint8_t subType = count;
  9882. if(it.isFluidContainer() && count < uint8_t(sizeof(reverseFluidMap) / sizeof(int8_t)))
  9883. subType = reverseFluidMap[count];
  9884.  
  9885. if(!player->canShopItem(it.id, subType, SHOPEVENT_BUY))
  9886. return false;
  9887.  
  9888. merchant->onPlayerTrade(player, SHOPEVENT_BUY, onBuy, it.id, subType, amount, ignoreCap, inBackpacks);
  9889. return true;
  9890. }
  9891.  
  9892. bool Game::playerSellItem(uint32_t playerId, uint16_t spriteId, uint8_t count, uint8_t amount)
  9893. {
  9894. Player* player = getPlayerByID(playerId);
  9895. if(!player || player->isRemoved())
  9896. return false;
  9897.  
  9898. int32_t onBuy, onSell;
  9899. Npc* merchant = player->getShopOwner(onBuy, onSell);
  9900. if(!merchant)
  9901. return false;
  9902.  
  9903. const ItemType& it = Item::items.getItemIdByClientId(spriteId);
  9904. if(!it.id)
  9905. return false;
  9906.  
  9907. uint8_t subType = count;
  9908. if(it.isFluidContainer() && count < uint8_t(sizeof(reverseFluidMap) / sizeof(int8_t)))
  9909. subType = reverseFluidMap[count];
  9910.  
  9911. if(!player->canShopItem(it.id, subType, SHOPEVENT_SELL))
  9912. return false;
  9913.  
  9914. merchant->onPlayerTrade(player, SHOPEVENT_SELL, onSell, it.id, subType, amount);
  9915. return true;
  9916. }
  9917.  
  9918. bool Game::playerCloseShop(uint32_t playerId)
  9919. {
  9920. Player* player = getPlayerByID(playerId);
  9921. if(player == NULL || player->isRemoved())
  9922. return false;
  9923.  
  9924. player->closeShopWindow();
  9925. return true;
  9926. }
  9927.  
  9928. bool Game::playerLookInShop(uint32_t playerId, uint16_t spriteId, uint8_t count)
  9929. {
  9930. Player* player = getPlayerByID(playerId);
  9931. if(player == NULL || player->isRemoved())
  9932. return false;
  9933.  
  9934. const ItemType& it = Item::items.getItemIdByClientId(spriteId);
  9935. if(it.id == 0)
  9936. return false;
  9937.  
  9938. int32_t subType = count;
  9939. if(it.isFluidContainer())
  9940. {
  9941. if(subType == 3) // FIXME: hack
  9942. subType = 11;
  9943. else if(count < uint8_t(sizeof(reverseFluidMap) / sizeof(int8_t)))
  9944. subType = reverseFluidMap[count];
  9945. }
  9946.  
  9947. std::stringstream ss;
  9948. ss << "You see " << Item::getDescription(it, 1, NULL, subType);
  9949. if(player->hasCustomFlag(PlayerCustomFlag_CanSeeItemDetails))
  9950. ss << std::endl << "ItemID: [" << it.id << "].";
  9951.  
  9952. player->sendTextMessage(MSG_INFO_DESCR, ss.str());
  9953. return true;
  9954. }
  9955.  
  9956. bool Game::playerLookAt(uint32_t playerId, const Position& pos, uint16_t spriteId, int16_t stackpos)
  9957. {
  9958. Player* player = getPlayerByID(playerId);
  9959. if(!player || player->isRemoved())
  9960. return false;
  9961.  
  9962. if(player->hasCondition(CONDITION_EXHAUST, 7))
  9963. {
  9964. player->sendTextMessage(MSG_STATUS_SMALL, "You have to wait a while.");
  9965. return false;
  9966. }
  9967.  
  9968. if(Condition* conditionlook = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 300, 0, false, 7))
  9969. player->addCondition(conditionlook);
  9970.  
  9971. Thing* thing = internalGetThing(player, pos, stackpos, spriteId, STACKPOS_LOOK);
  9972. if(!thing)
  9973. {
  9974. player->sendCancelMessage(RET_NOTPOSSIBLE);
  9975. return false;
  9976. }
  9977.  
  9978. Position thingPos = pos;
  9979. if(pos.x == 0xFFFF)
  9980. thingPos = thing->getPosition();
  9981.  
  9982. if(!player->canSee(thingPos))
  9983. {
  9984. player->sendCancelMessage(RET_NOTPOSSIBLE);
  9985. return false;
  9986. }
  9987.  
  9988. Position playerPos = player->getPosition();
  9989. int32_t lookDistance = -1;
  9990. if(thing != player)
  9991. {
  9992. lookDistance = std::max(std::abs(playerPos.x - thingPos.x), std::abs(playerPos.y - thingPos.y));
  9993. if(playerPos.z != thingPos.z)
  9994. lookDistance = lookDistance + 9 + 6;
  9995. }
  9996.  
  9997. bool deny = false;
  9998. CreatureEventList lookEvents = player->getCreatureEvents(CREATURE_EVENT_LOOK);
  9999. for(CreatureEventList::iterator it = lookEvents.begin(); it != lookEvents.end(); ++it)
  10000. {
  10001. if(!(*it)->executeLook(player, thing, thingPos, stackpos, lookDistance))
  10002. deny = true;
  10003. }
  10004.  
  10005. if(deny)
  10006. return false;
  10007.  
  10008. std::stringstream ss;
  10009. ss << "You see " << thing->getDescription(lookDistance);
  10010. if(player->hasCustomFlag(PlayerCustomFlag_CanSeeItemDetails))
  10011. {
  10012. if(Item* item = thing->getItem())
  10013. {
  10014. ss << std::endl << "ItemID: [" << item->getID() << "]";
  10015. if(item->getActionId() > 0)
  10016. ss << ", ActionID: [" << item->getActionId() << "]";
  10017.  
  10018. if(item->getUniqueId() > 0)
  10019. ss << ", UniqueID: [" << item->getUniqueId() << "]";
  10020.  
  10021. ss << ".";
  10022. const ItemType& it = Item::items[item->getID()];
  10023. if(it.transformEquipTo)
  10024. ss << std::endl << "TransformTo: [" << it.transformEquipTo << "] (onEquip).";
  10025. else if(it.transformDeEquipTo)
  10026. ss << std::endl << "TransformTo: [" << it.transformDeEquipTo << "] (onDeEquip).";
  10027. else if(it.decayTo != -1)
  10028. ss << std::endl << "DecayTo: [" << it.decayTo << "].";
  10029. }
  10030. }
  10031.  
  10032. if(player->hasCustomFlag(PlayerCustomFlag_CanSeeCreatureDetails))
  10033. {
  10034. if(const Creature* creature = thing->getCreature())
  10035. {
  10036. ss << std::endl << "Health: [" << creature->getHealth() << " / " << creature->getMaxHealth() << "]";
  10037. if(creature->getMaxMana() > 0)
  10038. ss << ", Mana: [" << creature->getMana() << " / " << creature->getMaxMana() << "]";
  10039.  
  10040. ss << ".";
  10041. if(const Player* destPlayer = creature->getPlayer())
  10042. {
  10043. ss << std::endl << "IP: " << convertIPAddress(destPlayer->getIP()) << ", Client: " << destPlayer->getClientVersion() << ".";
  10044. if(destPlayer->isGhost())
  10045. ss << std::endl << "* Ghost mode *";
  10046. }
  10047. }
  10048. }
  10049.  
  10050. if(player->hasCustomFlag(PlayerCustomFlag_CanSeePosition))
  10051. ss << std::endl << "Position: [X: " << thingPos.x << "] [Y: " << thingPos.y << "] [Z: " << thingPos.z << "].";
  10052.  
  10053. player->sendTextMessage(MSG_INFO_DESCR, ss.str());
  10054. return true;
  10055. }
  10056.  
  10057. bool Game::playerQuests(uint32_t playerId)
  10058. {
  10059. Player* player = getPlayerByID(playerId);
  10060. if(!player || player->isRemoved())
  10061. return false;
  10062.  
  10063. player->sendQuests();
  10064. return true;
  10065. }
  10066.  
  10067. bool Game::playerQuestInfo(uint32_t playerId, uint16_t questId)
  10068. {
  10069. Player* player = getPlayerByID(playerId);
  10070. if(!player || player->isRemoved())
  10071. return false;
  10072.  
  10073. Quest* quest = Quests::getInstance()->getQuestById(questId);
  10074. if(!quest)
  10075. return false;
  10076.  
  10077. player->sendQuestInfo(quest);
  10078. return true;
  10079. }
  10080.  
  10081. bool Game::playerCancelAttackAndFollow(uint32_t playerId)
  10082. {
  10083. Player* player = getPlayerByID(playerId);
  10084. if(!player || player->isRemoved())
  10085. return false;
  10086.  
  10087. playerSetAttackedCreature(playerId, 0);
  10088. playerFollowCreature(playerId, 0);
  10089.  
  10090. player->stopWalk();
  10091. return true;
  10092. }
  10093.  
  10094. bool Game::playerSetAttackedCreature(uint32_t playerId, uint32_t creatureId)
  10095. {
  10096. Player* player = getPlayerByID(playerId);
  10097. if(!player || player->isRemoved())
  10098. return false;
  10099.  
  10100. if(player->getAttackedCreature() && !creatureId)
  10101. {
  10102. player->setAttackedCreature(NULL);
  10103. player->sendCancelTarget();
  10104. return true;
  10105. }
  10106.  
  10107. Creature* attackCreature = getCreatureByID(creatureId);
  10108. if(!attackCreature)
  10109. {
  10110. player->setAttackedCreature(NULL);
  10111. player->sendCancelTarget();
  10112. return false;
  10113. }
  10114.  
  10115. ReturnValue ret = Combat::canTargetCreature(player, attackCreature);
  10116. if(ret != RET_NOERROR)
  10117. {
  10118. player->sendCancelMessage(ret);
  10119. player->sendCancelTarget();
  10120. player->setAttackedCreature(NULL);
  10121. return false;
  10122. }
  10123.  
  10124. player->setAttackedCreature(attackCreature);
  10125. Dispatcher::getInstance().addTask(createTask(boost::bind(
  10126. &Game::updateCreatureWalk, this, player->getID())));
  10127. return true;
  10128. }
  10129.  
  10130. bool Game::playerFollowCreature(uint32_t playerId, uint32_t creatureId)
  10131. {
  10132. Player* player = getPlayerByID(playerId);
  10133. if(!player || player->isRemoved())
  10134. return false;
  10135.  
  10136. Creature* followCreature = NULL;
  10137. if(creatureId)
  10138. followCreature = getCreatureByID(creatureId);
  10139.  
  10140. player->setAttackedCreature(NULL);
  10141. Dispatcher::getInstance().addTask(createTask(boost::bind(
  10142. &Game::updateCreatureWalk, this, player->getID())));
  10143. return player->setFollowCreature(followCreature);
  10144. }
  10145.  
  10146. bool Game::playerSetFightModes(uint32_t playerId, fightMode_t fightMode, chaseMode_t chaseMode, secureMode_t secureMode)
  10147. {
  10148. Player* player = getPlayerByID(playerId);
  10149. if(!player || player->isRemoved())
  10150. return false;
  10151.  
  10152. player->setFightMode(fightMode);
  10153. player->setChaseMode(chaseMode);
  10154. player->setSecureMode(secureMode);
  10155.  
  10156. return true;
  10157. }
  10158.  
  10159. bool Game::playerRequestAddVip(uint32_t playerId, const std::string& vipName)
  10160. {
  10161. Player* player = getPlayerByID(playerId);
  10162. if(!player || player->isRemoved())
  10163. return false;
  10164.  
  10165. uint32_t guid;
  10166. bool specialVip;
  10167.  
  10168. std::string name = vipName;
  10169. if(!IOLoginData::getInstance()->getGuidByNameEx(guid, specialVip, name))
  10170. {
  10171. player->sendTextMessage(MSG_STATUS_SMALL, "A player with that name does not exist.");
  10172. return false;
  10173. }
  10174.  
  10175. if(specialVip && !player->hasFlag(PlayerFlag_SpecialVIP))
  10176. {
  10177. player->sendTextMessage(MSG_STATUS_SMALL, "You cannot add this player.");
  10178. return false;
  10179. }
  10180.  
  10181. if(player->hasCondition(CONDITION_EXHAUST, 1))
  10182. {
  10183. player->sendTextMessage(MSG_STATUS_SMALL, "Please wait few seconds before adding new player to your vip list.");
  10184. return false;
  10185. }
  10186.  
  10187. bool online = false;
  10188. if(Player* target = getPlayerByName(name))
  10189. online = player->canSeeCreature(target);
  10190.  
  10191. if(Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 3000, 0, false, 1))
  10192. player->addCondition(condition);
  10193.  
  10194. return player->addVIP(guid, name, online);
  10195. }
  10196.  
  10197. bool Game::playerRequestRemoveVip(uint32_t playerId, uint32_t guid)
  10198. {
  10199. Player* player = getPlayerByID(playerId);
  10200. if(!player || player->isRemoved())
  10201. return false;
  10202.  
  10203. if(player->hasCondition(CONDITION_EXHAUST, 1))
  10204. {
  10205. player->sendTextMessage(MSG_STATUS_SMALL, "Please wait few seconds before deleting next player from your vip list.");
  10206. return false;
  10207. }
  10208.  
  10209. if(Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 3000, 0, false, 1))
  10210. player->addCondition(condition);
  10211.  
  10212. player->removeVIP(guid);
  10213. return true;
  10214. }
  10215.  
  10216. bool Game::playerTurn(uint32_t playerId, Direction dir)
  10217. {
  10218. Player* player = getPlayerByID(playerId);
  10219. if(!player || player->isRemoved())
  10220. return false;
  10221.  
  10222. if(internalCreatureTurn(player, dir))
  10223. {
  10224. player->setIdleTime(0);
  10225. return true;
  10226. }
  10227.  
  10228. if(player->getDirection() != dir || !player->hasCustomFlag(PlayerCustomFlag_CanTurnhop))
  10229. return false;
  10230.  
  10231. Position pos = getNextPosition(dir, player->getPosition());
  10232. Tile* tile = map->getTile(pos);
  10233. if(!tile || !tile->ground)
  10234. return false;
  10235.  
  10236. player->setIdleTime(0);
  10237. ReturnValue ret = tile->__queryAdd(0, player, 1, FLAG_IGNOREBLOCKITEM);
  10238. if(ret != RET_NOTENOUGHROOM && (ret != RET_NOTPOSSIBLE || player->hasCustomFlag(PlayerCustomFlag_CanMoveAnywhere))
  10239. && (ret != RET_PLAYERISNOTINVITED || player->hasFlag(PlayerFlag_CanEditHouses)))
  10240. return internalTeleport(player, pos, false, FLAG_NOLIMIT, false);
  10241.  
  10242. player->sendCancelMessage(ret);
  10243. return false;
  10244. }
  10245.  
  10246. bool Game::playerRequestOutfit(uint32_t playerId)
  10247. {
  10248. Player* player = getPlayerByID(playerId);
  10249. if(!player || player->isRemoved())
  10250. return false;
  10251.  
  10252. if(player->hasCondition(CONDITION_EXHAUST, 4))
  10253. {
  10254. player->sendTextMessage(MSG_STATUS_SMALL, "You have to wait a while.");
  10255. return false;
  10256. }
  10257.  
  10258. if(Condition* conditionoutfit = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 300, 0, false, 4))
  10259. player->addCondition(conditionoutfit);
  10260.  
  10261. player->sendOutfitWindow();
  10262. return true;
  10263. }
  10264.  
  10265. bool Game::playerChangeOutfit(uint32_t playerId, Outfit_t outfit)
  10266. {
  10267. Player* player = getPlayerByID(playerId);
  10268. if(!player || player->isRemoved())
  10269. return false;
  10270.  
  10271. if(player->hasCondition(CONDITION_EXHAUST, 4))
  10272. {
  10273. player->sendTextMessage(MSG_STATUS_SMALL, "You have to wait a while.");
  10274. return false;
  10275. }
  10276.  
  10277. if(Condition* conditionoutfit = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 1000, 0, false, 4))
  10278. player->addCondition(conditionoutfit);
  10279.  
  10280. if(!player->changeOutfit(outfit, true))
  10281. return false;
  10282.  
  10283. player->setIdleTime(0);
  10284. if(!player->hasCondition(CONDITION_OUTFIT, -1))
  10285. internalCreatureChangeOutfit(player, outfit);
  10286.  
  10287. return true;
  10288. }
  10289.  
  10290. bool Game::playerSay(uint32_t playerId, uint16_t channelId, SpeakClasses type, const std::string& receiver, const std::string& text)
  10291. {
  10292. Player* player = getPlayerByID(playerId);
  10293. if(!player || player->isRemoved())
  10294. return false;
  10295.  
  10296. int32_t muted = 0;
  10297. bool mute = player->isMuted(channelId, type, muted);
  10298. if(muted && mute)
  10299. {
  10300. if(muted > 0)
  10301. {
  10302. char buffer[75];
  10303. sprintf(buffer, "You are still muted for %d seconds.", muted);
  10304. player->sendTextMessage(MSG_STATUS_SMALL, buffer);
  10305. }
  10306. else
  10307. player->sendTextMessage(MSG_STATUS_SMALL, "You are muted permanently.");
  10308.  
  10309. return false;
  10310. }
  10311.  
  10312. if(player->isAccountManager())
  10313. {
  10314. if(mute)
  10315. player->removeMessageBuffer();
  10316.  
  10317. return internalCreatureSay(player, SPEAK_SAY, text, false);
  10318. }
  10319.  
  10320. if(g_talkActions->onPlayerSay(player, type == SPEAK_SAY ? (unsigned)CHANNEL_DEFAULT : channelId, text, false))
  10321. return true;
  10322.  
  10323. ReturnValue ret = RET_NOERROR;
  10324. if(!muted)
  10325. {
  10326. ret = g_spells->onPlayerSay(player, text);
  10327. if(ret == RET_NOERROR || (ret == RET_NEEDEXCHANGE && !g_config.getBool(ConfigManager::BUFFER_SPELL_FAILURE)))
  10328. return true;
  10329. }
  10330.  
  10331. if(mute)
  10332. player->removeMessageBuffer();
  10333.  
  10334. if(ret == RET_NEEDEXCHANGE)
  10335. return true;
  10336.  
  10337. switch(type)
  10338. {
  10339. case SPEAK_SAY:
  10340. return internalCreatureSay(player, SPEAK_SAY, text, false);
  10341. case SPEAK_WHISPER:
  10342. return playerWhisper(player, text);
  10343. case SPEAK_YELL:
  10344. return playerYell(player, text);
  10345. case SPEAK_PRIVATE:
  10346. case SPEAK_PRIVATE_RED:
  10347. case SPEAK_RVR_ANSWER:
  10348. return playerSpeakTo(player, type, receiver, text);
  10349. case SPEAK_CHANNEL_O:
  10350. case SPEAK_CHANNEL_Y:
  10351. case SPEAK_CHANNEL_RN:
  10352. case SPEAK_CHANNEL_RA:
  10353. case SPEAK_CHANNEL_W:
  10354. {
  10355. if(playerTalkToChannel(player, type, text, channelId))
  10356. return true;
  10357.  
  10358. return playerSay(playerId, 0, SPEAK_SAY, receiver, text);
  10359. }
  10360. case SPEAK_PRIVATE_PN:
  10361. return playerSpeakToNpc(player, text);
  10362. case SPEAK_BROADCAST:
  10363. return playerBroadcastMessage(player, SPEAK_BROADCAST, text);
  10364. case SPEAK_RVR_CHANNEL:
  10365. return playerReportRuleViolation(player, text);
  10366. case SPEAK_RVR_CONTINUE:
  10367. return playerContinueReport(player, text);
  10368.  
  10369. default:
  10370. break;
  10371. }
  10372.  
  10373. return false;
  10374. }
  10375.  
  10376. bool Game::playerWhisper(Player* player, const std::string& text)
  10377. {
  10378. SpectatorVec list;
  10379. SpectatorVec::const_iterator it;
  10380. getSpectators(list, player->getPosition(), false, false, 1, 1);
  10381.  
  10382. //send to client
  10383. Player* tmpPlayer = NULL;
  10384. for(it = list.begin(); it != list.end(); ++it)
  10385. {
  10386. if((tmpPlayer = (*it)->getPlayer()))
  10387. tmpPlayer->sendCreatureSay(player, SPEAK_WHISPER, text);
  10388. }
  10389.  
  10390. //event method
  10391. for(it = list.begin(); it != list.end(); ++it)
  10392. (*it)->onCreatureSay(player, SPEAK_WHISPER, text);
  10393.  
  10394. return true;
  10395. }
  10396.  
  10397. bool Game::playerYell(Player* player, const std::string& text)
  10398. {
  10399. if(player->getLevel() <= 1 && !player->hasFlag(PlayerFlag_CannotBeMuted))
  10400. {
  10401. player->sendTextMessage(MSG_STATUS_SMALL, "You may not yell as long as you are on level 1.");
  10402. return true;
  10403. }
  10404.  
  10405. if(player->hasCondition(CONDITION_MUTED, 1))
  10406. {
  10407. player->sendCancelMessage(RET_YOUAREEXHAUSTED);
  10408. return true;
  10409. }
  10410.  
  10411. if(!player->hasFlag(PlayerFlag_CannotBeMuted))
  10412. {
  10413. if(Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_MUTED, 30000, 0, false, 1))
  10414. player->addCondition(condition);
  10415. }
  10416.  
  10417. internalCreatureSay(player, SPEAK_YELL, asUpperCaseString(text), false);
  10418. return true;
  10419. }
  10420.  
  10421. bool Game::playerSpeakTo(Player* player, SpeakClasses type, const std::string& receiver,
  10422. const std::string& text)
  10423. {
  10424. Player* toPlayer = getPlayerByName(receiver);
  10425. if(!toPlayer || toPlayer->isRemoved())
  10426. {
  10427. player->sendTextMessage(MSG_STATUS_SMALL, "A player with this name is not online.");
  10428. return false;
  10429. }
  10430.  
  10431. bool canSee = player->canSeeCreature(toPlayer);
  10432. if(toPlayer->hasCondition(CONDITION_GAMEMASTER, GAMEMASTER_IGNORE)
  10433. && !player->hasFlag(PlayerFlag_CannotBeMuted))
  10434. {
  10435. char buffer[70];
  10436. if(!canSee)
  10437. sprintf(buffer, "A player with this name is not online.");
  10438. else
  10439. sprintf(buffer, "Sorry, %s is currently ignoring private messages.", toPlayer->getName().c_str());
  10440.  
  10441. player->sendTextMessage(MSG_STATUS_SMALL, buffer);
  10442. return false;
  10443. }
  10444.  
  10445. if(type == SPEAK_PRIVATE_RED && !player->hasFlag(PlayerFlag_CanTalkRedPrivate))
  10446. type = SPEAK_PRIVATE;
  10447.  
  10448. toPlayer->sendCreatureSay(player, type, text);
  10449. toPlayer->onCreatureSay(player, type, text);
  10450. if(!canSee)
  10451. {
  10452. player->sendTextMessage(MSG_STATUS_SMALL, "A player with this name is not online.");
  10453. return false;
  10454. }
  10455.  
  10456. char buffer[80];
  10457. sprintf(buffer, "Message sent to %s.", toPlayer->getName().c_str());
  10458. player->sendTextMessage(MSG_STATUS_SMALL, buffer);
  10459. return true;
  10460. }
  10461.  
  10462. bool Game::playerTalkToChannel(Player* player, SpeakClasses type, const std::string& text, uint16_t channelId)
  10463. {
  10464. if(player->hasCondition(CONDITION_EXHAUST, 6))
  10465. {
  10466. player->sendTextMessage(MSG_STATUS_SMALL, "You have to wait a while.");
  10467. return false;
  10468. }
  10469.  
  10470. if(Condition* conditionchannel = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 300, 0, false, 6))
  10471. player->addCondition(conditionchannel);
  10472.  
  10473. switch(type)
  10474. {
  10475. case SPEAK_CHANNEL_Y:
  10476. {
  10477. if(channelId == CHANNEL_HELP && player->hasFlag(PlayerFlag_TalkOrangeHelpChannel))
  10478. type = SPEAK_CHANNEL_O;
  10479. break;
  10480. }
  10481.  
  10482. case SPEAK_CHANNEL_O:
  10483. {
  10484. if(channelId != CHANNEL_HELP || !player->hasFlag(PlayerFlag_TalkOrangeHelpChannel))
  10485. type = SPEAK_CHANNEL_Y;
  10486. break;
  10487. }
  10488.  
  10489. case SPEAK_CHANNEL_RN:
  10490. {
  10491. if(!player->hasFlag(PlayerFlag_CanTalkRedChannel))
  10492. type = SPEAK_CHANNEL_Y;
  10493. break;
  10494. }
  10495.  
  10496. case SPEAK_CHANNEL_RA:
  10497. {
  10498. if(!player->hasFlag(PlayerFlag_CanTalkRedChannelAnonymous))
  10499. type = SPEAK_CHANNEL_Y;
  10500. break;
  10501. }
  10502.  
  10503. default:
  10504. break;
  10505. }
  10506.  
  10507. if(text.length() > 250)
  10508. player->sendCancel("Chat message is too long");
  10509. else
  10510. return g_chat.talkToChannel(player, type, text, channelId);
  10511.  
  10512. return false;
  10513. }
  10514. bool Game::playerSpeakToNpc(Player* player, const std::string& text)
  10515. {
  10516. SpectatorVec list;
  10517. SpectatorVec::iterator it;
  10518. getSpectators(list, player->getPosition());
  10519.  
  10520. if(player->hasCondition(CONDITION_EXHAUST, 2))
  10521. {
  10522. player->sendTextMessage(MSG_STATUS_SMALL, "You have to wait a while.");
  10523. return false;
  10524. }
  10525.  
  10526. if(Condition* conditionnpc = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 300, 0, false, 2))
  10527. player->addCondition(conditionnpc);
  10528.  
  10529. //send to npcs only
  10530. Npc* tmpNpc = NULL;
  10531. for(it = list.begin(); it != list.end(); ++it)
  10532. {
  10533. if((tmpNpc = (*it)->getNpc()))
  10534. (*it)->onCreatureSay(player, SPEAK_PRIVATE_PN, text);
  10535. }
  10536. return true;
  10537. }
  10538.  
  10539. bool Game::playerReportRuleViolation(Player* player, const std::string& text)
  10540. {
  10541. //Do not allow reports on multiclones worlds since reports are name-based
  10542. if(g_config.getNumber(ConfigManager::ALLOW_CLONES))
  10543. {
  10544. player->sendTextMessage(MSG_INFO_DESCR, "Rule violation reports are disabled.");
  10545. return false;
  10546. }
  10547.  
  10548. cancelRuleViolation(player);
  10549. boost::shared_ptr<RuleViolation> rvr(new RuleViolation(player, text, time(NULL)));
  10550. ruleViolations[player->getID()] = rvr;
  10551.  
  10552. ChatChannel* channel = g_chat.getChannelById(CHANNEL_RVR);
  10553. if(!channel)
  10554. return false;
  10555.  
  10556. for(UsersMap::const_iterator it = channel->getUsers().begin(); it != channel->getUsers().end(); ++it)
  10557. it->second->sendToChannel(player, SPEAK_RVR_CHANNEL, text, CHANNEL_RVR, rvr->time);
  10558.  
  10559. return true;
  10560. }
  10561.  
  10562. bool Game::playerContinueReport(Player* player, const std::string& text)
  10563. {
  10564. RuleViolationsMap::iterator it = ruleViolations.find(player->getID());
  10565. if(it == ruleViolations.end())
  10566. return false;
  10567.  
  10568. RuleViolation& rvr = *it->second;
  10569. Player* toPlayer = rvr.gamemaster;
  10570. if(!toPlayer)
  10571. return false;
  10572.  
  10573. toPlayer->sendCreatureSay(player, SPEAK_RVR_CONTINUE, text);
  10574. player->sendTextMessage(MSG_STATUS_SMALL, "Message sent to Gamemaster.");
  10575. return true;
  10576. }
  10577.  
  10578. bool Game::canThrowObjectTo(const Position& fromPos, const Position& toPos, bool checkLineOfSight /*= true*/,
  10579. int32_t rangex/* = Map::maxClientViewportX*/, int32_t rangey/* = Map::maxClientViewportY*/)
  10580. {
  10581. return map->canThrowObjectTo(fromPos, toPos, checkLineOfSight, rangex, rangey);
  10582. }
  10583.  
  10584. bool Game::isSightClear(const Position& fromPos, const Position& toPos, bool floorCheck)
  10585. {
  10586. return map->isSightClear(fromPos, toPos, floorCheck);
  10587. }
  10588.  
  10589. bool Game::internalCreatureTurn(Creature* creature, Direction dir)
  10590. {
  10591. bool deny = false;
  10592. CreatureEventList directionEvents = creature->getCreatureEvents(CREATURE_EVENT_DIRECTION);
  10593. for(CreatureEventList::iterator it = directionEvents.begin(); it != directionEvents.end(); ++it)
  10594. {
  10595. if(!(*it)->executeDirection(creature, creature->getDirection(), dir) && !deny)
  10596. deny = true;
  10597. }
  10598.  
  10599. if(deny || creature->getDirection() == dir)
  10600. return false;
  10601.  
  10602. creature->setDirection(dir);
  10603. const SpectatorVec& list = getSpectators(creature->getPosition());
  10604. SpectatorVec::const_iterator it;
  10605.  
  10606. //send to client
  10607. Player* tmpPlayer = NULL;
  10608. for(it = list.begin(); it != list.end(); ++it)
  10609. {
  10610. if((tmpPlayer = (*it)->getPlayer()))
  10611. tmpPlayer->sendCreatureTurn(creature);
  10612. }
  10613.  
  10614. //event method
  10615. for(it = list.begin(); it != list.end(); ++it)
  10616. (*it)->onCreatureTurn(creature);
  10617.  
  10618. return true;
  10619. }
  10620.  
  10621. bool Game::internalCreatureSay(Creature* creature, SpeakClasses type, const std::string& text,
  10622. bool ghostMode, SpectatorVec* spectators/* = NULL*/, Position* pos/* = NULL*/)
  10623. {
  10624. Player* player = creature->getPlayer();
  10625. if(player && player->isAccountManager())
  10626. {
  10627. player->manageAccount(text);
  10628. return true;
  10629. }
  10630.  
  10631. Position destPos = creature->getPosition();
  10632. if(pos)
  10633. destPos = (*pos);
  10634.  
  10635. SpectatorVec list;
  10636. SpectatorVec::const_iterator it;
  10637. if(!spectators || !spectators->size())
  10638. {
  10639. // This somewhat complex construct ensures that the cached SpectatorVec
  10640. // is used if available and if it can be used, else a local vector is
  10641. // used (hopefully the compiler will optimize away the construction of
  10642. // the temporary when it's not used).
  10643. if(type != SPEAK_YELL && type != SPEAK_MONSTER_YELL)
  10644. getSpectators(list, destPos, false, false,
  10645. Map::maxClientViewportX, Map::maxClientViewportX,
  10646. Map::maxClientViewportY, Map::maxClientViewportY);
  10647. else
  10648. getSpectators(list, destPos, false, true, 18, 18, 14, 14);
  10649. }
  10650. else
  10651. list = (*spectators);
  10652.  
  10653. //send to client
  10654. Player* tmpPlayer = NULL;
  10655. for(it = list.begin(); it != list.end(); ++it)
  10656. {
  10657. if(!(tmpPlayer = (*it)->getPlayer()))
  10658. continue;
  10659.  
  10660. if(!ghostMode || tmpPlayer->canSeeCreature(creature))
  10661. tmpPlayer->sendCreatureSay(creature, type, text, &destPos);
  10662. }
  10663.  
  10664. //event method
  10665. for(it = list.begin(); it != list.end(); ++it)
  10666. (*it)->onCreatureSay(creature, type, text, &destPos);
  10667.  
  10668. return true;
  10669. }
  10670.  
  10671. bool Game::getPathTo(const Creature* creature, const Position& destPos,
  10672. std::list<Direction>& listDir, int32_t maxSearchDist /*= -1*/)
  10673. {
  10674. return map->getPathTo(creature, destPos, listDir, maxSearchDist);
  10675. }
  10676.  
  10677. bool Game::getPathToEx(const Creature* creature, const Position& targetPos,
  10678. std::list<Direction>& dirList, const FindPathParams& fpp)
  10679. {
  10680. return map->getPathMatching(creature, dirList, FrozenPathingConditionCall(targetPos), fpp);
  10681. }
  10682.  
  10683. bool Game::getPathToEx(const Creature* creature, const Position& targetPos, std::list<Direction>& dirList,
  10684. uint32_t minTargetDist, uint32_t maxTargetDist, bool fullPathSearch/* = true*/,
  10685. bool clearSight/* = true*/, int32_t maxSearchDist/* = -1*/)
  10686. {
  10687. FindPathParams fpp;
  10688. fpp.fullPathSearch = fullPathSearch;
  10689. fpp.maxSearchDist = maxSearchDist;
  10690. fpp.clearSight = clearSight;
  10691. fpp.minTargetDist = minTargetDist;
  10692. fpp.maxTargetDist = maxTargetDist;
  10693. return getPathToEx(creature, targetPos, dirList, fpp);
  10694. }
  10695.  
  10696. bool Game::steerCreature(Creature* creature, const Position& position)
  10697. {
  10698. FindPathParams fpp;
  10699. fpp.fullPathSearch = true;
  10700. fpp.maxSearchDist = -1;
  10701. fpp.clearSight = true;
  10702. fpp.minTargetDist = 0;
  10703. fpp.maxTargetDist = 1;
  10704.  
  10705. std::list<Direction> dirList;
  10706. if(!getPathToEx(creature, position, dirList, fpp))
  10707. return false;
  10708.  
  10709. if(!Position::areInRange<1,1,0>(creature->getPosition(), position))
  10710. {
  10711. SchedulerTask* task = createSchedulerTask(std::max((int32_t)SCHEDULER_MINTICKS,
  10712. creature->getStepDuration()), boost::bind(&Game::steerCreature, this, creature, position));
  10713.  
  10714. if(Player* player = creature->getPlayer())
  10715. player->setNextWalkActionTask(task);
  10716. }
  10717.  
  10718. creature->startAutoWalk(dirList);
  10719. return true;
  10720. }
  10721.  
  10722. void Game::checkCreatureWalk(uint32_t creatureId)
  10723. {
  10724. Creature* creature = getCreatureByID(creatureId);
  10725. if(!creature || creature->getHealth() < 1)
  10726. return;
  10727.  
  10728. creature->onWalk();
  10729. cleanup();
  10730. }
  10731.  
  10732. void Game::updateCreatureWalk(uint32_t creatureId)
  10733. {
  10734. Creature* creature = getCreatureByID(creatureId);
  10735. if(creature && creature->getHealth() > 0)
  10736. creature->goToFollowCreature();
  10737. }
  10738.  
  10739. void Game::checkCreatureAttack(uint32_t creatureId)
  10740. {
  10741. Creature* creature = getCreatureByID(creatureId);
  10742. if(creature && creature->getHealth() > 0)
  10743. creature->onAttacking(0);
  10744. }
  10745.  
  10746. void Game::addCreatureCheck(Creature* creature)
  10747. {
  10748. if(creature->isRemoved())
  10749. return;
  10750.  
  10751. creature->checked = true;
  10752. if(creature->checkVector >= 0) //already in a vector, or about to be added
  10753. return;
  10754.  
  10755. toAddCheckCreatureVector.push_back(creature);
  10756. creature->checkVector = random_range(0, EVENT_CREATURECOUNT - 1);
  10757. creature->addRef();
  10758. }
  10759.  
  10760. void Game::removeCreatureCheck(Creature* creature)
  10761. {
  10762. if(creature->checkVector == -1) //not in any vector
  10763. return;
  10764.  
  10765. creature->checked = false;
  10766. }
  10767.  
  10768. void Game::checkCreatures()
  10769. {
  10770. checkCreatureEvent = Scheduler::getInstance().addEvent(createSchedulerTask(
  10771. EVENT_CHECK_CREATURE_INTERVAL, boost::bind(&Game::checkCreatures, this)));
  10772. checkCreatureLastIndex++;
  10773. if(checkCreatureLastIndex == EVENT_CREATURECOUNT)
  10774. checkCreatureLastIndex = 0;
  10775.  
  10776. std::vector<Creature*>::iterator it;
  10777. for(it = toAddCheckCreatureVector.begin(); it != toAddCheckCreatureVector.end(); ++it)
  10778. checkCreatureVectors[(*it)->checkVector].push_back(*it);
  10779.  
  10780. toAddCheckCreatureVector.clear();
  10781. std::vector<Creature*>& checkCreatureVector = checkCreatureVectors[checkCreatureLastIndex];
  10782. for(it = checkCreatureVector.begin(); it != checkCreatureVector.end();)
  10783. {
  10784. if((*it)->checked)
  10785. {
  10786. if((*it)->getHealth() > 0 || !(*it)->onDeath())
  10787. (*it)->onThink(EVENT_CREATURE_THINK_INTERVAL);
  10788.  
  10789. ++it;
  10790. }
  10791. else
  10792. {
  10793. (*it)->checkVector = -1;
  10794. freeThing(*it);
  10795. it = checkCreatureVector.erase(it);
  10796. }
  10797. }
  10798.  
  10799. cleanup();
  10800. }
  10801.  
  10802. void Game::changeSpeed(Creature* creature, int32_t varSpeedDelta)
  10803. {
  10804. if(!creature)
  10805. return;
  10806.  
  10807. int32_t varSpeed = creature->getSpeed() - creature->getBaseSpeed();
  10808. varSpeed += varSpeedDelta;
  10809. creature->setSpeed(varSpeed);
  10810.  
  10811. const SpectatorVec& list = getSpectators(creature->getPosition());
  10812. SpectatorVec::const_iterator it;
  10813.  
  10814. //send to client
  10815. Player* tmpPlayer = NULL;
  10816. for(it = list.begin(); it != list.end(); ++it)
  10817. {
  10818. if((*it) && (tmpPlayer = (*it)->getPlayer()))
  10819. tmpPlayer->sendChangeSpeed(creature, creature->getStepSpeed());
  10820. }
  10821. }
  10822.  
  10823. void Game::internalCreatureChangeOutfit(Creature* creature, const Outfit_t& outfit, bool forced/* = false*/)
  10824. {
  10825. if(!forced)
  10826. {
  10827. bool deny = false;
  10828. CreatureEventList outfitEvents = creature->getCreatureEvents(CREATURE_EVENT_OUTFIT);
  10829. for(CreatureEventList::iterator it = outfitEvents.begin(); it != outfitEvents.end(); ++it)
  10830. {
  10831. if(!(*it)->executeOutfit(creature, creature->getCurrentOutfit(), outfit) && !deny)
  10832. deny = true;
  10833. }
  10834.  
  10835. if(deny || creature->getCurrentOutfit() == outfit)
  10836. return;
  10837. }
  10838.  
  10839. creature->setCurrentOutfit(outfit);
  10840. const SpectatorVec& list = getSpectators(creature->getPosition());
  10841. SpectatorVec::const_iterator it;
  10842.  
  10843. //send to client
  10844. Player* tmpPlayer = NULL;
  10845. for(it = list.begin(); it != list.end(); ++it)
  10846. {
  10847. if((*it) && (tmpPlayer = (*it)->getPlayer()))
  10848. tmpPlayer->sendCreatureChangeOutfit(creature, outfit);
  10849. }
  10850.  
  10851. //event method
  10852. for(it = list.begin(); it != list.end(); ++it)
  10853. if((*it)) (*it)->onCreatureChangeOutfit(creature, outfit);
  10854. }
  10855.  
  10856. void Game::internalCreatureChangeVisible(Creature* creature, Visible_t visible)
  10857. {
  10858. const SpectatorVec& list = getSpectators(creature->getPosition());
  10859. SpectatorVec::const_iterator it;
  10860.  
  10861. //send to client
  10862. Player* tmpPlayer = NULL;
  10863. for(it = list.begin(); it != list.end(); ++it)
  10864. {
  10865. if((tmpPlayer = (*it)->getPlayer()))
  10866. tmpPlayer->sendCreatureChangeVisible(creature, visible);
  10867. }
  10868.  
  10869. //event method
  10870. for(it = list.begin(); it != list.end(); ++it)
  10871. (*it)->onCreatureChangeVisible(creature, visible);
  10872. }
  10873.  
  10874.  
  10875. void Game::changeLight(const Creature* creature)
  10876. {
  10877. const SpectatorVec& list = getSpectators(creature->getPosition());
  10878.  
  10879. //send to client
  10880. Player* tmpPlayer = NULL;
  10881. for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
  10882. {
  10883. if((tmpPlayer = (*it)->getPlayer()) && !tmpPlayer->hasCustomFlag(PlayerCustomFlag_HasFullLight))
  10884. tmpPlayer->sendCreatureLight(creature);
  10885. }
  10886. }
  10887.  
  10888. bool Game::combatBlockHit(CombatType_t combatType, Creature* attacker, Creature* target,
  10889. int32_t& healthChange, bool checkDefense, bool checkArmor, bool field/* = false*/)
  10890. {
  10891. if(healthChange > 0)
  10892. return false;
  10893.  
  10894. const Position& targetPos = target->getPosition();
  10895. const SpectatorVec& list = getSpectators(targetPos);
  10896. if(!target->isAttackable() || Combat::canDoCombat(attacker, target) != RET_NOERROR)
  10897. {
  10898. addMagicEffect(list, targetPos, MAGIC_EFFECT_POFF, target->isGhost());
  10899. return true;
  10900. }
  10901.  
  10902. int32_t damage = -healthChange;
  10903. BlockType_t blockType = target->blockHit(attacker, combatType,
  10904. damage, checkDefense, checkArmor, !field, field);
  10905.  
  10906. healthChange = -damage;
  10907. if(blockType == BLOCK_DEFENSE)
  10908. {
  10909. addMagicEffect(list, targetPos, MAGIC_EFFECT_POFF);
  10910. return true;
  10911. }
  10912. else if(blockType == BLOCK_ARMOR)
  10913. {
  10914. addMagicEffect(list, targetPos, MAGIC_EFFECT_BLOCKHIT);
  10915. return true;
  10916. }
  10917. else if(blockType != BLOCK_IMMUNITY)
  10918. return false;
  10919.  
  10920. MagicEffect_t effect = MAGIC_EFFECT_NONE;
  10921. switch(combatType)
  10922. {
  10923. case COMBAT_UNDEFINEDDAMAGE:
  10924. break;
  10925.  
  10926. case COMBAT_ENERGYDAMAGE:
  10927. case COMBAT_FIREDAMAGE:
  10928. case COMBAT_PHYSICALDAMAGE:
  10929. case COMBAT_ICEDAMAGE:
  10930. case COMBAT_DEATHDAMAGE:
  10931. case COMBAT_EARTHDAMAGE:
  10932. case COMBAT_HOLYDAMAGE:
  10933. {
  10934. effect = MAGIC_EFFECT_BLOCKHIT;
  10935. break;
  10936. }
  10937.  
  10938. default:
  10939. {
  10940. effect = MAGIC_EFFECT_POFF;
  10941. break;
  10942. }
  10943. }
  10944.  
  10945. addMagicEffect(list, targetPos, effect);
  10946. return true;
  10947. }
  10948.  
  10949. bool Game::combatChangeHealth(CombatType_t combatType, Creature* attacker, Creature* target, int32_t healthChange,
  10950. MagicEffect_t hitEffect/* = MAGIC_EFFECT_UNKNOWN*/, Color_t hitColor/* = COLOR_UNKNOWN*/, bool force/* = false*/)
  10951. {
  10952. const Position& targetPos = target->getPosition();
  10953. if(healthChange > 0)
  10954. {
  10955. if(!force && target->getHealth() <= 0)
  10956. return false;
  10957.  
  10958. bool deny = false;
  10959. CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
  10960. for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
  10961. {
  10962. if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_HEALTHGAIN, combatType, healthChange))
  10963. deny = true;
  10964. }
  10965.  
  10966. if(deny)
  10967. return false;
  10968.  
  10969. target->gainHealth(attacker, healthChange);
  10970. if(g_config.getBool(ConfigManager::SHOW_HEALING_DAMAGE) && !target->isGhost() &&
  10971. (g_config.getBool(ConfigManager::SHOW_HEALING_DAMAGE_MONSTER) || !target->getMonster()))
  10972. {
  10973. char buffer[20];
  10974. sprintf(buffer, "+%d", healthChange);
  10975.  
  10976. const SpectatorVec& list = getSpectators(targetPos);
  10977. if(combatType != COMBAT_HEALING)
  10978. addMagicEffect(list, targetPos, MAGIC_EFFECT_WRAPS_BLUE);
  10979.  
  10980. addAnimatedText(list, targetPos, COLOR_MAYABLUE, buffer);
  10981. }
  10982. }
  10983. else
  10984. {
  10985. const SpectatorVec& list = getSpectators(targetPos);
  10986. if(!target->isAttackable() || Combat::canDoCombat(attacker, target) != RET_NOERROR)
  10987. {
  10988. addMagicEffect(list, targetPos, MAGIC_EFFECT_POFF);
  10989. return true;
  10990. }
  10991.  
  10992. int32_t damage = -healthChange;
  10993. if(damage != 0)
  10994. {
  10995. if(target->hasCondition(CONDITION_MANASHIELD) && combatType != COMBAT_UNDEFINEDDAMAGE)
  10996. {
  10997. int32_t manaDamage = std::min(target->getMana(), damage);
  10998. damage = std::max((int32_t)0, damage - manaDamage);
  10999. if(manaDamage != 0)
  11000. {
  11001. bool deny = false;
  11002. CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
  11003. for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
  11004. {
  11005. if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_MANALOSS, combatType, manaDamage))
  11006. deny = true;
  11007. }
  11008.  
  11009. if(deny)
  11010. return false;
  11011.  
  11012. target->drainMana(attacker, combatType, manaDamage);
  11013. char buffer[20];
  11014. sprintf(buffer, "%d", manaDamage);
  11015.  
  11016. addMagicEffect(list, targetPos, MAGIC_EFFECT_LOSE_ENERGY);
  11017. addAnimatedText(list, targetPos, COLOR_BLUE, buffer);
  11018. }
  11019. }
  11020.  
  11021. damage = std::min(target->getHealth(), damage);
  11022. if(damage > 0)
  11023. {
  11024. bool deny = false;
  11025. CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
  11026. for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
  11027. {
  11028. if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_HEALTHLOSS, combatType, damage))
  11029. deny = true;
  11030. }
  11031.  
  11032. if(deny)
  11033. return false;
  11034.  
  11035. target->drainHealth(attacker, combatType, damage);
  11036. addCreatureHealth(list, target);
  11037.  
  11038. Color_t textColor = COLOR_NONE;
  11039. MagicEffect_t magicEffect = MAGIC_EFFECT_NONE;
  11040. switch(combatType)
  11041. {
  11042. case COMBAT_PHYSICALDAMAGE:
  11043. {
  11044. Item* splash = NULL;
  11045. switch(target->getRace())
  11046. {
  11047. case RACE_VENOM:
  11048. textColor = COLOR_LIGHTGREEN;
  11049. magicEffect = MAGIC_EFFECT_POISON;
  11050. splash = Item::CreateItem(ITEM_SMALLSPLASH, FLUID_GREEN);
  11051. break;
  11052.  
  11053. case RACE_BLOOD:
  11054. textColor = COLOR_RED;
  11055. magicEffect = MAGIC_EFFECT_DRAW_BLOOD;
  11056. splash = Item::CreateItem(ITEM_SMALLSPLASH, FLUID_BLOOD);
  11057. break;
  11058.  
  11059. case RACE_UNDEAD:
  11060. textColor = COLOR_GREY;
  11061. magicEffect = MAGIC_EFFECT_HIT_AREA;
  11062. break;
  11063.  
  11064. case RACE_FIRE:
  11065. textColor = COLOR_ORANGE;
  11066. magicEffect = MAGIC_EFFECT_DRAW_BLOOD;
  11067. break;
  11068.  
  11069. case RACE_ENERGY:
  11070. textColor = COLOR_LIGHTBLUE;
  11071. magicEffect = MAGIC_EFFECT_PURPLEENERGY;
  11072. break;
  11073.  
  11074. default:
  11075. break;
  11076. }
  11077.  
  11078. if(splash)
  11079. {
  11080. internalAddItem(NULL, target->getTile(), splash, INDEX_WHEREEVER, FLAG_NOLIMIT);
  11081. startDecay(splash);
  11082. }
  11083. break;
  11084. }
  11085.  
  11086. case COMBAT_ENERGYDAMAGE:
  11087. {
  11088. textColor = COLOR_LIGHTBLUE;
  11089. magicEffect = MAGIC_EFFECT_ENERGY_DAMAGE;
  11090. break;
  11091. }
  11092.  
  11093. case COMBAT_EARTHDAMAGE:
  11094. {
  11095. textColor = COLOR_LIGHTGREEN;
  11096. magicEffect = MAGIC_EFFECT_POISON_RINGS;
  11097. break;
  11098. }
  11099.  
  11100. case COMBAT_DROWNDAMAGE:
  11101. {
  11102. textColor = COLOR_LIGHTBLUE;
  11103. magicEffect = MAGIC_EFFECT_LOSE_ENERGY;
  11104. break;
  11105. }
  11106.  
  11107. case COMBAT_FIREDAMAGE:
  11108. {
  11109. textColor = COLOR_ORANGE;
  11110. magicEffect = MAGIC_EFFECT_HITBY_FIRE;
  11111. break;
  11112. }
  11113.  
  11114. case COMBAT_ICEDAMAGE:
  11115. {
  11116. textColor = COLOR_TEAL;
  11117. magicEffect = MAGIC_EFFECT_ICEATTACK;
  11118. break;
  11119. }
  11120.  
  11121. case COMBAT_HOLYDAMAGE:
  11122. {
  11123. textColor = COLOR_YELLOW;
  11124. magicEffect = MAGIC_EFFECT_HOLYDAMAGE;
  11125. break;
  11126. }
  11127.  
  11128. case COMBAT_DEATHDAMAGE:
  11129. {
  11130. textColor = COLOR_DARKRED;
  11131. magicEffect = MAGIC_EFFECT_SMALLCLOUDS;
  11132. break;
  11133. }
  11134.  
  11135. case COMBAT_LIFEDRAIN:
  11136. {
  11137. textColor = COLOR_RED;
  11138. magicEffect = MAGIC_EFFECT_WRAPS_RED;
  11139. break;
  11140. }
  11141.  
  11142. default:
  11143. break;
  11144. }
  11145.  
  11146. if(hitEffect != MAGIC_EFFECT_UNKNOWN)
  11147. magicEffect = hitEffect;
  11148.  
  11149. if(hitColor != COLOR_UNKNOWN)
  11150. textColor = hitColor;
  11151.  
  11152. if(textColor < COLOR_NONE && magicEffect < MAGIC_EFFECT_NONE)
  11153. {
  11154. char buffer[20];
  11155. sprintf(buffer, "%d", damage);
  11156.  
  11157. addMagicEffect(list, targetPos, magicEffect);
  11158. addAnimatedText(list, targetPos, textColor, buffer);
  11159. }
  11160. }
  11161. }
  11162. }
  11163.  
  11164. return true;
  11165. }
  11166.  
  11167. bool Game::combatChangeMana(Creature* attacker, Creature* target, int32_t manaChange)
  11168. {
  11169. const Position& targetPos = target->getPosition();
  11170. if(manaChange > 0)
  11171. {
  11172. bool deny = false;
  11173. CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
  11174. for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
  11175. {
  11176. if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_MANAGAIN, COMBAT_HEALING, manaChange))
  11177. deny = true;
  11178. }
  11179.  
  11180. if(deny)
  11181. return false;
  11182.  
  11183. target->changeMana(manaChange);
  11184. if(g_config.getBool(ConfigManager::SHOW_HEALING_DAMAGE) && !target->isGhost() &&
  11185. (g_config.getBool(ConfigManager::SHOW_HEALING_DAMAGE_MONSTER) || !target->getMonster()))
  11186. {
  11187. char buffer[20];
  11188. sprintf(buffer, "+%d", manaChange);
  11189.  
  11190. const SpectatorVec& list = getSpectators(targetPos);
  11191. addAnimatedText(list, targetPos, COLOR_DARKPURPLE, buffer);
  11192. }
  11193. }
  11194. else
  11195. {
  11196. const SpectatorVec& list = getSpectators(targetPos);
  11197. if(!target->isAttackable() || Combat::canDoCombat(attacker, target) != RET_NOERROR)
  11198. {
  11199. addMagicEffect(list, targetPos, MAGIC_EFFECT_POFF);
  11200. return false;
  11201. }
  11202.  
  11203. int32_t manaLoss = std::min(target->getMana(), -manaChange);
  11204. BlockType_t blockType = target->blockHit(attacker, COMBAT_MANADRAIN, manaLoss);
  11205. if(blockType != BLOCK_NONE)
  11206. {
  11207. addMagicEffect(list, targetPos, MAGIC_EFFECT_POFF);
  11208. return false;
  11209. }
  11210.  
  11211. if(manaLoss > 0)
  11212. {
  11213. bool deny = false;
  11214. CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
  11215. for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
  11216. {
  11217. if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_MANALOSS, COMBAT_UNDEFINEDDAMAGE, manaChange))
  11218. deny = true;
  11219. }
  11220.  
  11221. if(deny)
  11222. return false;
  11223.  
  11224. target->drainMana(attacker, COMBAT_MANADRAIN, manaLoss);
  11225. char buffer[20];
  11226. sprintf(buffer, "%d", manaLoss);
  11227.  
  11228. addAnimatedText(list, targetPos, COLOR_BLUE, buffer);
  11229. }
  11230. }
  11231.  
  11232. return true;
  11233. }
  11234.  
  11235. void Game::addCreatureHealth(const Creature* target)
  11236. {
  11237. const SpectatorVec& list = getSpectators(target->getPosition());
  11238. addCreatureHealth(list, target);
  11239. }
  11240.  
  11241. void Game::addCreatureHealth(const SpectatorVec& list, const Creature* target)
  11242. {
  11243. Player* player = NULL;
  11244. for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
  11245. {
  11246. if((player = (*it)->getPlayer()))
  11247. player->sendCreatureHealth(target);
  11248. }
  11249. }
  11250.  
  11251. void Game::addCreatureSquare(const Creature* target, uint8_t squareColor)
  11252. {
  11253. const SpectatorVec& list = getSpectators(target->getPosition());
  11254. addCreatureSquare(list, target, squareColor);
  11255. }
  11256.  
  11257. void Game::addCreatureSquare(const SpectatorVec& list, const Creature* target, uint8_t squareColor)
  11258. {
  11259. Player* player = NULL;
  11260. for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
  11261. {
  11262. if((player = (*it)->getPlayer()))
  11263. player->sendCreatureSquare(target, squareColor);
  11264. }
  11265. }
  11266.  
  11267. void Game::addAnimatedText(const Position& pos, uint8_t textColor, const std::string& text)
  11268. {
  11269. const SpectatorVec& list = getSpectators(pos);
  11270. addAnimatedText(list, pos, textColor, text);
  11271. }
  11272.  
  11273. void Game::addAnimatedText(const SpectatorVec& list, const Position& pos, uint8_t textColor,
  11274. const std::string& text)
  11275. {
  11276. Player* player = NULL;
  11277. for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
  11278. {
  11279. if((player = (*it)->getPlayer()))
  11280. player->sendAnimatedText(pos, textColor, text);
  11281. }
  11282. }
  11283.  
  11284. void Game::addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode/* = false*/)
  11285. {
  11286. if(ghostMode)
  11287. return;
  11288.  
  11289. const SpectatorVec& list = getSpectators(pos);
  11290. addMagicEffect(list, pos, effect);
  11291. }
  11292.  
  11293. void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect,
  11294. bool ghostMode/* = false*/)
  11295. {
  11296. if(ghostMode)
  11297. return;
  11298.  
  11299. Player* player = NULL;
  11300. for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
  11301. {
  11302. if((player = (*it)->getPlayer()))
  11303. player->sendMagicEffect(pos, effect);
  11304. }
  11305. }
  11306.  
  11307. void Game::addDistanceEffect(const Position& fromPos, const Position& toPos, uint8_t effect)
  11308. {
  11309. SpectatorVec list;
  11310. getSpectators(list, fromPos, false);
  11311. getSpectators(list, toPos, true);
  11312. addDistanceEffect(list, fromPos, toPos, effect);
  11313. }
  11314.  
  11315. void Game::addDistanceEffect(const SpectatorVec& list, const Position& fromPos,
  11316. const Position& toPos, uint8_t effect)
  11317. {
  11318. Player* player = NULL;
  11319. for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
  11320. {
  11321. if((player = (*it)->getPlayer()))
  11322. player->sendDistanceShoot(fromPos, toPos, effect);
  11323. }
  11324. }
  11325.  
  11326. void Game::startDecay(Item* item)
  11327. {
  11328. if(!item || !item->canDecay() || item->getDecaying() == DECAYING_TRUE)
  11329. return;
  11330.  
  11331. if(item->getDuration() > 0)
  11332. {
  11333. item->addRef();
  11334. item->setDecaying(DECAYING_TRUE);
  11335. toDecayItems.push_back(item);
  11336. }
  11337. else
  11338. internalDecayItem(item);
  11339. }
  11340.  
  11341. void Game::internalDecayItem(Item* item)
  11342. {
  11343. const ItemType& it = Item::items.getItemType(item->getID());
  11344. if(it.decayTo)
  11345. {
  11346. Item* newItem = transformItem(item, it.decayTo);
  11347. startDecay(newItem);
  11348. }
  11349. else
  11350. {
  11351. ReturnValue ret = internalRemoveItem(NULL, item);
  11352. if(ret != RET_NOERROR)
  11353. std::clog << "> DEBUG: internalDecayItem failed, error code: " << (int32_t)ret << ", item id: " << item->getID() << std::endl;
  11354. }
  11355. }
  11356.  
  11357. void Game::checkDecay()
  11358. {
  11359. checkDecayEvent = Scheduler::getInstance().addEvent(createSchedulerTask(EVENT_DECAYINTERVAL,
  11360. boost::bind(&Game::checkDecay, this)));
  11361.  
  11362. size_t bucket = (lastBucket + 1) % EVENT_DECAYBUCKETS;
  11363. for(DecayList::iterator it = decayItems[bucket].begin(); it != decayItems[bucket].end();)
  11364. {
  11365. Item* item = *it;
  11366. int32_t decreaseTime = EVENT_DECAYINTERVAL * EVENT_DECAYBUCKETS;
  11367. if(item->getDuration() - decreaseTime < 0)
  11368. decreaseTime = item->getDuration();
  11369.  
  11370. item->decreaseDuration(decreaseTime);
  11371. if(!item->canDecay())
  11372. {
  11373. item->setDecaying(DECAYING_FALSE);
  11374. freeThing(item);
  11375. it = decayItems[bucket].erase(it);
  11376. continue;
  11377. }
  11378.  
  11379. int32_t dur = item->getDuration();
  11380. if(dur <= 0)
  11381. {
  11382. it = decayItems[bucket].erase(it);
  11383. internalDecayItem(item);
  11384. freeThing(item);
  11385. }
  11386. else if(dur < EVENT_DECAYINTERVAL * EVENT_DECAYBUCKETS)
  11387. {
  11388. it = decayItems[bucket].erase(it);
  11389. size_t newBucket = (bucket + ((dur + EVENT_DECAYINTERVAL / 2) / 1000)) % EVENT_DECAYBUCKETS;
  11390. if(newBucket == bucket)
  11391. {
  11392. internalDecayItem(item);
  11393. freeThing(item);
  11394. }
  11395. else
  11396. decayItems[newBucket].push_back(item);
  11397. }
  11398. else
  11399. ++it;
  11400. }
  11401.  
  11402. lastBucket = bucket;
  11403. cleanup();
  11404. }
  11405.  
  11406. void Game::checkLight()
  11407. {
  11408. checkLightEvent = Scheduler::getInstance().addEvent(createSchedulerTask(EVENT_LIGHTINTERVAL,
  11409. boost::bind(&Game::checkLight, this)));
  11410.  
  11411. lightHour = lightHour + lightHourDelta;
  11412. if(lightHour > 1440)
  11413. lightHour = lightHour - 1440;
  11414.  
  11415. if(std::abs(lightHour - SUNRISE) < 2 * lightHourDelta)
  11416. lightState = LIGHT_STATE_SUNRISE;
  11417. else if(std::abs(lightHour - SUNSET) < 2 * lightHourDelta)
  11418. lightState = LIGHT_STATE_SUNSET;
  11419.  
  11420. int32_t newLightLevel = lightLevel;
  11421. bool lightChange = false;
  11422. switch(lightState)
  11423. {
  11424. case LIGHT_STATE_SUNRISE:
  11425. {
  11426. newLightLevel += (LIGHT_LEVEL_DAY - LIGHT_LEVEL_NIGHT) / 30;
  11427. lightChange = true;
  11428. break;
  11429. }
  11430. case LIGHT_STATE_SUNSET:
  11431. {
  11432. newLightLevel -= (LIGHT_LEVEL_DAY - LIGHT_LEVEL_NIGHT) / 30;
  11433. lightChange = true;
  11434. break;
  11435. }
  11436. default:
  11437. break;
  11438. }
  11439.  
  11440. if(newLightLevel <= LIGHT_LEVEL_NIGHT)
  11441. {
  11442. lightLevel = LIGHT_LEVEL_NIGHT;
  11443. lightState = LIGHT_STATE_NIGHT;
  11444. }
  11445. else if(newLightLevel >= LIGHT_LEVEL_DAY)
  11446. {
  11447. lightLevel = LIGHT_LEVEL_DAY;
  11448. lightState = LIGHT_STATE_DAY;
  11449. }
  11450. else
  11451. lightLevel = newLightLevel;
  11452.  
  11453. if(lightChange)
  11454. {
  11455. LightInfo lightInfo;
  11456. getWorldLightInfo(lightInfo);
  11457. for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
  11458. {
  11459. if(!it->second->hasCustomFlag(PlayerCustomFlag_HasFullLight))
  11460. it->second->sendWorldLight(lightInfo);
  11461. }
  11462. }
  11463. }
  11464.  
  11465. void Game::checkWars()
  11466. {
  11467. IOGuild::getInstance()->checkWars();
  11468. checkWarsEvent = Scheduler::getInstance().addEvent(createSchedulerTask(EVENT_WARSINTERVAL,
  11469. boost::bind(&Game::checkWars, this)));
  11470. }
  11471.  
  11472. void Game::getWorldLightInfo(LightInfo& lightInfo)
  11473. {
  11474. lightInfo.level = lightLevel;
  11475. lightInfo.color = 0xD7;
  11476. }
  11477.  
  11478. bool Game::cancelRuleViolation(Player* player)
  11479. {
  11480. RuleViolationsMap::iterator it = ruleViolations.find(player->getID());
  11481. if(it == ruleViolations.end())
  11482. return false;
  11483.  
  11484. Player* gamemaster = it->second->gamemaster;
  11485. if(!it->second->isOpen && gamemaster) //Send to the responser
  11486. gamemaster->sendRuleViolationCancel(player->getName());
  11487. else if(ChatChannel* channel = g_chat.getChannelById(CHANNEL_RVR))
  11488. {
  11489. UsersMap tmpMap = channel->getUsers();
  11490. for(UsersMap::iterator tit = tmpMap.begin(); tit != tmpMap.end(); ++tit)
  11491. tit->second->sendRemoveReport(player->getName());
  11492. }
  11493.  
  11494. //Now erase it
  11495. ruleViolations.erase(it);
  11496. return true;
  11497. }
  11498.  
  11499. bool Game::closeRuleViolation(Player* player)
  11500. {
  11501. RuleViolationsMap::iterator it = ruleViolations.find(player->getID());
  11502. if(it == ruleViolations.end())
  11503. return false;
  11504.  
  11505. ruleViolations.erase(it);
  11506. player->sendLockRuleViolation();
  11507. if(ChatChannel* channel = g_chat.getChannelById(CHANNEL_RVR))
  11508. {
  11509. UsersMap tmpMap = channel->getUsers();
  11510. for(UsersMap::iterator tit = tmpMap.begin(); tit != tmpMap.end(); ++tit)
  11511. tit->second->sendRemoveReport(player->getName());
  11512. }
  11513.  
  11514. return true;
  11515. }
  11516.  
  11517. void Game::updateCreatureSkull(Creature* creature)
  11518. {
  11519. const SpectatorVec& list = getSpectators(creature->getPosition());
  11520.  
  11521. //send to client
  11522. Player* tmpPlayer = NULL;
  11523. for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
  11524. {
  11525. if((tmpPlayer = (*it)->getPlayer()))
  11526. tmpPlayer->sendCreatureSkull(creature);
  11527. }
  11528. }
  11529.  
  11530. void Game::updateCreatureShield(Creature* creature)
  11531. {
  11532. const SpectatorVec& list = getSpectators(creature->getPosition());
  11533.  
  11534. //send to client
  11535. Player* tmpPlayer = NULL;
  11536. for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
  11537. {
  11538. if((tmpPlayer = (*it)->getPlayer()))
  11539. tmpPlayer->sendCreatureShield(creature);
  11540. }
  11541. }
  11542.  
  11543. void Game::updateCreatureEmblem(Creature* creature)
  11544. {
  11545. const SpectatorVec& list = getSpectators(creature->getPosition());
  11546.  
  11547. //send to client
  11548. Player* tmpPlayer = NULL;
  11549. for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
  11550. {
  11551. if((tmpPlayer = (*it)->getPlayer()))
  11552. tmpPlayer->sendCreatureEmblem(creature);
  11553. }
  11554. }
  11555.  
  11556. void Game::updateCreatureWalkthrough(Creature* creature)
  11557. {
  11558. const SpectatorVec& list = getSpectators(creature->getPosition());
  11559.  
  11560. //send to client
  11561. Player* tmpPlayer = NULL;
  11562. for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
  11563. {
  11564. if((tmpPlayer = (*it)->getPlayer()))
  11565. tmpPlayer->sendCreatureWalkthrough(creature, (*it)->canWalkthrough(creature));
  11566. }
  11567. }
  11568.  
  11569. bool Game::playerInviteToParty(uint32_t playerId, uint32_t invitedId)
  11570. {
  11571. Player* player = getPlayerByID(playerId);
  11572. if(!player || player->isRemoved())
  11573. return false;
  11574.  
  11575. if(player->hasCondition(CONDITION_EXHAUST, 5))
  11576. {
  11577. player->sendTextMessage(MSG_STATUS_SMALL, "You have to wait a while.");
  11578. return false;
  11579. }
  11580.  
  11581. if(Condition* conditionparty = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 1000, 0, false, 5))
  11582. player->addCondition(conditionparty);
  11583.  
  11584. Player* invitedPlayer = getPlayerByID(invitedId);
  11585. if(!invitedPlayer || invitedPlayer->isRemoved() || invitedPlayer->isInviting(player))
  11586. return false;
  11587.  
  11588. if(invitedPlayer->getParty())
  11589. {
  11590. char buffer[90];
  11591. sprintf(buffer, "%s is already in a party.", invitedPlayer->getName().c_str());
  11592. player->sendTextMessage(MSG_INFO_DESCR, buffer);
  11593. return false;
  11594. }
  11595.  
  11596. Party* party = player->getParty();
  11597. if(!party)
  11598. party = new Party(player);
  11599. else if(party->getLeader() != player)
  11600. return false;
  11601.  
  11602. return party->invitePlayer(invitedPlayer);
  11603. }
  11604.  
  11605. bool Game::playerJoinParty(uint32_t playerId, uint32_t leaderId)
  11606. {
  11607. Player* player = getPlayerByID(playerId);
  11608. if(!player || player->isRemoved())
  11609. return false;
  11610.  
  11611. if(player->hasCondition(CONDITION_EXHAUST, 5))
  11612. {
  11613. player->sendTextMessage(MSG_STATUS_SMALL, "You have to wait a while.");
  11614. return false;
  11615. }
  11616.  
  11617. if(Condition* conditionparty = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 1000, 0, false, 5))
  11618. player->addCondition(conditionparty);
  11619.  
  11620. Player* leader = getPlayerByID(leaderId);
  11621. if(!leader || leader->isRemoved() || !leader->isInviting(player))
  11622. return false;
  11623.  
  11624. if(!player->getParty())
  11625. return leader->getParty()->join(player);
  11626.  
  11627. player->sendTextMessage(MSG_INFO_DESCR, "You are already in a party.");
  11628. return false;
  11629. }
  11630.  
  11631. bool Game::playerRevokePartyInvitation(uint32_t playerId, uint32_t invitedId)
  11632. {
  11633. Player* player = getPlayerByID(playerId);
  11634. if(!player || player->isRemoved() || !player->getParty() || player->getParty()->getLeader() != player)
  11635. return false;
  11636.  
  11637. Player* invitedPlayer = getPlayerByID(invitedId);
  11638. if(!invitedPlayer || invitedPlayer->isRemoved() || !player->isInviting(invitedPlayer))
  11639. return false;
  11640.  
  11641. player->getParty()->revokeInvitation(invitedPlayer);
  11642. return true;
  11643. }
  11644.  
  11645. bool Game::playerPassPartyLeadership(uint32_t playerId, uint32_t newLeaderId)
  11646. {
  11647. Player* player = getPlayerByID(playerId);
  11648. if(!player || player->isRemoved() || !player->getParty() || player->getParty()->getLeader() != player)
  11649. return false;
  11650.  
  11651. if(player->hasCondition(CONDITION_EXHAUST, 5))
  11652. {
  11653. player->sendTextMessage(MSG_STATUS_SMALL, "You have to wait a while.");
  11654. return false;
  11655. }
  11656.  
  11657. if(Condition* conditionparty = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 1000, 0, false, 5))
  11658. player->addCondition(conditionparty);
  11659.  
  11660. Player* newLeader = getPlayerByID(newLeaderId);
  11661. if(!newLeader || newLeader->isRemoved() || !newLeader->getParty() || newLeader->getParty() != player->getParty())
  11662. return false;
  11663.  
  11664. return player->getParty()->passLeadership(newLeader);
  11665. }
  11666.  
  11667. bool Game::playerLeaveParty(uint32_t playerId, bool forced/* = false*/)
  11668. {
  11669. Player* player = getPlayerByID(playerId);
  11670. if(!player || player->isRemoved() || !player->getParty() || (player->hasCondition(CONDITION_INFIGHT) && !forced))
  11671. return false;
  11672.  
  11673. return player->getParty()->leave(player);
  11674. }
  11675.  
  11676. bool Game::playerSharePartyExperience(uint32_t playerId, bool activate, uint8_t)
  11677. {
  11678. Player* player = getPlayerByID(playerId);
  11679. if(!player || player->isRemoved())
  11680. return false;
  11681.  
  11682. if(!player->getParty() || (!player->hasFlag(PlayerFlag_NotGainInFight)
  11683. && player->hasCondition(CONDITION_INFIGHT)))
  11684. return false;
  11685.  
  11686. return player->getParty()->setSharedExperience(player, activate);
  11687. }
  11688.  
  11689. bool Game::playerReportBug(uint32_t playerId, std::string comment)
  11690. {
  11691. Player* player = getPlayerByID(playerId);
  11692. if(!player || player->isRemoved())
  11693. return false;
  11694.  
  11695. if(!player->hasFlag(PlayerFlag_CanReportBugs))
  11696. return false;
  11697.  
  11698. CreatureEventList reportBugEvents = player->getCreatureEvents(CREATURE_EVENT_REPORTBUG);
  11699. for(CreatureEventList::iterator it = reportBugEvents.begin(); it != reportBugEvents.end(); ++it)
  11700. (*it)->executeReportBug(player, comment);
  11701.  
  11702. return true;
  11703. }
  11704.  
  11705. bool Game::playerViolationWindow(uint32_t playerId, std::string name, uint8_t reason, ViolationAction_t action,
  11706. std::string comment, std::string statement, uint32_t statementId, bool ipBanishment)
  11707. {
  11708. Player* player = getPlayerByID(playerId);
  11709. if(!player || player->isRemoved())
  11710. return false;
  11711.  
  11712. Group* group = player->getGroup();
  11713. if(!group)
  11714. return false;
  11715.  
  11716. std::string::size_type start = comment.find("{"), end = std::string::npos;
  11717. if(start != std::string::npos)
  11718. end = comment.find("}", start + 1);
  11719.  
  11720. time_t length[3] = {0, 0, 0};
  11721. if(end != std::string::npos)
  11722. {
  11723. int32_t i = 0;
  11724. StringVec vec = explodeString(comment.substr(start + 1, end - 1), ",");
  11725. for(StringVec::iterator it = vec.begin(); it != vec.end() && i < 4; ++it, ++i)
  11726. {
  11727. if((*it) == "delete")
  11728. {
  11729. i--;
  11730. action = ACTION_DELETION;
  11731. continue;
  11732. }
  11733.  
  11734. time_t banTime = time(NULL);
  11735. StringVec tec = explodeString((*it), "+");
  11736. for(StringVec::iterator tit = tec.begin(); tit != tec.end(); ++tit)
  11737. {
  11738. std::string tmp = (*tit);
  11739. if(tmp[0] != 's' && tmp[0] != 'm' && tmp[0] != 'h' && tmp[0] != 'd'
  11740. && tmp[0] != 'w' && tmp[0] != 'o' && tmp[0] != 'y')
  11741. continue;
  11742.  
  11743. uint32_t count = 1;
  11744. if(tmp.size() > 1)
  11745. {
  11746. count = atoi(tmp.substr(1).c_str());
  11747. if(!count)
  11748. count = 1;
  11749. }
  11750.  
  11751. if(tmp[0] == 's')
  11752. banTime += count;
  11753.  
  11754. if(tmp[0] == 'm')
  11755. banTime += count * 60;
  11756.  
  11757. if(tmp[0] == 'h')
  11758. banTime += count * 3600;
  11759.  
  11760. if(tmp[0] == 'd')
  11761. banTime += count * 86400;
  11762.  
  11763. if(tmp[0] == 'w')
  11764. banTime += count * 604800;
  11765.  
  11766. if(tmp[0] == 'o')
  11767. banTime += count * 2592000;
  11768.  
  11769. if(tmp[0] == 'y')
  11770. banTime += count * 31536000;
  11771.  
  11772. length[i] = banTime;
  11773. }
  11774. }
  11775.  
  11776. comment = comment.substr(end + 1);
  11777. }
  11778.  
  11779. int16_t nameFlags = group->getNameViolationFlags(), statementFlags = group->getStatementViolationFlags();
  11780. if((ipBanishment && ((nameFlags & IPBAN_FLAG) != IPBAN_FLAG || (statementFlags & IPBAN_FLAG) != IPBAN_FLAG)) ||
  11781. !(nameFlags & (1 << action) || statementFlags & (1 << action)) || reason > group->getViolationReasons())
  11782. {
  11783. player->sendCancel("You do not have authorization for this action.");
  11784. return false;
  11785. }
  11786.  
  11787. uint32_t commentSize = g_config.getNumber(ConfigManager::MAX_VIOLATIONCOMMENT_SIZE);
  11788. if(comment.size() > commentSize)
  11789. {
  11790. char buffer[90];
  11791. sprintf(buffer, "The comment may not exceed limit of %d characters.", commentSize);
  11792.  
  11793. player->sendCancel(buffer);
  11794. return false;
  11795. }
  11796.  
  11797. toLowerCaseString(name);
  11798. Player* target = getPlayerByNameEx(name);
  11799. if(!target || name == "account manager")
  11800. {
  11801. player->sendCancel("A player with this name does not exist.");
  11802. return false;
  11803. }
  11804.  
  11805. if(target->hasFlag(PlayerFlag_CannotBeBanned))
  11806. {
  11807. player->sendCancel("You do not have authorization for this action.");
  11808. return false;
  11809. }
  11810.  
  11811. Account account = IOLoginData::getInstance()->loadAccount(target->getAccount(), true);
  11812. enum KickAction {
  11813. NONE = 1,
  11814. KICK = 2,
  11815. FULL_KICK = 3,
  11816. } kickAction = FULL_KICK;
  11817. switch(action)
  11818. {
  11819. case ACTION_STATEMENT:
  11820. {
  11821. StatementMap::iterator it = g_chat.statementMap.find(statementId);
  11822. if(it == g_chat.statementMap.end())
  11823. {
  11824. player->sendCancel("Statement has been already reported.");
  11825. return false;
  11826. }
  11827.  
  11828. IOBan::getInstance()->addStatement(target->getGUID(), reason, comment,
  11829. player->getGUID(), -1, statement);
  11830. g_chat.statementMap.erase(it);
  11831.  
  11832. kickAction = NONE;
  11833. break;
  11834. }
  11835.  
  11836. case ACTION_NAMEREPORT:
  11837. {
  11838. int64_t banTime = -1;
  11839. PlayerBan_t tmp = (PlayerBan_t)g_config.getNumber(ConfigManager::NAME_REPORT_TYPE);
  11840. if(tmp == PLAYERBAN_BANISHMENT)
  11841. {
  11842. if(!length[0])
  11843. banTime = time(NULL) + g_config.getNumber(ConfigManager::BAN_LENGTH);
  11844. else
  11845. banTime = length[0];
  11846. }
  11847.  
  11848. if(!IOBan::getInstance()->addPlayerBanishment(target->getGUID(), banTime, reason, action,
  11849. comment, player->getGUID(), tmp))
  11850. {
  11851. player->sendCancel("Player has been already reported.");
  11852. return false;
  11853. }
  11854. else if(tmp == PLAYERBAN_BANISHMENT)
  11855. account.warnings++;
  11856.  
  11857. kickAction = (KickAction)tmp;
  11858. break;
  11859. }
  11860.  
  11861. case ACTION_NOTATION:
  11862. case ACTION_BANISHMENT:
  11863. case ACTION_BANREPORT:
  11864. {
  11865. if(action == ACTION_NOTATION)
  11866. {
  11867. if(!IOBan::getInstance()->addNotation(account.number, reason,
  11868. comment, player->getGUID(), target->getGUID()))
  11869. {
  11870. player->sendCancel("Unable to perform action.");
  11871. return false;
  11872. }
  11873.  
  11874. if(IOBan::getInstance()->getNotationsCount(account.number) < (uint32_t)
  11875. g_config.getNumber(ConfigManager::NOTATIONS_TO_BAN))
  11876. {
  11877. kickAction = NONE;
  11878. break;
  11879. }
  11880.  
  11881. action = ACTION_BANISHMENT;
  11882. }
  11883.  
  11884. bool deny = action != ACTION_BANREPORT;
  11885. int64_t banTime = -1;
  11886.  
  11887. account.warnings++;
  11888. if(account.warnings >= g_config.getNumber(ConfigManager::WARNINGS_TO_DELETION))
  11889. action = ACTION_DELETION;
  11890. else if(length[0])
  11891. banTime = length[0];
  11892. else if(account.warnings >= g_config.getNumber(ConfigManager::WARNINGS_TO_FINALBAN))
  11893. banTime = time(NULL) + g_config.getNumber(ConfigManager::FINALBAN_LENGTH);
  11894. else
  11895. banTime = time(NULL) + g_config.getNumber(ConfigManager::BAN_LENGTH);
  11896.  
  11897. if(!IOBan::getInstance()->addAccountBanishment(account.number, banTime, reason, action,
  11898. comment, player->getGUID(), target->getGUID()))
  11899. {
  11900. account.warnings--;
  11901. player->sendCancel("Account is already banned.");
  11902. return false;
  11903. }
  11904.  
  11905. if(deny)
  11906. break;
  11907.  
  11908. banTime = -1;
  11909. PlayerBan_t tmp = (PlayerBan_t)g_config.getNumber(ConfigManager::NAME_REPORT_TYPE);
  11910. if(tmp == PLAYERBAN_BANISHMENT)
  11911. {
  11912. if(!length[1])
  11913. banTime = time(NULL) + g_config.getNumber(ConfigManager::FINALBAN_LENGTH);
  11914. else
  11915. banTime = length[1];
  11916. }
  11917.  
  11918. IOBan::getInstance()->addPlayerBanishment(target->getGUID(), banTime, reason, action, comment,
  11919. player->getGUID(), tmp);
  11920. break;
  11921. }
  11922.  
  11923. case ACTION_BANFINAL:
  11924. case ACTION_BANREPORTFINAL:
  11925. {
  11926. bool allow = action == ACTION_BANREPORTFINAL;
  11927. int64_t banTime = -1;
  11928.  
  11929. account.warnings++;
  11930. if(account.warnings >= g_config.getNumber(ConfigManager::WARNINGS_TO_DELETION))
  11931. action = ACTION_DELETION;
  11932. else if(length[0])
  11933. banTime = length[0];
  11934. else
  11935. banTime = time(NULL) + g_config.getNumber(ConfigManager::FINALBAN_LENGTH);
  11936.  
  11937. if(!IOBan::getInstance()->addAccountBanishment(account.number, banTime, reason, action,
  11938. comment, player->getGUID(), target->getGUID()))
  11939. {
  11940. account.warnings--;
  11941. player->sendCancel("Account is already banned.");
  11942. return false;
  11943. }
  11944.  
  11945. if(action != ACTION_DELETION)
  11946. account.warnings += (g_config.getNumber(ConfigManager::WARNINGS_TO_FINALBAN) - 1);
  11947.  
  11948. if(allow)
  11949. IOBan::getInstance()->addPlayerBanishment(target->getGUID(), -1, reason, action, comment,
  11950. player->getGUID(), (PlayerBan_t)g_config.getNumber(
  11951. ConfigManager::NAME_REPORT_TYPE));
  11952.  
  11953. break;
  11954. }
  11955.  
  11956. case ACTION_DELETION:
  11957. {
  11958. //completely internal
  11959. account.warnings++;
  11960. if(!IOBan::getInstance()->addAccountBanishment(account.number, -1, reason, ACTION_DELETION,
  11961. comment, player->getGUID(), target->getGUID()))
  11962. {
  11963. account.warnings--;
  11964. player->sendCancel("Account is currently banned or already deleted.");
  11965. return false;
  11966. }
  11967.  
  11968. break;
  11969. }
  11970.  
  11971. default:
  11972. // these just shouldn't occur in rvw
  11973. return false;
  11974. }
  11975.  
  11976. if(ipBanishment && target->getIP())
  11977. {
  11978. if(!length[2])
  11979. length[2] = time(NULL) + g_config.getNumber(ConfigManager::IPBANISHMENT_LENGTH);
  11980.  
  11981. IOBan::getInstance()->addIpBanishment(target->getIP(), length[2], reason, comment, player->getGUID(), 0xFFFFFFFF);
  11982. }
  11983.  
  11984. if(kickAction == FULL_KICK)
  11985. IOBan::getInstance()->removeNotations(account.number);
  11986.  
  11987. std::stringstream ss;
  11988. if(g_config.getBool(ConfigManager::BROADCAST_BANISHMENTS))
  11989. ss << player->getName() << " has";
  11990. else
  11991. ss << "You have";
  11992.  
  11993. ss << " taken the action \"" << getAction(action, ipBanishment) << "\"";
  11994. switch(action)
  11995. {
  11996. case ACTION_NOTATION:
  11997. {
  11998. ss << " (" << (g_config.getNumber(ConfigManager::NOTATIONS_TO_BAN) - IOBan::getInstance()->getNotationsCount(
  11999. account.number)) << " left to banishment)";
  12000. break;
  12001. }
  12002. case ACTION_STATEMENT:
  12003. {
  12004. ss << " for the statement: \"" << statement << "\"";
  12005. break;
  12006. }
  12007. default:
  12008. break;
  12009. }
  12010.  
  12011. ss << " against: " << name << " (Warnings: " << account.warnings << "), with reason: \"" << getReason(
  12012. reason) << "\", and comment: \"" << comment << "\".";
  12013. if(g_config.getBool(ConfigManager::BROADCAST_BANISHMENTS))
  12014. broadcastMessage(ss.str(), MSG_STATUS_WARNING);
  12015. else
  12016. player->sendTextMessage(MSG_STATUS_CONSOLE_RED, ss.str());
  12017.  
  12018. if(target->isVirtual())
  12019. {
  12020. delete target;
  12021. target = NULL;
  12022. }
  12023. else if(kickAction > NONE)
  12024. {
  12025. char buffer[30];
  12026. sprintf(buffer, "You have been %s.", (kickAction > KICK ? "banished" : "namelocked"));
  12027. target->sendTextMessage(MSG_INFO_DESCR, buffer);
  12028.  
  12029. addMagicEffect(target->getPosition(), MAGIC_EFFECT_WRAPS_GREEN);
  12030. Scheduler::getInstance().addEvent(createSchedulerTask(1000, boost::bind(
  12031. &Game::kickPlayer, this, target->getID(), false)));
  12032. }
  12033.  
  12034. IOLoginData::getInstance()->saveAccount(account);
  12035. return true;
  12036. }
  12037.  
  12038. void Game::kickPlayer(uint32_t playerId, bool displayEffect)
  12039. {
  12040. Player* player = getPlayerByID(playerId);
  12041. if(!player || player->isRemoved())
  12042. return;
  12043.  
  12044. player->kick(displayEffect, true);
  12045. }
  12046.  
  12047. bool Game::broadcastMessage(const std::string& text, MessageClasses type)
  12048. {
  12049. if(type < MSG_CLASS_FIRST || type > MSG_CLASS_LAST)
  12050. return false;
  12051.  
  12052. std::clog << "> Broadcasted message: \"" << text << "\"." << std::endl;
  12053. for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
  12054. it->second->sendTextMessage(type, text);
  12055.  
  12056. return true;
  12057. }
  12058.  
  12059. Position Game::getClosestFreeTile(Creature* creature, Position pos, bool extended/* = false*/, bool ignoreHouse/* = true*/)
  12060. {
  12061. PairVector relList;
  12062. relList.push_back(PositionPair(0, 0));
  12063. relList.push_back(PositionPair(-1, -1));
  12064. relList.push_back(PositionPair(-1, 0));
  12065. relList.push_back(PositionPair(-1, 1));
  12066. relList.push_back(PositionPair(0, -1));
  12067. relList.push_back(PositionPair(0, 1));
  12068. relList.push_back(PositionPair(1, -1));
  12069. relList.push_back(PositionPair(1, 0));
  12070. relList.push_back(PositionPair(1, 1));
  12071.  
  12072. if(extended)
  12073. {
  12074. relList.push_back(PositionPair(-2, 0));
  12075. relList.push_back(PositionPair(0, -2));
  12076. relList.push_back(PositionPair(0, 2));
  12077. relList.push_back(PositionPair(2, 0));
  12078. }
  12079.  
  12080. std::random_shuffle(relList.begin() + 1, relList.end());
  12081. if(Player* player = creature->getPlayer())
  12082. {
  12083. for(PairVector::iterator it = relList.begin(); it != relList.end(); ++it)
  12084. {
  12085. Tile* tile = map->getTile(Position((pos.x + it->first), (pos.y + it->second), pos.z));
  12086. if(!tile || !tile->ground)
  12087. continue;
  12088.  
  12089. ReturnValue ret = tile->__queryAdd(0, player, 1, FLAG_IGNOREBLOCKITEM);
  12090. if(ret == RET_NOTENOUGHROOM || (ret == RET_NOTPOSSIBLE && !player->hasCustomFlag(PlayerCustomFlag_CanMoveAnywhere))
  12091. || (ret == RET_PLAYERISNOTINVITED && !ignoreHouse && !player->hasFlag(PlayerFlag_CanEditHouses)))
  12092. continue;
  12093.  
  12094. return tile->getPosition();
  12095. }
  12096. }
  12097. else
  12098. {
  12099. for(PairVector::iterator it = relList.begin(); it != relList.end(); ++it)
  12100. {
  12101. Tile* tile = NULL;
  12102. if((tile = map->getTile(Position((pos.x + it->first), (pos.y + it->second), pos.z)))
  12103. && tile->__queryAdd(0, creature, 1, FLAG_IGNOREBLOCKITEM) == RET_NOERROR)
  12104. return tile->getPosition();
  12105. }
  12106. }
  12107.  
  12108. return Position(0, 0, 0);
  12109. }
  12110.  
  12111. std::string Game::getSearchString(const Position& fromPos, const Position& toPos, bool fromIsCreature/* = false*/, bool toIsCreature/* = false*/)
  12112. {
  12113. /*
  12114. * When the position is on same level and 0 to 4 squares away, they are "[toIsCreature: standing] next to you"
  12115. * When the position is on same level and 5 to 100 squares away they are "to the north/west/south/east."
  12116. * When the position is on any level and 101 to 274 squares away they are "far to the north/west/south/east."
  12117. * When the position is on any level and 275+ squares away they are "very far to the north/west/south/east."
  12118. * When the position is not directly north/west/south/east of you they are "((very) far) to the north-west/south-west/south-east/north-east."
  12119. * When the position is on a lower or higher level and 5 to 100 squares away they are "on a lower (or) higher level to the north/west/south/east."
  12120. * When the position is on a lower or higher level and 0 to 4 squares away they are "below (or) above you."
  12121. */
  12122.  
  12123. enum distance_t
  12124. {
  12125. DISTANCE_BESIDE,
  12126. DISTANCE_CLOSE,
  12127. DISTANCE_FAR,
  12128. DISTANCE_VERYFAR
  12129. };
  12130.  
  12131. enum direction_t
  12132. {
  12133. DIR_N, DIR_S, DIR_E, DIR_W,
  12134. DIR_NE, DIR_NW, DIR_SE, DIR_SW
  12135. };
  12136.  
  12137. enum level_t
  12138. {
  12139. LEVEL_HIGHER,
  12140. LEVEL_LOWER,
  12141. LEVEL_SAME
  12142. };
  12143.  
  12144. distance_t distance;
  12145. direction_t direction;
  12146. level_t level;
  12147.  
  12148. int32_t dx = fromPos.x - toPos.x, dy = fromPos.y - toPos.y, dz = fromPos.z - toPos.z;
  12149. if(dz > 0)
  12150. level = LEVEL_HIGHER;
  12151. else if(dz < 0)
  12152. level = LEVEL_LOWER;
  12153. else
  12154. level = LEVEL_SAME;
  12155.  
  12156. if(std::abs(dx) < 5 && std::abs(dy) < 5)
  12157. distance = DISTANCE_BESIDE;
  12158. else
  12159. {
  12160. int32_t tmp = dx * dx + dy * dy;
  12161. if(tmp < 10000)
  12162. distance = DISTANCE_CLOSE;
  12163. else if(tmp < 75625)
  12164. distance = DISTANCE_FAR;
  12165. else
  12166. distance = DISTANCE_VERYFAR;
  12167. }
  12168.  
  12169. float tan;
  12170. if(dx != 0)
  12171. tan = (float)dy / (float)dx;
  12172. else
  12173. tan = 10.;
  12174.  
  12175. if(std::abs(tan) < 0.4142)
  12176. {
  12177. if(dx > 0)
  12178. direction = DIR_W;
  12179. else
  12180. direction = DIR_E;
  12181. }
  12182. else if(std::abs(tan) < 2.4142)
  12183. {
  12184. if(tan > 0)
  12185. {
  12186. if(dy > 0)
  12187. direction = DIR_NW;
  12188. else
  12189. direction = DIR_SE;
  12190. }
  12191. else
  12192. {
  12193. if(dx > 0)
  12194. direction = DIR_SW;
  12195. else
  12196. direction = DIR_NE;
  12197. }
  12198. }
  12199. else
  12200. {
  12201. if(dy > 0)
  12202. direction = DIR_N;
  12203. else
  12204. direction = DIR_S;
  12205. }
  12206.  
  12207. std::stringstream ss;
  12208. switch(distance)
  12209. {
  12210. case DISTANCE_BESIDE:
  12211. {
  12212. switch(level)
  12213. {
  12214. case LEVEL_SAME:
  12215. {
  12216. ss << "is ";
  12217. if(toIsCreature)
  12218. ss << "standing ";
  12219.  
  12220. ss << "next to you";
  12221. break;
  12222. }
  12223.  
  12224. case LEVEL_HIGHER:
  12225. {
  12226. ss << "is above ";
  12227. if(fromIsCreature)
  12228. ss << "you";
  12229.  
  12230. break;
  12231. }
  12232.  
  12233. case LEVEL_LOWER:
  12234. {
  12235. ss << "is below ";
  12236. if(fromIsCreature)
  12237. ss << "you";
  12238.  
  12239. break;
  12240. }
  12241.  
  12242. default:
  12243. break;
  12244. }
  12245.  
  12246. break;
  12247. }
  12248.  
  12249. case DISTANCE_CLOSE:
  12250. {
  12251. switch(level)
  12252. {
  12253. case LEVEL_SAME:
  12254. ss << "is to the";
  12255. break;
  12256. case LEVEL_HIGHER:
  12257. ss << "is on a higher level to the";
  12258. break;
  12259. case LEVEL_LOWER:
  12260. ss << "is on a lower level to the";
  12261. break;
  12262. default:
  12263. break;
  12264. }
  12265.  
  12266. break;
  12267. }
  12268.  
  12269. case DISTANCE_FAR:
  12270. ss << "is far to the";
  12271. break;
  12272.  
  12273. case DISTANCE_VERYFAR:
  12274. ss << "is very far to the";
  12275. break;
  12276.  
  12277. default:
  12278. break;
  12279. }
  12280.  
  12281. if(distance != DISTANCE_BESIDE)
  12282. {
  12283. ss << " ";
  12284. switch(direction)
  12285. {
  12286. case DIR_N:
  12287. ss << "north";
  12288. break;
  12289.  
  12290. case DIR_S:
  12291. ss << "south";
  12292. break;
  12293.  
  12294. case DIR_E:
  12295. ss << "east";
  12296. break;
  12297.  
  12298. case DIR_W:
  12299. ss << "west";
  12300. break;
  12301.  
  12302. case DIR_NE:
  12303. ss << "north-east";
  12304. break;
  12305.  
  12306. case DIR_NW:
  12307. ss << "north-west";
  12308. break;
  12309.  
  12310. case DIR_SE:
  12311. ss << "south-east";
  12312. break;
  12313.  
  12314. case DIR_SW:
  12315. ss << "south-west";
  12316. break;
  12317.  
  12318. default:
  12319. break;
  12320. }
  12321. }
  12322.  
  12323. return ss.str();
  12324. }
  12325.  
  12326. double Game::getExperienceStage(uint32_t level, double divider/* = 1.*/)
  12327. {
  12328. if(!g_config.getBool(ConfigManager::EXPERIENCE_STAGES))
  12329. return g_config.getDouble(ConfigManager::RATE_EXPERIENCE) * divider;
  12330.  
  12331. if(lastStageLevel && level >= lastStageLevel)
  12332. return stages[lastStageLevel] * divider;
  12333.  
  12334. return stages[level] * divider;
  12335. }
  12336.  
  12337. bool Game::loadExperienceStages()
  12338. {
  12339. if(!g_config.getBool(ConfigManager::EXPERIENCE_STAGES))
  12340. {
  12341. if(!stages.empty())
  12342. stages.clear();
  12343.  
  12344. return true;
  12345. }
  12346.  
  12347. xmlDocPtr doc = xmlParseFile(getFilePath(FILE_TYPE_XML, "stages.xml").c_str());
  12348. if(!doc)
  12349. {
  12350. std::clog << "[Warning - Game::loadExperienceStages] Cannot load stages file." << std::endl;
  12351. std::clog << getLastXMLError() << std::endl;
  12352. return false;
  12353. }
  12354.  
  12355. xmlNodePtr q, p, root = xmlDocGetRootElement(doc);
  12356. if(xmlStrcmp(root->name, (const xmlChar*)"stages"))
  12357. {
  12358. std::clog << "[Error - Game::loadExperienceStages] Malformed stages file" << std::endl;
  12359. xmlFreeDoc(doc);
  12360. return false;
  12361. }
  12362.  
  12363. int32_t intValue, low = 0, high = 0;
  12364. float floatValue, mul = 1.0f, defStageMultiplier;
  12365. std::string strValue;
  12366.  
  12367. lastStageLevel = 0;
  12368. stages.clear();
  12369.  
  12370. q = root->children;
  12371. while(q)
  12372. {
  12373. if(!xmlStrcmp(q->name, (const xmlChar*)"world"))
  12374. {
  12375. if(readXMLString(q, "id", strValue))
  12376. {
  12377. IntegerVec intVector;
  12378. if(!parseIntegerVec(strValue, intVector) || std::find(intVector.begin(),
  12379. intVector.end(), g_config.getNumber(ConfigManager::WORLD_ID)) == intVector.end())
  12380. {
  12381. q = q->next;
  12382. continue;
  12383. }
  12384. }
  12385.  
  12386. defStageMultiplier = 1.0f;
  12387. if(readXMLFloat(q, "multiplier", floatValue))
  12388. defStageMultiplier = floatValue;
  12389.  
  12390. p = q->children;
  12391. while(p)
  12392. {
  12393. if(!xmlStrcmp(p->name, (const xmlChar*)"stage"))
  12394. {
  12395. low = 1;
  12396. if(readXMLInteger(p, "minlevel", intValue) || readXMLInteger(p, "minLevel", intValue))
  12397. low = intValue;
  12398.  
  12399. high = 0;
  12400. if(readXMLInteger(p, "maxlevel", intValue) || readXMLInteger(p, "maxLevel", intValue))
  12401. high = intValue;
  12402. else
  12403. lastStageLevel = low;
  12404.  
  12405. mul = 1.0f;
  12406. if(readXMLFloat(p, "multiplier", floatValue))
  12407. mul = floatValue;
  12408.  
  12409. mul *= defStageMultiplier;
  12410. if(lastStageLevel && lastStageLevel == (uint32_t)low)
  12411. stages[lastStageLevel] = mul;
  12412. else
  12413. {
  12414. for(int32_t i = low; i <= high; i++)
  12415. stages[i] = mul;
  12416. }
  12417. }
  12418.  
  12419. p = p->next;
  12420. }
  12421. }
  12422.  
  12423. if(!xmlStrcmp(q->name, (const xmlChar*)"stage"))
  12424. {
  12425. low = 1;
  12426. if(readXMLInteger(q, "minlevel", intValue))
  12427. low = intValue;
  12428. else
  12429.  
  12430. high = 0;
  12431. if(readXMLInteger(q, "maxlevel", intValue))
  12432. high = intValue;
  12433. else
  12434. lastStageLevel = low;
  12435.  
  12436. mul = 1.0f;
  12437. if(readXMLFloat(q, "multiplier", floatValue))
  12438. mul = floatValue;
  12439.  
  12440. if(lastStageLevel && lastStageLevel == (uint32_t)low)
  12441. stages[lastStageLevel] = mul;
  12442. else
  12443. {
  12444. for(int32_t i = low; i <= high; i++)
  12445. stages[i] = mul;
  12446. }
  12447. }
  12448.  
  12449. q = q->next;
  12450. }
  12451.  
  12452. xmlFreeDoc(doc);
  12453. return true;
  12454. }
  12455.  
  12456. bool Game::reloadHighscores()
  12457. {
  12458. lastHighscoreCheck = time(NULL);
  12459. for(int16_t i = 0; i < 9; ++i)
  12460. highscoreStorage[i] = getHighscore(i);
  12461.  
  12462. return true;
  12463. }
  12464.  
  12465. void Game::checkHighscores()
  12466. {
  12467. reloadHighscores();
  12468. uint32_t tmp = g_config.getNumber(ConfigManager::HIGHSCORES_UPDATETIME) * 60 * 1000;
  12469. if(tmp <= 0)
  12470. return;
  12471.  
  12472. Scheduler::getInstance().addEvent(createSchedulerTask(tmp, boost::bind(&Game::checkHighscores, this)));
  12473. }
  12474.  
  12475. std::string Game::getHighscoreString(uint16_t skill)
  12476. {
  12477. Highscore hs = highscoreStorage[skill];
  12478. std::stringstream ss;
  12479. ss << "Highscore for " << getSkillName(skill) << "\n\nRank Level - Player Name";
  12480. for(uint32_t i = 0; i < hs.size(); i++)
  12481. ss << "\n" << (i + 1) << ". " << hs[i].second << " - " << hs[i].first;
  12482.  
  12483. ss << "\n\nLast updated on:\n" << std::ctime(&lastHighscoreCheck);
  12484. return ss.str();
  12485. }
  12486.  
  12487. Highscore Game::getHighscore(uint16_t skill)
  12488. {
  12489. Highscore hs;
  12490.  
  12491. Database* db = Database::getInstance();
  12492. DBResult* result;
  12493.  
  12494. DBQuery query;
  12495. if(skill >= SKILL__MAGLEVEL)
  12496. {
  12497. if(skill == SKILL__MAGLEVEL)
  12498. query << "SELECT `maglevel`, `name` FROM `players` ORDER BY `maglevel` DESC, `manaspent` DESC LIMIT " << g_config.getNumber(ConfigManager::HIGHSCORES_TOP);
  12499. else
  12500. query << "SELECT `level`, `name` FROM `players` ORDER BY `level` DESC, `experience` DESC LIMIT " << g_config.getNumber(ConfigManager::HIGHSCORES_TOP);
  12501.  
  12502. if(!(result = db->storeQuery(query.str())))
  12503. return hs;
  12504.  
  12505. do
  12506. {
  12507. uint32_t level;
  12508. if(skill == SKILL__MAGLEVEL)
  12509. level = result->getDataInt("maglevel");
  12510. else
  12511. level = result->getDataInt("level");
  12512.  
  12513. std::string name = result->getDataString("name");
  12514. if(name.length() > 0)
  12515. hs.push_back(std::make_pair(name, level));
  12516. }
  12517. while(result->next());
  12518. result->free();
  12519. }
  12520. else
  12521. {
  12522. query << "SELECT `player_skills`.`value`, `players`.`name` FROM `player_skills`,`players` WHERE `player_skills`.`skillid`=" << skill << " AND `player_skills`.`player_id`=`players`.`id` ORDER BY `player_skills`.`value` DESC, `player_skills`.`count` DESC LIMIT " << g_config.getNumber(ConfigManager::HIGHSCORES_TOP);
  12523. if(!(result = db->storeQuery(query.str())))
  12524. return hs;
  12525.  
  12526. do
  12527. {
  12528. std::string name = result->getDataString("name");
  12529. if(name.length() > 0)
  12530. hs.push_back(std::make_pair(name, result->getDataInt("value")));
  12531. }
  12532. while(result->next());
  12533. result->free();
  12534. }
  12535.  
  12536. return hs;
  12537. }
  12538.  
  12539. int32_t Game::getMotdId()
  12540. {
  12541. if(lastMotd == g_config.getString(ConfigManager::MOTD))
  12542. return lastMotdId;
  12543.  
  12544. lastMotd = g_config.getString(ConfigManager::MOTD);
  12545. Database* db = Database::getInstance();
  12546.  
  12547. DBQuery query;
  12548. query << "INSERT INTO `server_motd` (`id`, `world_id`, `text`) VALUES (" << ++lastMotdId << ", " << g_config.getNumber(ConfigManager::WORLD_ID) << ", " << db->escapeString(lastMotd) << ")";
  12549. if(db->query(query.str()))
  12550. return lastMotdId;
  12551.  
  12552. return --lastMotdId;
  12553. }
  12554.  
  12555. void Game::loadMotd()
  12556. {
  12557. Database* db = Database::getInstance();
  12558. DBQuery query;
  12559. query << "SELECT `id`, `text` FROM `server_motd` WHERE `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << " ORDER BY `id` DESC LIMIT 1";
  12560.  
  12561. DBResult* result;
  12562. if(!(result = db->storeQuery(query.str())))
  12563. {
  12564. std::clog << "> ERROR: Failed to load motd!" << std::endl;
  12565. lastMotdId = random_range(5, 500);
  12566. return;
  12567. }
  12568.  
  12569. lastMotdId = result->getDataInt("id");
  12570. lastMotd = result->getDataString("text");
  12571. result->free();
  12572. }
  12573.  
  12574. void Game::checkPlayersRecord(Player* player)
  12575. {
  12576. uint32_t count = getPlayersOnline();
  12577. if(count <= playersRecord)
  12578. return;
  12579.  
  12580. GlobalEventMap recordEvents = g_globalEvents->getEventMap(GLOBALEVENT_RECORD);
  12581. for(GlobalEventMap::iterator it = recordEvents.begin(); it != recordEvents.end(); ++it)
  12582. it->second->executeRecord(count, playersRecord, player);
  12583.  
  12584. playersRecord = count;
  12585. }
  12586.  
  12587. void Game::loadPlayersRecord()
  12588. {
  12589. Database* db = Database::getInstance();
  12590. DBQuery query;
  12591. query << "SELECT `record` FROM `server_record` WHERE `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << " ORDER BY `timestamp` DESC LIMIT 1";
  12592.  
  12593. DBResult* result;
  12594. if(!(result = db->storeQuery(query.str())))
  12595. {
  12596. std::clog << "> ERROR: Failed to load players record!" << std::endl;
  12597. return;
  12598. }
  12599.  
  12600. playersRecord = result->getDataInt("record");
  12601. result->free();
  12602. }
  12603.  
  12604. bool Game::reloadInfo(ReloadInfo_t reload, uint32_t playerId/* = 0*/)
  12605. {
  12606. bool done = false;
  12607. switch(reload)
  12608. {
  12609. case RELOAD_ACTIONS:
  12610. {
  12611. if(g_actions->reload())
  12612. done = true;
  12613. else
  12614. std::clog << "[Error - Game::reloadInfo] Failed to reload actions." << std::endl;
  12615.  
  12616. break;
  12617. }
  12618.  
  12619. case RELOAD_CHAT:
  12620. {
  12621. if(g_chat.reload())
  12622. done = true;
  12623. else
  12624. std::clog << "[Error - Game::reloadInfo] Failed to reload chat." << std::endl;
  12625.  
  12626. break;
  12627. }
  12628.  
  12629. case RELOAD_CONFIG:
  12630. {
  12631. if(g_config.reload())
  12632. done = true;
  12633. else
  12634. std::clog << "[Error - Game::reloadInfo] Failed to reload config." << std::endl;
  12635.  
  12636. break;
  12637. }
  12638.  
  12639. case RELOAD_CREATUREEVENTS:
  12640. {
  12641. if(g_creatureEvents->reload())
  12642. done = true;
  12643. else
  12644. std::clog << "[Error - Game::reloadInfo] Failed to reload creature events." << std::endl;
  12645.  
  12646. break;
  12647. }
  12648.  
  12649. case RELOAD_GAMESERVERS:
  12650. {
  12651. #ifdef __LOGIN_SERVER__
  12652. if(GameServers::getInstance()->reload())
  12653. done = true;
  12654. else
  12655. std::clog << "[Error - Game::reloadInfo] Failed to reload game servers." << std::endl;
  12656.  
  12657. #endif
  12658. break;
  12659. }
  12660.  
  12661. case RELOAD_GLOBALEVENTS:
  12662. {
  12663. if(g_globalEvents->reload())
  12664. done = true;
  12665. else
  12666. std::clog << "[Error - Game::reloadInfo] Failed to reload global events." << std::endl;
  12667.  
  12668. break;
  12669. }
  12670.  
  12671. case RELOAD_GROUPS:
  12672. {
  12673. /*if(Groups::getInstance()->reload())
  12674. done = true;
  12675. else
  12676. std::clog << "[Error - Game::reloadInfo] Failed to reload groups." << std::endl;*/
  12677.  
  12678. break;
  12679. }
  12680.  
  12681. case RELOAD_HIGHSCORES:
  12682. {
  12683. if(reloadHighscores())
  12684. done = true;
  12685. else
  12686. std::clog << "[Error - Game::reloadInfo] Failed to reload highscores." << std::endl;
  12687.  
  12688. break;
  12689. }
  12690.  
  12691. case RELOAD_ITEMS:
  12692. {
  12693. //TODO
  12694. std::clog << "[Notice - Game::reloadInfo] Reload type does not work." << std::endl;
  12695. done = true;
  12696. break;
  12697. }
  12698.  
  12699. case RELOAD_MONSTERS:
  12700. {
  12701. if(g_monsters.reload())
  12702. done = true;
  12703. else
  12704. std::clog << "[Error - Game::reloadInfo] Failed to reload monsters." << std::endl;
  12705.  
  12706. break;
  12707. }
  12708.  
  12709. case RELOAD_MOVEEVENTS:
  12710. {
  12711. if(g_moveEvents->reload())
  12712. done = true;
  12713. else
  12714. std::clog << "[Error - Game::reloadInfo] Failed to reload move events." << std::endl;
  12715.  
  12716. break;
  12717. }
  12718.  
  12719. case RELOAD_NPCS:
  12720. {
  12721. g_npcs.reload();
  12722. done = true;
  12723. break;
  12724. }
  12725.  
  12726. case RELOAD_OUTFITS:
  12727. {
  12728. //TODO
  12729. std::clog << "[Notice - Game::reloadInfo] Reload type does not work." << std::endl;
  12730. done = true;
  12731. break;
  12732. }
  12733.  
  12734. case RELOAD_QUESTS:
  12735. {
  12736. if(Quests::getInstance()->reload())
  12737. done = true;
  12738. else
  12739. std::clog << "[Error - Game::reloadInfo] Failed to reload quests." << std::endl;
  12740.  
  12741. break;
  12742. }
  12743.  
  12744. case RELOAD_RAIDS:
  12745. {
  12746. if(!Raids::getInstance()->reload())
  12747. std::clog << "[Error - Game::reloadInfo] Failed to reload raids." << std::endl;
  12748. else if(!Raids::getInstance()->startup())
  12749. std::clog << "[Error - Game::reloadInfo] Failed to startup raids when reloading." << std::endl;
  12750. else
  12751. done = true;
  12752.  
  12753. break;
  12754. }
  12755.  
  12756. case RELOAD_SPELLS:
  12757. {
  12758. if(!g_spells->reload())
  12759. std::clog << "[Error - Game::reloadInfo] Failed to reload spells." << std::endl;
  12760. else if(!g_monsters.reload())
  12761. std::clog << "[Error - Game::reloadInfo] Failed to reload monsters when reloading spells." << std::endl;
  12762. else
  12763. done = true;
  12764.  
  12765. break;
  12766. }
  12767.  
  12768. case RELOAD_STAGES:
  12769. {
  12770. if(loadExperienceStages())
  12771. done = true;
  12772. else
  12773. std::clog << "[Error - Game::reloadInfo] Failed to reload stages." << std::endl;
  12774.  
  12775. break;
  12776. }
  12777.  
  12778. case RELOAD_TALKACTIONS:
  12779. {
  12780. if(g_talkActions->reload())
  12781. done = true;
  12782. else
  12783. std::clog << "[Error - Game::reloadInfo] Failed to reload talk actions." << std::endl;
  12784.  
  12785. break;
  12786. }
  12787.  
  12788. case RELOAD_VOCATIONS:
  12789. {
  12790. if(Vocations::getInstance()->reload())
  12791. done = true;
  12792. else
  12793. std::clog << "[Notice - Game::reloadInfo] Reload type does not work." << std::endl;
  12794.  
  12795. break;
  12796. }
  12797.  
  12798. case RELOAD_WEAPONS:
  12799. {
  12800. //TODO
  12801. std::clog << "[Notice - Game::reloadInfo] Reload type does not work." << std::endl;
  12802. done = true;
  12803. break;
  12804. }
  12805.  
  12806. case RELOAD_ALL:
  12807. {
  12808. done = true;
  12809. for(int32_t i = RELOAD_FIRST; i <= RELOAD_LAST; i++)
  12810. {
  12811. if(!reloadInfo((ReloadInfo_t)i) && done)
  12812. done = false;
  12813. }
  12814.  
  12815. break;
  12816. }
  12817.  
  12818. default:
  12819. {
  12820. std::clog << "[Warning - Game::reloadInfo] Reload type not found." << std::endl;
  12821. break;
  12822. }
  12823. }
  12824.  
  12825. if(reload != RELOAD_MODS && !ScriptManager::getInstance()->reloadMods())
  12826. std::clog << "[Error - Game::reloadInfo] Failed to reload mods." << std::endl;
  12827.  
  12828. if(!playerId)
  12829. return done;
  12830.  
  12831. Player* player = getPlayerByID(playerId);
  12832. if(!player || player->isRemoved())
  12833. return done;
  12834.  
  12835. if(done)
  12836. {
  12837. player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "Reloaded successfully.");
  12838. return true;
  12839. }
  12840.  
  12841. if(reload == RELOAD_ALL)
  12842. player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "Failed to reload some parts.");
  12843. else
  12844. player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "Failed to reload.");
  12845.  
  12846. return false;
  12847. }
  12848.  
  12849. void Game::prepareGlobalSave(uint8_t minutes)
  12850. {
  12851. std::clog << "Game::prepareGlobalSave in " << (uint32_t)minutes << " minutes" << std::endl;
  12852. switch(minutes)
  12853. {
  12854. case 5:
  12855. setGameState(GAMESTATE_CLOSING);
  12856. broadcastMessage("Server is going down for a global save within 5 minutes. Please logout.", MSG_STATUS_WARNING);
  12857. Scheduler::getInstance().addEvent(createSchedulerTask(2 * 60000, boost::bind(&Game::prepareGlobalSave, this, 3)));
  12858. break;
  12859.  
  12860. case 3:
  12861. broadcastMessage("Server is going down for a global save within 3 minutes. Please logout.", MSG_STATUS_WARNING);
  12862. Scheduler::getInstance().addEvent(createSchedulerTask(2 * 60000, boost::bind(&Game::prepareGlobalSave, this, 1)));
  12863. break;
  12864.  
  12865. case 1:
  12866. broadcastMessage("Server is going down for a global save in one minute, please logout!", MSG_STATUS_WARNING);
  12867. Scheduler::getInstance().addEvent(createSchedulerTask(60000, boost::bind(&Game::prepareGlobalSave, this, 0)));
  12868. break;
  12869.  
  12870. case 0:
  12871. globalSave();
  12872. break;
  12873.  
  12874. default:
  12875. if(minutes > 5)
  12876. Scheduler::getInstance().addEvent(createSchedulerTask((minutes - 5) * 1000, boost::bind(&Game::prepareGlobalSave, this, 5)));
  12877. break;
  12878. }
  12879. }
  12880.  
  12881. void Game::globalSave()
  12882. {
  12883. bool close = g_config.getBool(ConfigManager::SHUTDOWN_AT_GLOBALSAVE);
  12884. if(close) // check are we're going to close the server
  12885. setGameState(GAMESTATE_CLOSING);
  12886.  
  12887. // call the global event
  12888. g_globalEvents->execute(GLOBALEVENT_GLOBALSAVE);
  12889. if(close)
  12890. {
  12891. //shutdown server
  12892. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::setGameState, this, GAMESTATE_SHUTDOWN)));
  12893. return;
  12894. }
  12895.  
  12896. //close server
  12897. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::setGameState, this, GAMESTATE_CLOSED)));
  12898. //clean map if configured to
  12899. if(g_config.getBool(ConfigManager::CLEAN_MAP_AT_GLOBALSAVE))
  12900. {
  12901. uint32_t dummy;
  12902. cleanMap(dummy);
  12903. }
  12904.  
  12905. //pay houses
  12906. Houses::getInstance()->payHouses();
  12907. //clear temporial and expired bans
  12908. IOBan::getInstance()->clearTemporials();
  12909. //remove premium days globally if configured to
  12910. if(g_config.getBool(ConfigManager::INIT_PREMIUM_UPDATE))
  12911. IOLoginData::getInstance()->updatePremiumDays();
  12912.  
  12913. //reload everything
  12914. reloadInfo(RELOAD_ALL);
  12915.  
  12916. //prepare for next global save after 24 hours
  12917. Scheduler::getInstance().addEvent(createSchedulerTask(((24 * 60 * 60) - (5 * 60)) * 1000, boost::bind(&Game::prepareGlobalSave, this, 5)));
  12918. //open server
  12919. Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::setGameState, this, GAMESTATE_NORMAL)));
  12920. }
  12921.  
  12922. void Game::shutdown()
  12923. {
  12924. std::clog << "Preparing";
  12925. Scheduler::getInstance().shutdown();
  12926. std::clog << " to";
  12927. Dispatcher::getInstance().shutdown();
  12928. std::clog << " shutdown";
  12929. Spawns::getInstance()->clear();
  12930. std::clog << " the";
  12931. Raids::getInstance()->clear();
  12932. std::clog << " server";
  12933. cleanup();
  12934. std::clog << "- done." << std::endl;
  12935. if (services)
  12936. services->stop();
  12937.  
  12938. #ifndef dont_force_shutdown
  12939. exit(-1);
  12940. #endif
  12941. }
  12942.  
  12943. void Game::cleanup()
  12944. {
  12945. //free memory
  12946. for(std::vector<Thing*>::iterator it = releaseThings.begin(); it != releaseThings.end(); ++it)
  12947. (*it)->unRef();
  12948.  
  12949. releaseThings.clear();
  12950. for(DecayList::iterator it = toDecayItems.begin(); it != toDecayItems.end(); ++it)
  12951. {
  12952. int32_t dur = (*it)->getDuration();
  12953. if(dur >= EVENT_DECAYINTERVAL * EVENT_DECAYBUCKETS)
  12954. decayItems[lastBucket].push_back(*it);
  12955. else
  12956. decayItems[(lastBucket + 1 + (*it)->getDuration() / 1000) % EVENT_DECAYBUCKETS].push_back(*it);
  12957. }
  12958.  
  12959. toDecayItems.clear();
  12960. }
  12961.  
  12962. void Game::freeThing(Thing* thing)
  12963. {
  12964. releaseThings.push_back(thing);
  12965. }
  12966.  
  12967. void Game::showHotkeyUseMessage(Player* player, Item* item)
  12968. {
  12969. const ItemType& it = Item::items[item->getID()];
  12970. uint32_t count = player->__getItemTypeCount(item->getID(), item->isFluidContainer() ? item->getFluidType() : -1);
  12971.  
  12972. std::stringstream stream;
  12973. if(!it.showCount)
  12974. stream << "Using one of " << it.name << "...";
  12975. else if(count == 1)
  12976. stream << "Using the last " << it.name.c_str() << "...";
  12977. else
  12978. stream << "Using one of " << count << " " << it.pluralName.c_str() << "...";
  12979.  
  12980. player->sendTextMessage(MSG_INFO_DESCR, stream.str().c_str());
  12981. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement