Advertisement
Guest User

reverseenginning

a guest
Apr 22nd, 2014
415
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 106.65 KB | None | 0 0
  1. void __usercall ChatProcessor(int a1<eax>, time_t a2<esi:edi>, PLAYER *player, int a4, int arenaPlayerIndex, const char *ChatText, char a7)
  2. {
  3.   void *v7; // esp@1
  4.   const char *v8; // ebx@1
  5.   PLAYER *v9; // ebp@1
  6.   int v10; // edi@5
  7.   PLAYER *v11; // edx@6
  8.   int v12; // ecx@9
  9.   int v13; // esi@17
  10.   int v14; // eax@33
  11.   const char v15; // al@36
  12.   const char *v16; // ebx@45
  13.   PLAYER *v17; // eax@50
  14.   int v18; // esi@51
  15.   char *v19; // ecx@54
  16.   int v20; // edx@56
  17.   unsigned int v21; // eax@61
  18.   signed int v22; // ebx@61
  19.   ARENA *v23; // eax@63
  20.   ARENA *v24; // edx@63
  21.   int v25; // ecx@63
  22.   int v26; // esi@64
  23.   signed int v27; // edi@65
  24.   int v28; // eax@66
  25.   ARENA *v29; // ecx@66
  26.   int v30; // esi@69
  27.   int v31; // edi@71
  28.   int v32; // esi@71
  29.   signed int v33; // ecx@74
  30.   int v34; // eax@75
  31.   char *v35; // edi@78
  32.   signed int v36; // ecx@78
  33.   signed int v37; // ecx@81
  34.   const void *v38; // esi@81
  35.   char *v39; // edi@81
  36.   unsigned int v40; // edx@81
  37.   signed int v41; // ecx@81
  38.   const char v42; // al@89
  39.   const char *v43; // ebx@89
  40.   const char v44; // al@90
  41.   const char v45; // al@96
  42.   const char *v46; // ebx@96
  43.   const char v47; // al@97
  44.   const char v48; // al@103
  45.   const char *v49; // ebx@103
  46.   const char v50; // al@104
  47.   int v51; // ebx@107
  48.   const char *v52; // edx@108
  49.   unsigned int v53; // kr48_4@108
  50.   unsigned int v54; // kr50_4@108
  51.   const char *v55; // edi@108
  52.   unsigned int v56; // kr58_4@110
  53.   const char *v57; // esi@110
  54.   const char *v58; // edi@110
  55.   int v59; // ecx@110
  56.   bool v60; // zf@110
  57.   int v61; // edi@121
  58.   int i; // esi@121
  59.   const char *v63; // eax@122
  60.   signed int v64; // esi@126
  61.   const char *v65; // ebx@134
  62.   PLAYER *v66; // eax@140
  63.   int v67; // edx@141
  64.   int v68; // ecx@141
  65.   PLAYER *v69; // eax@146
  66.   int v70; // edx@147
  67.   int v71; // ecx@147
  68.   char v72; // cl@153
  69.   int v73; // eax@153
  70.   char *j; // edx@153
  71.   char v75; // cl@156
  72.   char v76; // cl@157
  73.   int v77; // eax@157
  74.   char *k; // edx@157
  75.   char v79; // cl@160
  76.   char v80; // cl@161
  77.   int v81; // eax@161
  78.   char *l; // edx@161
  79.   char *v83; // eax@163
  80.   char v84; // al@171
  81.   int v85; // esi@171
  82.   char *m; // ecx@171
  83.   char v87; // al@174
  84.   char v88; // al@175
  85.   int v89; // esi@175
  86.   char *n; // ecx@175
  87.   char v91; // al@180
  88.   int v92; // esi@180
  89.   char *ii; // ecx@180
  90.   const char *v94; // ebx@189
  91.   const char v95; // al@200
  92.   const char *v96; // ebx@200
  93.   const char v97; // al@201
  94.   ARENA *v98; // eax@204
  95.   unsigned int v99; // kr68_4@208
  96.   int v100; // edi@208
  97.   PLAYER **v101; // ebx@209
  98.   int v102; // ebx@215
  99.   PLAYER *v103; // ecx@217
  100.   __int64 v104; // qax@218
  101.   int v105; // ecx@218
  102.   __int64 v106; // qax@218
  103.   int v107; // ST24_4@218
  104.   __int64 v108; // qax@218
  105.   PLAYER *v109; // esi@223
  106.   int v110; // ST24_4@224
  107.   int v111; // ST1C_4@224
  108.   int v112; // ST18_4@224
  109.   char *v113; // eax@224
  110.   ARENA *v114; // eax@226
  111.   signed int v115; // ecx@228
  112.   int v116; // eax@228
  113.   ENCRYPTION *v117; // ecx@230
  114.   int v118; // edi@230
  115.   int v119; // edx@233
  116.   int v120; // edi@233
  117.   unsigned __int64 v121; // st7@233
  118.   int v122; // eax@235
  119.   int v123; // ecx@235
  120.   int v124; // eax@237
  121.   unsigned __int64 v125; // st7@237
  122.   int v126; // ecx@237
  123.   int v127; // edx@239
  124.   int v128; // edi@239
  125.   time_t v129; // ST20_8@242
  126.   signed __int64 v130; // qax@242
  127.   signed int v131; // edi@242
  128.   __int64 v132; // qax@243
  129.   __int64 v133; // ST20_8@243
  130.   signed int v134; // ecx@243
  131.   __int64 v135; // ST18_8@243
  132.   int v136; // ecx@247
  133.   PLAYER *v137; // eax@268
  134.   int v138; // ecx@269
  135.   const char v139; // al@276
  136.   const char *v140; // edi@276
  137.   const char v141; // al@277
  138.   const char v142; // al@279
  139.   __int16 v143; // ax@284
  140.   PLAYER *v144; // edi@289
  141.   ARENA *v145; // eax@292
  142.   int v146; // ecx@292
  143.   signed int v147; // edx@293
  144.   PLAYER *v148; // eax@294
  145.   ARENA *v149; // eax@296
  146.   int v150; // ecx@296
  147.   signed int v151; // edx@297
  148.   PLAYER *v152; // eax@298
  149.   PLAYER *v153; // eax@308
  150.   char *v154; // eax@309
  151.   const char v155; // al@312
  152.   const char *v156; // edi@312
  153.   const char v157; // al@313
  154.   ARENA *v158; // eax@318
  155.   unsigned int v159; // kr88_4@320
  156.   const char v160; // al@323
  157.   const char *v161; // edi@323
  158.   const char v162; // al@324
  159.   const char v163; // al@330
  160.   const char *v164; // edi@330
  161.   const char v165; // al@331
  162.   int v166; // eax@336
  163.   __int16 v167; // ax@342
  164.   PLAYER *v168; // esi@346
  165.   int v169; // edx@350
  166.   const char v170; // al@384
  167.   const char *v171; // edi@384
  168.   const char v172; // al@385
  169.   PLAYER *v173; // esi@392
  170.   int v174; // edx@397
  171.   PLAYER *v175; // esi@403
  172.   int v176; // edi@408
  173.   int v177; // eax@409
  174.   int v178; // esi@410
  175.   int v179; // eax@410
  176.   ARENA *v180; // ecx@413
  177.   int v181; // edi@415
  178.   ARENA **v182; // esi@416
  179.   PLAYER *v183; // ecx@423
  180.   int v184; // edi@427
  181.   PLAYER **v185; // esi@428
  182.   PLAYER *v186; // ecx@437
  183.   ARENA *v187; // ecx@443
  184.   FILE *v188; // eax@449
  185.   const char *v189; // edi@449
  186.   int v190; // ebx@451
  187.   int v191; // eax@451
  188.   FILE *v192; // eax@454
  189.   ARENA *v193; // eax@455
  190.   int v194; // esi@456
  191.   signed int v195; // edi@457
  192.   PLAYER *v196; // eax@458
  193.   const char *v197; // esi@461
  194.   int v198; // eax@461
  195.   signed int v199; // edi@463
  196.   int v200; // edx@471
  197.   time_t v201; // ST20_8@478
  198.   signed __int64 v202; // qax@478
  199.   signed int v203; // esi@478
  200.   signed int v204; // ecx@481
  201.   int v205; // edi@481
  202.   const char *v206; // esi@481
  203.   bool v207; // zf@481
  204.   const char *v208; // ebx@485
  205.   signed int v209; // ebx@490
  206.   char *v210; // eax@491
  207.   int v211; // ecx@491
  208.   int v212; // edi@494
  209.   signed int v213; // ecx@496
  210.   signed int v214; // ecx@499
  211.   const void *v215; // esi@499
  212.   char *v216; // edi@499
  213.   unsigned int v217; // edx@499
  214.   signed int v218; // ecx@499
  215.   char *v219; // edi@502
  216.   signed int v220; // ecx@502
  217.   signed int v221; // ecx@505
  218.   const void *v222; // esi@505
  219.   char *v223; // edi@505
  220.   unsigned int v224; // edx@505
  221.   signed int v225; // ecx@505
  222.   int v226; // ebx@516
  223.   signed int v227; // esi@516
  224.   ARENA *v228; // edx@520
  225.   int v229; // eax@520
  226.   int v230; // esi@520
  227.   int v231; // edi@520
  228.   int v232; // edx@520
  229.   int v233; // ecx@524
  230.   ARENA *v234; // eax@527
  231.   int v235; // edx@527
  232.   int v236; // ecx@527
  233.   __int16 v237; // ax@527
  234.   int v238; // eax@527
  235.   int v239; // ecx@527
  236.   int v240; // eax@527
  237.   int v241; // eax@540
  238.   ARENA *v242; // ecx@543
  239.   char *v243; // eax@543
  240.   char *v244; // edx@544
  241.   char *v245; // ebx@546
  242.   int v246; // eax@546
  243.   ARENA *v247; // esi@547
  244.   char *v248; // esi@550
  245.   signed int v249; // ebp@554
  246.   int v250; // eax@557
  247.   int v251; // eax@562
  248.   signed int v252; // ecx@570
  249.   int v253; // edi@570
  250.   const char *v254; // esi@570
  251.   bool v255; // zf@570
  252.   int v256; // eax@575
  253.   const char *v257; // edx@578
  254.   ARENA *v258; // ecx@585
  255.   signed int v259; // ebx@586
  256.   PLAYER *v260; // ecx@587
  257.   signed int v261; // esi@587
  258.   __int64 v262; // qax@590
  259.   __int64 v263; // qax@591
  260.   int v264; // edi@602
  261.   signed int v265; // ecx@604
  262.   signed int v266; // ecx@607
  263.   const void *v267; // esi@607
  264.   char *v268; // edi@607
  265.   unsigned int v269; // edx@607
  266.   signed int v270; // ecx@607
  267.   char *v271; // edi@610
  268.   signed int v272; // ecx@610
  269.   signed int v273; // ecx@613
  270.   const void *v274; // esi@613
  271.   char *v275; // edi@613
  272.   unsigned int v276; // edx@613
  273.   signed int v277; // ecx@613
  274.   int v278; // edx@617
  275.   int v279; // ecx@621
  276.   int v280; // edx@638
  277.   char *v281; // ebx@638
  278.   unsigned int v282; // ebx@646
  279.   PLAYER *v283; // eax@646
  280.   signed int v284; // ecx@654
  281.   signed int v285; // ecx@658
  282.   signed int v286; // ecx@662
  283.   signed int v287; // ecx@671
  284.   int v288; // edi@671
  285.   const char *v289; // esi@671
  286.   bool v290; // zf@671
  287.   signed int v291; // ecx@675
  288.   int v292; // edi@675
  289.   const char *v293; // esi@675
  290.   bool v294; // zf@675
  291.   signed int v295; // ecx@682
  292.   int v296; // eax@683
  293.   const char v297; // al@688
  294.   const char *v298; // edi@688
  295.   char *jj; // ecx@688
  296.   const char v300; // al@691
  297.   char v301; // al@692
  298.   int v302; // edi@692
  299.   char *kk; // ecx@692
  300.   const char v304; // al@696
  301.   char *v305; // edi@704
  302.   int *v306; // esi@704
  303.   char v307; // al@707
  304.   int v308; // ecx@708
  305.   int v309; // edi@708
  306.   int v310; // esi@708
  307.   const char *v311; // eax@709
  308.   ARENA *v312; // edi@711
  309.   ARENA *v313; // ecx@718
  310.   int v314; // eax@718
  311.   int v315; // eax@723
  312.   __int64 v316; // qax@727
  313.   __int64 v317; // qax@728
  314.   __int64 v318; // qax@729
  315.   const char *v319; // ebx@730
  316.   int v320; // edi@737
  317.   char *v321; // ST1C_4@737
  318.   int v322; // esi@737
  319.   ARENA *v323; // eax@738
  320.   ARENA *v324; // eax@743
  321.   char *v325; // eax@748
  322.   int v326; // edx@749
  323.   PLAYER *v327; // esi@749
  324.   bool v328; // sf@749
  325.   ARENA **v329; // edi@750
  326.   ARENA *v330; // eax@751
  327.   int v331; // ebx@751
  328.   signed int v332; // esi@752
  329.   unsigned int v333; // krD8_4@774
  330.   ARENA **v334; // esi@775
  331.   int v335; // ebp@776
  332.   signed int v336; // edi@777
  333.   ARENA *v337; // edx@784
  334.   int v338; // esi@785
  335.   int v339; // ecx@785
  336.   const char *v340; // ecx@797
  337.   char v341; // al@799
  338.   char *ll; // edx@799
  339.   const char v343; // al@803
  340.   const char v344; // al@804
  341.   const char *v345; // ecx@804
  342.   int v346; // eax@819
  343.   int v347; // eax@833
  344.   unsigned int v348; // krE8_4@836
  345.   int v349; // edi@836
  346.   PLAYER **v350; // ebp@837
  347.   char *v351; // [sp+4h] [bp-1608Ch]@668
  348.   const char *v352; // [sp+8h] [bp-16088h]@668
  349.   char *v353; // [sp+Ch] [bp-16084h]@52
  350.   char *v354; // [sp+Ch] [bp-16084h]@351
  351.   char *v355; // [sp+Ch] [bp-16084h]@598
  352.   char *v356; // [sp+Ch] [bp-16084h]@644
  353.   int v357; // [sp+Ch] [bp-16084h]@668
  354.   const char *v358; // [sp+10h] [bp-16080h]@52
  355.   char *v359; // [sp+10h] [bp-16080h]@57
  356.   char *v360; // [sp+10h] [bp-16080h]@218
  357.   const char *v361; // [sp+10h] [bp-16080h]@351
  358.   int v362; // [sp+10h] [bp-16080h]@525
  359.   const char *v363; // [sp+10h] [bp-16080h]@598
  360.   const char *v364; // [sp+10h] [bp-16080h]@644
  361.   int v365; // [sp+10h] [bp-16080h]@668
  362.   int v366; // [sp+14h] [bp-1607Ch]@52
  363.   char v367; // [sp+14h] [bp-1607Ch]@54
  364.   char v368; // [sp+14h] [bp-1607Ch]@218
  365.   int v369; // [sp+14h] [bp-1607Ch]@351
  366.   int v370; // [sp+14h] [bp-1607Ch]@525
  367.   int v371; // [sp+14h] [bp-1607Ch]@598
  368.   char *v372; // [sp+14h] [bp-1607Ch]@644
  369.   int v373; // [sp+14h] [bp-1607Ch]@668
  370.   char v374[16]; // [sp+18h] [bp-16078h]@1
  371.   ARENA *a5[2]; // [sp+28h] [bp-16068h]@63
  372.   int v376; // [sp+30h] [bp-16060h]@69
  373.   int v377; // [sp+34h] [bp-1605Ch]@61
  374.   char ExitCode[7]; // [sp+38h] [bp-16058h]@233
  375.   char v379; // [sp+3Fh] [bp-16051h]@420
  376.   size_t Size; // [sp+40h] [bp-16050h]@69
  377.   int v381; // [sp+44h] [bp-1604Ch]@233
  378.   int v382; // [sp+48h] [bp-16048h]@69
  379.   int v383; // [sp+4Ch] [bp-16044h]@69
  380.   char v384; // [sp+50h] [bp-16040h]@527
  381.   __int16 v385; // [sp+51h] [bp-1603Fh]@527
  382.   int v386; // [sp+53h] [bp-1603Dh]@527
  383.   int v387; // [sp+57h] [bp-16039h]@527
  384.   __int16 v388; // [sp+5Bh] [bp-16035h]@527
  385.   char v389[3]; // [sp+5Dh] [bp-16033h]@527
  386.   int v390; // [sp+60h] [bp-16030h]@233
  387.   char array1[32]; // [sp+64h] [bp-1602Ch]@157
  388.   char array2[256]; // [sp+84h] [bp-1600Ch]@52
  389.   char Dest[256]; // [sp+184h] [bp-15F0Ch]@69
  390.   char Str1[64]; // [sp+284h] [bp-15E0Ch]@153
  391.   char AppName[64]; // [sp+2C4h] [bp-15DCCh]@76
  392.   char buf[512]; // [sp+304h] [bp-15D8Ch]@45
  393.   char StartupInfo[256]; // [sp+504h] [bp-15B8Ch]@163
  394.   char v398[512]; // [sp+604h] [bp-15A8Ch]@741
  395.   char v399[8192]; // [sp+804h] [bp-1588Ch]@638
  396.   char v400[80000]; // [sp+2804h] [bp-1388Ch]@543
  397.   int v401; // [sp+16084h] [bp-Ch]@1
  398.   int (*v402)(); // [sp+16088h] [bp-8h]@1
  399.   int v403; // [sp+1608Ch] [bp-4h]@1
  400.   const char *Buf1b; // [sp+160A0h] [bp+10h]@485
  401.   const char *Buf1a; // [sp+160A0h] [bp+10h]@489
  402.  
  403.   v403 = -1;
  404.   v402 = sub_4288DE;
  405.   v401 = a1;
  406.   v7 = alloca(0x1605Cu);
  407.   v8 = ChatText;
  408.   v9 = player;
  409.   *(_QWORD *)v374 = a2;
  410.   if ( player && player->isModerator && *ChatText == '8' || strlen(ChatText) > 0xFA )
  411.     return;
  412.   v10 = arenaPlayerIndex;
  413.   SomethingWithSendingChatTypes(player, a4, arenaPlayerIndex, (int)ChatText, a7);
  414.   if ( player )
  415.   {
  416.     v11 = 0;
  417.     if ( arenaPlayerIndex >= 0 && arenaPlayerIndex < 1024 )
  418.       v11 = ZonePlayerList[arenaPlayerIndex];
  419.     v12 = BillingLogMessages;
  420.     if ( BillingLogMessages <= player->Extra2 )
  421.       v12 = player->Extra2;
  422.     if ( v11 && v11->Extra2 )
  423.     {
  424.       if ( v12 )
  425.       {
  426. LABEL_17:
  427.         v13 = -1;
  428.         switch ( a4 )
  429.         {
  430.           case 9:
  431.             v13 = -4;
  432.             break;
  433.           case 3:
  434.             v13 = -2;
  435.             break;
  436.           case 5:
  437.             if ( v11 )
  438.               v13 = v11->UserId;
  439.             break;
  440.           case 4:
  441.             v13 = -3;
  442.             break;
  443.           default:
  444.             break;
  445.         }
  446.         if ( v12 == 3
  447.           || v12 == 2 && (a4 == 3 || a4 == 4 || a4 == 5 || a4 == 9 || *ChatText == '*')
  448.           || v12 == 1 && (a4 == 5 || *ChatText == '*') )
  449.         {
  450.           v14 = player->UserId;
  451.           if ( v14 >= 0 )
  452.           {
  453.             if ( BillingConnectionStructPointer )
  454.               SendBillerUnknownPacket(v14, v13, ChatText);
  455.           }
  456.         }
  457.         goto LABEL_36;
  458.       }
  459.       if ( *ChatText != '*' )
  460.         v12 = 1;
  461.     }
  462.     if ( !v12 )
  463.       goto LABEL_36;
  464.     goto LABEL_17;
  465.   }
  466. LABEL_36:
  467.   v15 = *ChatText;
  468.   if ( *ChatText == '*' )
  469.   {
  470.     if ( player )
  471.     {
  472.       if ( !player->isModerator )
  473.         goto LABEL_460;
  474.       v8 = ChatText;
  475.       v10 = arenaPlayerIndex;
  476.       if ( player )
  477.       {
  478.         if ( !player->isSuperModerator )
  479.           goto LABEL_311;
  480.         if ( player && !player->isSysop )
  481.         {
  482. LABEL_187:
  483.           if ( !_memicmp(ChatText, "*szone", 6u) && player )
  484.           {
  485.             v94 = ChatText + 6;
  486.             if ( ChatText[6] == ' ' )
  487.               v94 = ChatText + 7;
  488.             if ( *v94 == '_' )
  489.               *v94 = ' ';
  490.             if ( player->isSysop || *v94 != '*' || !_memicmp(v94, "*permit", 7u) || !_memicmp(v94, "*revoke", 7u) )
  491.             {
  492.               strcpy(&buf[2], v94);
  493.               buf[1] = a7;
  494.               buf[0] = 2;
  495.               if ( BillingConnectionStructPointer )
  496.                 SendBillerZoneRevokePermitPacket(player->BillerPlayerId, BillingScoreId, buf, strlen(v94) + 3);
  497.             }
  498.             return;
  499.           }
  500.           if ( !_memicmp(ChatText, "*zone", 5u) )
  501.           {
  502.             v95 = ChatText[5];
  503.             v96 = ChatText + 5;
  504.             ChatText += 5;
  505.             if ( v95 == ' ' )
  506.             {
  507.               do
  508.                 v97 = (v96++)[1];
  509.               while ( v97 == ' ' );
  510.               ChatText = v96;
  511.             }
  512.             if ( player )
  513.             {
  514.               v98 = player->MyArena;
  515.               if ( v98 )
  516.                 FormatMessageArena(v98, "%s\n", v96);
  517.             }
  518.             if ( *v96 == '_' )
  519.               *v96 = ' ';
  520.             strcpy(&buf[5], v96);
  521.             buf[2] = a7;
  522.             buf[0] = 7;
  523.             buf[1] = 0;
  524.             *(_WORD *)&buf[3] = -1;
  525.             v99 = strlen(v96) + 1;
  526.             v100 = 0;
  527.             if ( ZonePlayerCount > 0 )
  528.             {
  529.               v101 = playerPointerList;
  530.               do
  531.               {
  532.                 if ( (*v101)->MyArena )
  533.                   SendPlayerReliablePacket(*v101, buf, v99 - 1 + 6, 1);
  534.                 ++v100;
  535.                 ++v101;
  536.               }
  537.               while ( v100 < ZonePlayerCount );
  538.             }
  539.             goto LABEL_311;
  540.           }
  541.           if ( _memicmp(ChatText, "*where", 6u) )
  542.           {
  543.             v102 = 0;
  544.           }
  545.           else
  546.           {
  547.             v102 = 0;
  548.             if ( player )
  549.             {
  550.               if ( a4 != 5 || (v103 = ZonePlayerList[arenaPlayerIndex]) == 0 )
  551.                 goto LABEL_311;
  552.               v104 = v103->YPixels;
  553.               v105 = (int)v103->PlayerName;
  554.               v106 = 10 * (((BYTE4(v104) & 0xF) + (signed int)v104) >> 4);
  555.               v107 = (((WORD2(v106) & 0x1FF) + (signed int)v106) >> 9) + 1;
  556.               v108 = 10 * *(_WORD *)(v105 - 443) / 16;
  557.               sprintf(AppName, "%s: %c%d", v105, (((WORD2(v108) & 0x1FF) + (signed int)v108) >> 9) + 65, v107);
  558.               v368 = 0;
  559.               v360 = AppName;
  560.               goto LABEL_310;
  561.             }
  562.           }
  563.           if ( !_memicmp(ChatText, "*info", 5u) && player != (PLAYER *)v102 )
  564.           {
  565.             if ( a4 != 5 || (v109 = ZonePlayerList[arenaPlayerIndex], v109 == (PLAYER *)v102) )
  566.               goto LABEL_311;
  567.             v110 = v109->DemoPlayer != v102;
  568.             v111 = v109->Frequency;
  569.             v112 = v109->TimeZoneBias;
  570.             v113 = GetIPAddressString((struct in_addr)v109->IPAddressDWORD);
  571.             sprintf(
  572.               array2,
  573.               "IP:%s  TimeZoneBias:%d  Freq:%d  TypedName:%s  Demo:%d",
  574.               v113,
  575.               v112,
  576.               v111,
  577.               v109->TypedName,
  578.               v110);
  579.             if ( player->isSysop != v102 )
  580.               sprintf(&array2[strlen(array2)], "  MachineId:%d", v109->MachineId);
  581.             SendArenaMessage(player, array2, v102);
  582.             v114 = player->MyArena;
  583.             if ( v114->ServersideArenaSettings.KingDeathCount > v102 )
  584.             {
  585.               sprintf(
  586.                 array2,
  587.                 "DeathsLeft:%d  KillsNeeded:%d",
  588.                 v109->KotHDeathCount,
  589.                 v114->ServersideArenaSettings.KingCrownRecoverKills - v109->KingCrownKills);
  590.               SendArenaMessage(player, array2, v102);
  591.             }
  592.             sprintf(
  593.               array2,
  594.               "Ping:%dms  LowPing:%dms  HighPing:%dms  AvePing:%dms",
  595.               10 * v109->CurrentPing,
  596.               10 * v109->LowPing,
  597.               10 * v109->HighPing,
  598.               10 * v109->AveragePing);
  599.             SendArenaMessage(player, array2, v102);
  600.             sprintf(
  601.               array2,
  602.               "S2CAveLatency:%dms  C2SAveLatency:%dms",
  603.               v109->S2CAverageLatency,
  604.               10 * v109->C2SAverageLatencyFirst / (v109->C2SAverageLatencySecond + 1));
  605.             v115 = v109->SecurityWeaponCountTotal;
  606.             v116 = 1000;
  607.             if ( v115 > 200 )
  608.               v116 = 1000 * v109->SecurityWeaponCount / v115;
  609.             v376 = 1000 - v116;
  610.             sub_41CB70((int)&v109->encryptionPointer->ConnectionStatus, (int)&a5[1], (int)&v377);
  611.             a5[1] = (ARENA *)(1000 - (unsigned int)a5[1]);
  612.             v117 = v109->encryptionPointer;
  613.             v377 = 1000 - v377;
  614.             v118 = GetBillingServerRelOut(v117, (int)&v383);
  615.             sprintf(
  616.               array2,
  617.               "LOSS: S2C:%.1f%%  C2S:%.1f%%",
  618.               (double)*(signed int *)&a5[1] * dword_429008,
  619.               (double)v377 * dword_429008);
  620.             if ( player->isSysop != v102 )
  621.               sprintf(
  622.                 &array2[strlen(array2)],
  623.                 "  S2CWeapons:%.1f%%  S2C_RelOut:%d(%d)",
  624.                 (double)v376 * dword_429008,
  625.                 v118,
  626.                 v383);
  627.             SendArenaMessage(player, array2, v102);
  628.             if ( player->isSuperModerator != v102 )
  629.             {
  630.               sub_41CB90(
  631.                 (int)&v109->encryptionPointer->ConnectionStatus,
  632.                 (int)&v390,
  633.                 (int)&v376,
  634.                 (int)&Size,
  635.                 (int)&v382);
  636.               sprintf(array2, "S2C:%d-->%d  C2S:%d-->%d", v390, v382, Size, v376);
  637.               SendArenaMessage(player, array2, v102);
  638.               v119 = v109->C2SCurrentFast;
  639.               v120 = v109->C2SCurrentSlow;
  640.               *(double *)&v121 = 0.0;
  641.               a5[0] = 0;
  642.               v381 = v120;
  643.               *(_DWORD *)ExitCode = v120 + v119;
  644.               if ( v120 + v119 > v102 )
  645.                 *(float *)a5 = (double)v381 * 100.0 / (double)*(signed int *)ExitCode;
  646.               v122 = v109->C2SCurrentTotalSlow;
  647.               v123 = v109->C2SCurrentTotalFast;
  648.               *(_DWORD *)ExitCode = v122;
  649.               v381 = v123 + v122;
  650.               if ( v123 + v122 > 0 )
  651.                 *(double *)&v121 = (double)*(signed int *)ExitCode * 100.0 / (double)v381;
  652.               sprintf(
  653.                 array2,
  654.                 "C2S CURRENT: Slow:%d Fast:%d %.1f%%   TOTAL: Slow:%d Fast:%d %.1f%%",
  655.                 v120,
  656.                 v119,
  657.                 *(float *)a5,
  658.                 v122,
  659.                 v123,
  660.                 v121,
  661.                 v121 >> 32);
  662.               SendArenaMessage(player, array2, 0);
  663.               v124 = *(_WORD *)&v109->gap_12B[25];
  664.               *(double *)&v125 = 0.0;
  665.               v126 = *(_WORD *)&v109->gap_12B[27];
  666.               a5[0] = 0;
  667.               *(_DWORD *)ExitCode = v124;
  668.               v381 = v126 + v124;
  669.               if ( v126 + v124 > 0 )
  670.                 *(float *)a5 = (double)*(signed int *)ExitCode * 100.0 / (double)v381;
  671.               v127 = *(_DWORD *)&v109->gap_12B[21];
  672.               v128 = *(_DWORD *)&v109->gap_12B[17];
  673.               *(_DWORD *)ExitCode = v128;
  674.               v381 = v128 + v127;
  675.               if ( v128 + v127 > 0 )
  676.                 *(double *)&v125 = (double)*(signed int *)ExitCode * 100.0 / (double)v381;
  677.               sprintf(
  678.                 array2,
  679.                 "S2C CURRENT: Slow:%d Fast:%d %.1f%%   TOTAL: Slow:%d Fast:%d %.1f%%",
  680.                 v124,
  681.                 v126,
  682.                 *(float *)a5,
  683.                 v128,
  684.                 v127,
  685.                 v125,
  686.                 v125 >> 32);
  687.               v102 = 0;
  688.               SendArenaMessage(player, array2, 0);
  689.             }
  690.             HIDWORD(v129) = v109->TotalUsageSeconds2;
  691.             LODWORD(v129) = time((time_t *)v102);
  692.             v130 = (signed __int64)difftime(v129, *(time_t *)v374);
  693.             v131 = v130;
  694.             LODWORD(v130) = (signed int)((_DWORD)v130
  695.                                        + ((unsigned __int64)(18446744071705233545i64 * (signed int)v130) >> 32)) >> 5;
  696.             sprintf(
  697.               Dest,
  698.               "TIME: Session:%5d:%02d:00",
  699.               v131 / 3600,
  700.               (signed int)(((unsigned int)v130 >> 31) + v130) % 60);
  701.             if ( player->isSysop != v102 )
  702.             {
  703.               HIDWORD(v132) = v109->AccountCreationSecond;
  704.               LODWORD(v132) = v109->AccountCreationMinute;
  705.               v133 = v132;
  706.               LODWORD(v132) = v109->AccountCreationYear;
  707.               HIDWORD(v132) = v109->AccountCreationHour;
  708.               v134 = v131 + v109->UsageTotalSeconds;
  709.               v135 = v132;
  710.               HIDWORD(v132) = v109->AccountCreationDay;
  711.               LODWORD(v132) = v109->AccountCreationMonth;
  712.               sprintf(
  713.                 &Dest[strlen(Dest)],
  714.                 "  Total:%5d:%02d:00  Created: %d-%d-%d %02d:%02d:%02d",
  715.                 v134 / 3600,
  716.                 v134 / 60 % 60,
  717.                 v132,
  718.                 v135,
  719.                 v133);
  720.             }
  721.             SendArenaMessage(player, Dest, v102);
  722.             if ( player->isSysop == v102 )
  723.               goto LABEL_311;
  724.             if ( player->MyArena->ServersideArenaSettings.MiscTimedGame > v102 )
  725.             {
  726.               sprintf(
  727.                 array2,
  728.                 "BEST SCORE Points:%d  Win:%d  Lose:%d",
  729.                 *(_DWORD *)&v109->PersonalBestPoints1of2 + *(_DWORD *)&v109->PersonalBestPoints2of2,
  730.                 v109->PersonalBestWins,
  731.                 v109->PersonalBestLosses);
  732.               SendArenaMessage(player, array2, v102);
  733.             }
  734.             v136 = (int)v109->encryptionPointer;
  735.             a5[0] = (ARENA *)v102;
  736.             v376 = v102;
  737.             v382 = v102;
  738.             Size = v102;
  739.             sub_41C9B0(v136, (int)a5, (int)&v376);
  740.             sub_41C9D0((int)&v109->encryptionPointer->ConnectionStatus, (int)&v382, (int)&Size);
  741.             if ( (signed int)a5[0] <= v102 )
  742.             {
  743.               if ( v382 <= v102 )
  744.                 goto LABEL_311;
  745.             }
  746.             sprintf(array2, "Async C2S:%d of %d  S2C:%d of %d", v376, a5[0], Size, v382);
  747.             v368 = v102;
  748.             v360 = array2;
  749.             goto LABEL_310;
  750.           }
  751.           if ( _memicmp(ChatText, "*getlist", 8u) || player == (PLAYER *)v102 )
  752.           {
  753.             if ( _memicmp(ChatText, "*putlist", 8u) || player == (PLAYER *)v102 )
  754.             {
  755.               if ( _memicmp(ChatText, "*getmodlist", 0xBu) || player == (PLAYER *)v102 )
  756.               {
  757.                 if ( _memicmp(ChatText, "*putmodlist", 0xBu) || player == (PLAYER *)v102 )
  758.                 {
  759.                   if ( !_memicmp(ChatText, "*recycle", 8u) )
  760.                   {
  761.                     if ( player != (PLAYER *)v102 )
  762.                       SendArenaMessage(player, "Recycling Server", v102);
  763.                     RecycleServer = 1;
  764.                     goto LABEL_311;
  765.                   }
  766.                   if ( !_memicmp(ChatText, "*moderator", 0xAu) )
  767.                   {
  768.                     if ( a4 != 5 || (v137 = ZonePlayerList[arenaPlayerIndex], v137 == (PLAYER *)v102) )
  769.                       goto LABEL_311;
  770.                     v368 = v102;
  771.                     v138 = v137->isModerator == v102;// isModerator != isModerator
  772.                     v137->isModerator = v138;
  773.                     if ( v138 == v102 )
  774.                       v360 = "Player Moderator Mode OFF";
  775.                     else
  776.                       v360 = "Player Moderator Mode ON";
  777.                     goto LABEL_310;
  778.                   }
  779.                   if ( _memicmp(ChatText, "*restart", 8u) || player == (PLAYER *)v102 )
  780.                   {
  781.                     if ( !_memicmp(ChatText, "*prize", 6u) )
  782.                     {
  783.                       v139 = ChatText[6];
  784.                       v140 = ChatText + 6;
  785.                       ChatText += 6;
  786.                       if ( v139 == 32 )
  787.                       {
  788.                         do
  789.                           v141 = (v140++)[1];
  790.                         while ( v141 == 32 );
  791.                         ChatText = v140;
  792.                       }
  793.                       v142 = *v140;
  794.                       v60 = *v140 == 35;
  795.                       ExitCode[0] = 32;
  796.                       *(_WORD *)&ExitCode[3] = v102;
  797.                       *(_WORD *)&ExitCode[1] = 1;
  798.                       if ( v60 )
  799.                       {
  800.                         *(_WORD *)&ExitCode[3] = atoi(v140 + 1);
  801.                       }
  802.                       else
  803.                       {
  804.                         if ( isdigit(v142) )
  805.                           *(_WORD *)&ExitCode[1] = atoi(v140);
  806.                       }
  807.                       if ( player->isSysop == v102 )
  808.                       {
  809.                         v143 = *(_WORD *)&ExitCode[1];
  810.                         *(_WORD *)&ExitCode[1] = 100;
  811.                         if ( v143 <= 100 )
  812.                           *(_WORD *)&ExitCode[1] = v143;
  813.                       }
  814.                       if ( player != (PLAYER *)v102 )
  815.                         SendArenaMessage(player, "Granting prize(s)", v102);
  816.                       if ( a4 == 5 )
  817.                       {
  818.                         v144 = ZonePlayerList[arenaPlayerIndex];
  819.                         if ( v144 != (PLAYER *)v102 )
  820.                         {
  821.                           SendPlayerReliablePacket(v144, ExitCode, 5, 1);
  822.                           v144->field_305 = 1;
  823.                         }
  824.                       }
  825.                       else
  826.                       {
  827.                         if ( a4 == 3 )
  828.                         {
  829.                           SendReliablePacketToMyFrequency(player, ExitCode, 5, 1);
  830.                           SendPlayerReliablePacket(player, ExitCode, 5, 1);
  831.                           v145 = player->MyArena;
  832.                           v146 = 0;
  833.                           if ( v145->ArenaPlayerCount > v102 )
  834.                           {
  835.                             v147 = 16072;
  836.                             do
  837.                             {
  838.                               v148 = v145->PlayerPointers[v147];
  839.                               ++v146;
  840.                               ++v147;
  841.                               v148->field_305 = 1;
  842.                               v145 = player->MyArena;
  843.                             }
  844.                             while ( v146 < v145->ArenaPlayerCount );
  845.                           }
  846.                         }
  847.                         else
  848.                         {
  849.                           SendPlayerPacket(player->MyArena, ExitCode, 5, 1);
  850.                           v149 = player->MyArena;
  851.                           v150 = 0;
  852.                           if ( v149->ArenaPlayerCount > v102 )
  853.                           {
  854.                             v151 = 16072;
  855.                             do
  856.                             {
  857.                               v152 = v149->PlayerPointers[v151];
  858.                               ++v150;
  859.                               ++v151;
  860.                               v152->field_305 = 1;
  861.                               v149 = player->MyArena;
  862.                             }
  863.                             while ( v150 < v149->ArenaPlayerCount );
  864.                           }
  865.                         }
  866.                       }
  867.                       goto LABEL_311;
  868.                     }
  869.                     if ( _memicmp(ChatText, "*trace", 6u) || player == (PLAYER *)v102 )
  870.                       goto LABEL_311;
  871.                     if ( player->unknownIthoughtItWasPlayerPointerDupe != v102
  872.                       && GetExitCodeProcess((HANDLE)player->unknownIthoughtItWasPlayerPointerDupe, (LPDWORD)ExitCode) )
  873.                     {
  874.                       if ( *(_DWORD *)ExitCode == 259 )
  875.                         TerminateProcess((HANDLE)player->unknownIthoughtItWasPlayerPointerDupe, v102);
  876.                       CloseHandle((HANDLE)player->unknownIthoughtItWasPlayerPointerDupe);
  877.                       player->unknownIthoughtItWasPlayerPointerDupe = 0;
  878.                       player->dword4 = 0;
  879.                       player->dword8 = 0;
  880.                       player->dwordC = 0;
  881.                     }
  882.                     if ( a4 != 5 || (v153 = ZonePlayerList[arenaPlayerIndex], v153 == (PLAYER *)v102) )
  883.                       goto LABEL_311;
  884.                     v154 = GetIPAddressString((struct in_addr)v153->IPAddressDWORD);
  885.                     sprintf(array2, "SUBGAME /SPAWN tracert %s > spawn.log", v154);
  886.                     memset(StartupInfo, 0, 0x44u);
  887.                     *(_DWORD *)StartupInfo = 68;
  888.                     *(_DWORD *)&StartupInfo[12] = "Spawned TRACERT";
  889.                     CreateProcessA(
  890.                       (LPCSTR)v102,
  891.                       array2,
  892.                       (LPSECURITY_ATTRIBUTES)v102,
  893.                       (LPSECURITY_ATTRIBUTES)v102,
  894.                       v102,
  895.                       0x20u,
  896.                       (LPVOID)v102,
  897.                       (LPCSTR)v102,
  898.                       (LPSTARTUPINFOA)StartupInfo,
  899.                       (LPPROCESS_INFORMATION)player);
  900.                     v368 = v102;
  901.                     v360 = "SPAWN STARTED";
  902. LABEL_310:
  903.                     SendArenaMessage(player, v360, v368);
  904.                     goto LABEL_311;
  905.                   }
  906.                   player->MyArena->GameTimePassedTwo = v102;
  907.                 }
  908.                 else
  909.                 {
  910.                   buf[0] = 25;
  911.                   strncpy(&buf[257], "moderate.txt", 0x10u);
  912.                   buf[272] = 0;
  913.                   strncpy(&buf[1], "moderate.txt", 0x100u);
  914.                   buf[256] = 0;
  915.                   SendPlayerReliablePacket(player, buf, 273, 1);
  916.                 }
  917.               }
  918.               else
  919.               {
  920.                 SendArenaMessage(player, "File sent: moderate.txt (please wait...)", v102);
  921.                 sub_40E550(player, "moderate.txt");
  922.               }
  923.             }
  924.             else
  925.             {
  926.               buf[0] = 25;
  927.               strncpy(&buf[1], "permit.txt", 0x100u);
  928.               buf[256] = 0;
  929.               strncpy(&buf[257], "permit.txt", 0x10u);
  930.               buf[272] = 0;
  931.               SendPlayerReliablePacket(player, buf, 273, 1);
  932.             }
  933.           }
  934.           else
  935.           {
  936.             SendArenaMessage(player, "File sent: permit.txt (please wait...)", v102);
  937.             sub_40E550(player, "permit.txt");
  938.           }
  939. LABEL_311:
  940.           if ( _memicmp(ChatText, "*arena", 6u) )
  941.           {
  942.             if ( !_memicmp(ChatText, "*permit", 7u) )
  943.             {
  944.               v160 = ChatText[7];
  945.               v161 = ChatText + 7;
  946.               ChatText += 7;
  947.               if ( v160 == 32 )
  948.               {
  949.                 do
  950.                   v162 = (v161++)[1];
  951.                 while ( v162 == 32 );
  952.                 ChatText = v161;
  953.               }
  954.               if ( *v161 )
  955.               {
  956.                 sub_407280((int)PermitPointer, v161);
  957.                 sub_407200(PermitPointer);
  958.                 if ( !player )
  959.                   return;
  960.                 sprintf(array2, "Permission Added: %s", v161);
  961.                 SendArenaMessage(player, array2, 0);
  962.               }
  963.               goto LABEL_460;
  964.             }
  965.             if ( _memicmp(ChatText, "*revoke", 7u) )
  966.             {
  967.               if ( _memicmp(ChatText, "*banner", 7u) || !player )
  968.               {
  969.                 if ( _memicmp(ChatText, "*shutup", 7u) || !player )
  970.                 {
  971.                   if ( _memicmp(ChatText, "*lock", 5u) || !player )
  972.                   {
  973.                     if ( _memicmp(ChatText, "*timer", 6u) || !player )
  974.                     {
  975.                       if ( _memicmp(ChatText, "*spec", 5u) || !player )
  976.                       {
  977.                         if ( _memicmp(ChatText, "*kill", 5u) || !player )
  978.                         {
  979.                           if ( _memicmp(ChatText, "*flagreset", 0xAu) )
  980.                           {
  981.                             if ( _memicmp(ChatText, "*shipreset", 0xAu) )
  982.                             {
  983.                               if ( _memicmp(ChatText, "*scorereset", 0xBu) )
  984.                               {
  985.                                 if ( _memicmp(ChatText, "*timereset", 0xAu) )
  986.                                 {
  987.                                   if ( _memicmp(ChatText, "*beginlog", 9u) || !player )
  988.                                   {
  989.                                     if ( !_memicmp(ChatText, "*endlog", 7u) )
  990.                                     {
  991.                                       if ( !player )
  992.                                         return;
  993.                                       v192 = player->pfile329;
  994.                                       if ( v192 )
  995.                                       {
  996.                                         fprintf(v192, "Name               Win  Lose  Points\n");
  997.                                         fprintf(player->pfile329, "---------------- ----- ----- -------\n");
  998.                                         v193 = player->MyArena;
  999.                                         if ( v193 )
  1000.                                         {
  1001.                                           v194 = 0;
  1002.                                           if ( v193->ArenaPlayerCount > 0 )
  1003.                                           {
  1004.                                             v195 = 16072;
  1005.                                             do
  1006.                                             {
  1007.                                               v196 = v193->PlayerPointers[v195];
  1008.                                               fprintf(
  1009.                                                 player->pfile329,
  1010.                                                 "%-16.16s %5d %5d %7d\n",
  1011.                                                 v196->Name,
  1012.                                                 v196->CurrentWins,
  1013.                                                 v196->CurrentLosses,
  1014.                                                 v196->FlagPoints + v196->KillPoints);
  1015.                                               v193 = player->MyArena;
  1016.                                               ++v194;
  1017.                                               ++v195;
  1018.                                             }
  1019.                                             while ( v194 < v193->ArenaPlayerCount );
  1020.                                           }
  1021.                                         }
  1022.                                         fprintf(player->pfile329, "\nLOG FINISHED\n");
  1023.                                         fclose(player->pfile329);
  1024.                                         player->pfile329 = 0;
  1025.                                         sprintf(Dest, "Logging session closed, sending file: %s", &player->char32d);
  1026.                                         SendArenaMessage(player, Dest, 0);
  1027.                                         sub_40E550(player, &player->char32d);
  1028.                                       }
  1029.                                     }
  1030.                                   }
  1031.                                   else
  1032.                                   {
  1033.                                     v188 = player->pfile329;
  1034.                                     v189 = ChatText + 9;
  1035.                                     ChatText += 9;
  1036.                                     if ( v188 )
  1037.                                       fclose(v188);
  1038.                                     v190 = rand();
  1039.                                     v191 = rand();
  1040.                                     sprintf(&player->char32d, "SS%d.log", v191 + v190);
  1041.                                     player->pfile329 = fopen(&player->char32d, "wt");
  1042.                                     sprintf(Dest, "Logging session to: %s", &player->char32d);
  1043.                                     SendArenaMessage(player, Dest, 0);
  1044.                                     fprintf(player->pfile329, "LOG STARTED:%s\n", v189);
  1045.                                   }
  1046.                                 }
  1047.                                 else
  1048.                                 {
  1049.                                   if ( !player )
  1050.                                     return;
  1051.                                   v187 = player->MyArena;
  1052.                                   if ( v187 )
  1053.                                   {
  1054.                                     if ( v187->ServersideArenaSettings.MiscTimedGame <= 0 )
  1055.                                       SendArenaMessage(player, "Invalid command, this is not a timed game", 0);
  1056.                                     else
  1057.                                       sub_405360(v187, 1);
  1058.                                   }
  1059.                                 }
  1060.                               }
  1061.                               else
  1062.                               {
  1063.                                 if ( a4 == 5 )
  1064.                                 {
  1065.                                   if ( player )
  1066.                                     SendArenaMessage(player, "Player score reset", 0);
  1067.                                   v186 = ZonePlayerList[arenaPlayerIndex];
  1068.                                   if ( v186 )
  1069.                                     SendResetScoresPacket(v186);
  1070.                                 }
  1071.                                 else
  1072.                                 {
  1073.                                   if ( !player )
  1074.                                     return;
  1075.                                   ArenaScoreReset(player->MyArena, 1);
  1076.                                 }
  1077.                               }
  1078.                             }
  1079.                             else
  1080.                             {
  1081.                               v379 = 27;
  1082.                               if ( a4 == 5 )
  1083.                               {
  1084.                                 if ( player )
  1085.                                   SendArenaMessage(player, "Player ship reset", 0);
  1086.                                 v183 = ZonePlayerList[arenaPlayerIndex];
  1087.                                 if ( v183 )
  1088.                                   SendPlayerReliablePacket(v183, &v379, 1, 1);
  1089.                               }
  1090.                               else
  1091.                               {
  1092.                                 if ( player )
  1093.                                 {
  1094.                                   SendArenaMessage(player, "All ships reset", 0);
  1095.                                   SendPlayerPacket(player->MyArena, &v379, 1, 1);
  1096.                                 }
  1097.                                 else
  1098.                                 {
  1099.                                   v184 = 0;
  1100.                                   if ( ZonePlayerCount > 0 )
  1101.                                   {
  1102.                                     v185 = playerPointerList;
  1103.                                     do
  1104.                                     {
  1105.                                       if ( (*v185)->MyArena )
  1106.                                         SendPlayerReliablePacket(*v185, &v379, 1, 1);
  1107.                                       ++v184;
  1108.                                       ++v185;
  1109.                                     }
  1110.                                     while ( v184 < ZonePlayerCount );
  1111.                                   }
  1112.                                 }
  1113.                               }
  1114.                             }
  1115.                           }
  1116.                           else
  1117.                           {
  1118.                             if ( player )
  1119.                             {
  1120.                               SendArenaMessage(player, "Flag game being reset", 0);
  1121.                               v180 = player->MyArena;
  1122.                               if ( v180 )
  1123.                                 FlagUpdateSomething(v180);
  1124.                             }
  1125.                             else
  1126.                             {
  1127.                               v181 = 0;
  1128.                               if ( ArenaArrayLength > 0 )
  1129.                               {
  1130.                                 v182 = Arenas;
  1131.                                 do
  1132.                                 {
  1133.                                   FlagUpdateSomething(*v182);
  1134.                                   ++v181;
  1135.                                   ++v182;
  1136.                                 }
  1137.                                 while ( v181 < ArenaArrayLength );
  1138.                               }
  1139.                             }
  1140.                           }
  1141.                         }
  1142.                         else
  1143.                         {
  1144.                           if ( a4 == 5 )
  1145.                           {
  1146.                             v175 = ZonePlayerList[arenaPlayerIndex];
  1147.                             if ( v175 )
  1148.                             {
  1149.                               if ( player->isSysop || !v175->isSuperModerator )
  1150.                               {
  1151.                                 v175->DisconnectReason = 4;
  1152.                                 v175->AlreadySentReliablePacket = 1;
  1153.                                 WriteSubGameLog("Player kicked off by moderator: %s\n", v175->Name);
  1154.                                 SendArenaMessage(player, "Player kicked off", 0);
  1155.                                 if ( ChatText[5] == 32 )
  1156.                                 {
  1157.                                   v176 = atoi(ChatText + 6);
  1158.                                   if ( v176 > 0 )
  1159.                                   {
  1160.                                     v177 = MachineIdArrayIndex;
  1161.                                     if ( MachineIdArrayIndex < 1000 )
  1162.                                     {
  1163.                                       KickedUsers[MachineIdArrayIndex].MachineId = v175->MachineId;
  1164.                                       v178 = v177;
  1165.                                       KickedUsers[v177].KickStartTime = GetTickCount() / 0xA;
  1166.                                       v179 = MachineIdArrayIndex + 1;
  1167.                                       KickedUsers[v178].KickDelayMilliseconds = 6000 * v176;
  1168.                                       MachineIdArrayIndex = v179;
  1169.                                     }
  1170.                                   }
  1171.                                 }
  1172.                               }
  1173.                               else
  1174.                               {
  1175.                                 SendArenaMessage(v175, "Moderator attempted to kick you off", 0);
  1176.                               }
  1177.                             }
  1178.                           }
  1179.                         }
  1180.                       }
  1181.                       else
  1182.                       {
  1183.                         if ( a4 == 5 )
  1184.                         {
  1185.                           v173 = ZonePlayerList[arenaPlayerIndex];
  1186.                           if ( v173 )
  1187.                           {
  1188.                             if ( player->isSysop || !v173->isSuperModerator )
  1189.                             {
  1190.                               if ( v173->Ship != 8 )
  1191.                                 SetPlayerShip(v173, 8);
  1192.                               v174 = v173->IsSpeced;
  1193.                               v173->IsSpeced = v174 == 0;
  1194.                               if ( v174 )
  1195.                                 SendArenaMessage(player, "Player free to enter arena", 0);
  1196.                               else
  1197.                                 SendArenaMessage(player, "Player locked in spectator mode", 0);
  1198.                             }
  1199.                           }
  1200.                         }
  1201.                       }
  1202.                     }
  1203.                     else
  1204.                     {
  1205.                       v170 = ChatText[6];
  1206.                       v171 = ChatText + 6;
  1207.                       ChatText += 6;
  1208.                       if ( v170 == 32 )
  1209.                       {
  1210.                         do
  1211.                           v172 = (v171++)[1];
  1212.                         while ( v172 == 32 );
  1213.                         ChatText = v171;
  1214.                       }
  1215.                       if ( *v171 )
  1216.                       {
  1217.                         player->MyArena->GameTimeStart = 6000 * atoi(v171);
  1218.                         player->MyArena->GameTimePassed = GetTickCount() / 0xA;
  1219.                         player->MyArena->field_FF56 = 0;
  1220.                       }
  1221.                     }
  1222.                   }
  1223.                   else
  1224.                   {
  1225.                     if ( player->MyArena )
  1226.                     {
  1227.                       if ( _memicmp(ChatText, "*lockpublic", 0xBu) )
  1228.                       {
  1229.                         if ( _memicmp(ChatText, "*lockteam", 9u) )
  1230.                         {
  1231.                           if ( _memicmp(ChatText, "*lockprivate", 0xCu) )
  1232.                           {
  1233.                             if ( _memicmp(ChatText, "*lockall", 8u) )
  1234.                             {
  1235.                               if ( _memicmp(ChatText, "*lockspec", 9u) )
  1236.                               {
  1237.                                 if ( !ChatText[5] )
  1238.                                 {
  1239.                                   player->MyArena->ArenaLocked = player->MyArena->ArenaLocked == 0;
  1240.                                   if ( player->MyArena->ArenaLocked )
  1241.                                     SendArenaMessage(player, "Arena LOCKED", 0);
  1242.                                   else
  1243.                                     SendArenaMessage(player, "Arena UNLOCKED", 0);
  1244.                                 }
  1245.                               }
  1246.                               else
  1247.                               {
  1248.                                 player->MyArena->SpecMessageLock = player->MyArena->SpecMessageLock == 0;
  1249.                                 if ( player->MyArena->SpecMessageLock )
  1250.                                   SendArenaMessage(player, "Message lock applies to spectators only.", 0);
  1251.                                 else
  1252.                                   SendArenaMessage(player, "Message lock applies to everybody.", 0);
  1253.                               }
  1254.                             }
  1255.                             else
  1256.                             {
  1257.                               player->MyArena->AllMessagesLocked = player->MyArena->AllMessagesLocked == 0;
  1258.                               player->MyArena->AllMessagesLockedAgainSomething = player->MyArena->AllMessagesLocked;
  1259.                               if ( player->MyArena->AllMessagesLocked )
  1260.                                 SendArenaMessage(player, "All Messages LOCKED", 0);
  1261.                               else
  1262.                                 SendArenaMessage(player, "All Messages UNLOCKED", 0);
  1263.                             }
  1264.                           }
  1265.                           else
  1266.                           {
  1267.                             player->MyArena->PrivateMessagesLocked = player->MyArena->PrivateMessagesLocked == 0;
  1268.                             if ( player->MyArena->PrivateMessagesLocked )
  1269.                               SendArenaMessage(player, "Private Messages LOCKED", 0);
  1270.                             else
  1271.                               SendArenaMessage(player, "Private Messages UNLOCKED", 0);
  1272.                           }
  1273.                         }
  1274.                         else
  1275.                         {
  1276.                           player->MyArena->AllMessagesLocked = player->MyArena->AllMessagesLocked == 0;
  1277.                           if ( player->MyArena->AllMessagesLocked )
  1278.                             SendArenaMessage(player, "Team Messages LOCKED", 0);
  1279.                           else
  1280.                             SendArenaMessage(player, "Team Messages UNLOCKED", 0);
  1281.                         }
  1282.                       }
  1283.                       else
  1284.                       {
  1285.                         player->MyArena->AllMessagesLocked = player->MyArena->AllMessagesLocked == 0;
  1286.                         if ( player->MyArena->AllMessagesLocked )
  1287.                           SendArenaMessage(player, "Public Messages LOCKED", 0);
  1288.                         else
  1289.                           SendArenaMessage(player, "Public Messages UNLOCKED", 0);
  1290.                       }
  1291.                     }
  1292.                   }
  1293.                 }
  1294.                 else
  1295.                 {
  1296.                   if ( a4 == 5 )
  1297.                   {
  1298.                     v168 = ZonePlayerList[arenaPlayerIndex];
  1299.                     if ( v168 )
  1300.                     {
  1301.                       if ( v168->isSysop || v168->isSuperModerator && !player->isSysop )
  1302.                       {
  1303.                         sprintf(Dest, "%s tried to shut you up", player->Name);
  1304.                         SendArenaMessage(v168, Dest, 0);
  1305.                       }
  1306.                       else
  1307.                       {
  1308.                         v169 = v168->IsSilenced;
  1309.                         v168->IsSilenced = v169 == 0;
  1310.                         if ( v169 )
  1311.                         {
  1312.                           v369 = (int)v168->Name;
  1313.                           v361 = "%s can now speak";
  1314.                           v354 = Dest;
  1315.                         }
  1316.                         else
  1317.                         {
  1318.                           v369 = (int)v168->Name;
  1319.                           v361 = "%s has been silenced";
  1320.                           v354 = Dest;
  1321.                         }
  1322.                         sprintf(v354, v361, v369);
  1323.                         SendArenaMessage(player, Dest, 0);
  1324.                       }
  1325.                     }
  1326.                   }
  1327.                 }
  1328.               }
  1329.               else
  1330.               {
  1331.                 player->dword30 = 1;
  1332.                 v167 = player->PlayerId;
  1333.                 Dest[0] = 31;
  1334.                 *(_WORD *)&Dest[1] = v167;
  1335.                 memcpy(&Dest[3], player->BannerData, 0x60u);
  1336.                 SendPlayerPacket(player->MyArena, Dest, 99, 1);
  1337.               }
  1338.               goto LABEL_460;
  1339.             }
  1340.             v163 = ChatText[7];
  1341.             v164 = ChatText + 7;
  1342.             ChatText += 7;
  1343.             if ( v163 == 32 )
  1344.             {
  1345.               do
  1346.                 v165 = (v164++)[1];
  1347.               while ( v165 == 32 );
  1348.               ChatText = v164;
  1349.             }
  1350.             if ( *v164 )
  1351.             {
  1352.               if ( strcmp(v164, "*") )
  1353.               {
  1354.                 v166 = IsBannedMachineId((int)PermitPointer, (int)v164);
  1355.                 if ( v166 >= 0 )
  1356.                   ListMachineSomething((int)PermitPointer, v166);
  1357.               }
  1358.               else
  1359.               {
  1360.                 sub_407060(PermitPointer);
  1361.               }
  1362.               sub_407200(PermitPointer);
  1363.               if ( !player )
  1364.                 return;
  1365.               SendArenaMessage(player, "Permission revoked", 0);
  1366.             }
  1367. LABEL_460:
  1368.             if ( player )
  1369.             {
  1370.               v197 = ChatText + 1;
  1371.               v198 = _strcmpi(ChatText + 1, SysopPassword);
  1372.               if ( v198 && v198 )
  1373.               {
  1374.                 v199 = 1;
  1375.               }
  1376.               else
  1377.               {
  1378.                 WriteSubGameLog("%s> SYSOP LOGGED IN\n", player->Name);
  1379.                 v199 = 1;
  1380.                 player->isSysop = 1;
  1381.                 player->isModerator = 1;
  1382.                 player->isSuperModerator = 1;
  1383.               }
  1384.               if ( !_strcmpi(v197, SuperModeratorPassword) )
  1385.               {
  1386.                 WriteSubGameLog("%s> SUPER MODERATOR LOGGED IN\n", player->Name);
  1387.                 player->isModerator = v199;
  1388.                 player->isSuperModerator = v199;
  1389.               }
  1390.               if ( !_strcmpi(v197, ModeratorPassword) )
  1391.               {
  1392.                 WriteSubGameLog("%s> MODERATOR LOGGED IN\n", player->Name);
  1393.                 player->isModerator = v199;
  1394.               }
  1395.               if ( !_strcmpi(v197, EnergyPassword) )
  1396.               {
  1397.                 WriteSubGameLog("%s> ENERGY VIEWING TURNED ON/OFF\n", player->Name);
  1398.                 if ( player->MyArena )
  1399.                 {
  1400.                   v200 = player->isEnergyShowing;
  1401.                   player->isEnergyShowing = v200 == 0;
  1402.                   if ( v200 )
  1403.                     SendArenaMessage(player, "Showing Energy OFF", 0);
  1404.                   else
  1405.                     SendArenaMessage(player, "Showing Energy ON", 0);
  1406.                 }
  1407.               }
  1408.             }
  1409.             return;
  1410.           }
  1411.           v155 = ChatText[6];
  1412.           v156 = ChatText + 6;
  1413.           ChatText += 6;
  1414.           if ( v155 == 32 )
  1415.           {
  1416.             do
  1417.               v157 = (v156++)[1];
  1418.             while ( v157 == 32 );
  1419.             ChatText = v156;
  1420.           }
  1421.           if ( *v156 == 95 )
  1422.             *v156 = 32;
  1423.           if ( player )
  1424.           {
  1425.             v158 = player->MyArena;
  1426.             if ( v158 )
  1427.               FormatMessageArena(v158, "%s\n", v156);
  1428.           }
  1429.           buf[2] = a7;
  1430.           strcpy(&buf[5], ChatText);
  1431.           buf[0] = 7;
  1432.           buf[1] = 0;
  1433.           *(_WORD *)&buf[3] = -1;
  1434.           v159 = strlen(ChatText) + 1;
  1435.           if ( player )
  1436.           {
  1437.             SendPlayerPacket(player->MyArena, buf, v159 + 5, 1);
  1438.             goto LABEL_460;
  1439.           }
  1440.           return;
  1441.         }
  1442.       }
  1443.     }
  1444.     if ( !_memicmp(v8, "**", 2u) && player )
  1445.     {
  1446.       v16 = v8 + 2;
  1447.       buf[1] = a7;
  1448.       strcpy(&buf[2], v16);
  1449.       buf[0] = 2;
  1450.       if ( BillingConnectionStructPointer )
  1451.         SendBillerUserPrivateChatPacket(player->BillerPlayerId, BillingGroupId, buf, strlen(v16) + 3);
  1452.       return;
  1453.     }
  1454.     if ( _memicmp(v8, "*energy", 7u) || !player )
  1455.     {
  1456.       if ( !_memicmp(v8, "*stat", 5u) && player )
  1457.       {
  1458.         v21 = GetTickCount();
  1459.         v22 = v21 / 0xA - oldTickCountValue;
  1460.         v377 = v21 / 0xA - oldTickCountValue;
  1461.         if ( v377 <= 0 )
  1462.         {
  1463.           v22 = 1;
  1464.           v377 = 1;
  1465.         }
  1466.         v23 = player->MyArena;
  1467.         v24 = 0;
  1468.         a5[0] = 0;
  1469.         v25 = v23->ArenaPlayerCount;
  1470.         if ( v25 > 0 )
  1471.         {
  1472.           v26 = 0;
  1473.           if ( v25 > 0 )
  1474.           {
  1475.             v27 = 16072;
  1476.             do
  1477.             {
  1478.               v28 = GetBillingServerRelOut(v23->PlayerPointers[v27]->encryptionPointer, 0);
  1479.               ++v27;
  1480.               v29 = (ARENA *)((char *)a5[0] + v28);
  1481.               v23 = player->MyArena;
  1482.               a5[0] = v29;
  1483.               ++v26;
  1484.             }
  1485.             while ( v26 < v23->ArenaPlayerCount );
  1486.             v24 = a5[0];
  1487.           }
  1488.           a5[0] = (ARENA *)(10 * (signed int)v24 / player->MyArena->ArenaPlayerCount);
  1489.         }
  1490.         sub_41B3F0((int)dword_437B08, (int)&v383, (int)&a5[1], (int)&v382, (int)&Size, (int)&v376);
  1491.         sprintf(
  1492.           Dest,
  1493.           "Send:%d(%d)  Recv:%d(%d)  RelOut:%.1f  Multi:%.1f\n",
  1494.           100 * v383 / v22,
  1495.           (signed int)(100 * (unsigned int)a5[1]) / v22,
  1496.           100 * v382 / v22,
  1497.           (signed int)(100 * Size) / v22,
  1498.           (double)*(signed int *)a5 * dword_429008,// 0.1
  1499.           (double)v376 * seg_429000 / (double)v377);// 100.0
  1500.         SendArenaMessage(player, Dest, 0);
  1501.         v30 = 0;
  1502.         if ( dword_4AC43C )
  1503.           v30 = GetBillingServerRelOut((ENCRYPTION *)dword_4AC43C, 0);
  1504.         sprintf(
  1505.           Dest,
  1506.           "Iterations:%d  Players:%d  BillingRelOut:%d  Wave:%d\n",
  1507.           100 * ServerIterations / v22,
  1508.           ZonePlayerCount,
  1509.           v30,
  1510.           100 * Wave / v22);
  1511.         SendArenaMessage(player, Dest, 0);
  1512.         sprintf(
  1513.           Dest,
  1514.           "Screen:%d  Radar:%d  Double:%d  Timer:%d\n",
  1515.           100 * ScreenValue / v22,
  1516.           100 * RadarValue / v22,
  1517.           100 * DoubleValue / v22,
  1518.           v22 / 100);
  1519.         SendArenaMessage(player, Dest, 0);
  1520.         v31 = 0;
  1521.         v32 = 0;
  1522.         if ( ArenaArrayLength > 0 )
  1523.         {
  1524.           v377 = (int)Arenas;
  1525.           do
  1526.           {
  1527.             v31 += GetArenaMemoryTotal(*(ARENA **)v377);
  1528.             ++v32;
  1529.             v377 += 4;
  1530.           }
  1531.           while ( v32 < ArenaArrayLength );
  1532.         }
  1533.         sprintf(Dest, "MemoryUsage:%dk\n", v31);
  1534.         SendArenaMessage(player, Dest, 0);
  1535.         v33 = 0;
  1536.         Dest[0] = 0;
  1537.         v377 = 0;
  1538.         do
  1539.         {
  1540.           v34 = SomeArrayOf256_1[v33];
  1541.           if ( v34 )
  1542.           {
  1543.             sprintf(AppName, "%d:%d(%d)  ", v33, 100 * SomeArrayOf256_2[v33] / v22, 100 * v34 / v22);
  1544.             if ( strlen(AppName) + strlen(Dest) > 0x4B )
  1545.             {
  1546.               SendArenaMessage(player, Dest, 0);
  1547.               Dest[0] = 0;
  1548.             }
  1549.             v35 = AppName;
  1550.             v36 = -1;
  1551.             do
  1552.             {
  1553.               if ( !v36 )
  1554.                 break;
  1555.               v60 = *v35++ == 0;
  1556.               --v36;
  1557.             }
  1558.             while ( !v60 );
  1559.             v37 = ~v36;
  1560.             v38 = &v35[-v37];
  1561.             v39 = Dest;
  1562.             v40 = v37;
  1563.             v41 = -1;
  1564.             do
  1565.             {
  1566.               if ( !v41 )
  1567.                 break;
  1568.               v60 = *v39++ == 0;
  1569.               --v41;
  1570.             }
  1571.             while ( !v60 );
  1572.             memcpy(v39 - 1, v38, v40);
  1573.             v33 = v377;
  1574.           }
  1575.           ++v33;
  1576.           v377 = v33;
  1577.         }
  1578.         while ( v33 < 256 );
  1579.         if ( !Dest[0] )
  1580.           goto LABEL_187;
  1581.         v367 = 0;
  1582.         v359 = Dest;
  1583.         goto LABEL_186;
  1584.       }
  1585.       if ( !_memicmp(v8, "*addword", 8u) )
  1586.       {
  1587.         v42 = v8[8];
  1588.         v43 = v8 + 8;
  1589.         ChatText = v43;
  1590.         if ( v42 == 32 )
  1591.         {
  1592.           do
  1593.             v44 = (v43++)[1];
  1594.           while ( v44 == 32 );
  1595.           ChatText = v43;
  1596.         }
  1597.         if ( !*v43 || (sub_407280((int)ObscenePointer, v43), sub_407200(ObscenePointer), !player) )
  1598.           goto LABEL_187;
  1599.         sprintf(array2, "Obscene Word Added: %s", v43);
  1600.         v367 = 0;
  1601.         v359 = array2;
  1602.         goto LABEL_186;
  1603.       }
  1604.       if ( _memicmp(v8, "*addmachine", 0xBu) )
  1605.       {
  1606.         if ( !_memicmp(v8, "*removemachine", 0xEu) )
  1607.         {
  1608.           v48 = v8[14];
  1609.           v49 = v8 + 14;
  1610.           ChatText = v49;
  1611.           if ( v48 == 32 )
  1612.           {
  1613.             do
  1614.               v50 = (v49++)[1];
  1615.             while ( v50 == 32 );
  1616.             ChatText = v49;
  1617.           }
  1618.           if ( !*v49 )
  1619.             goto LABEL_187;
  1620.           v51 = 0;
  1621.           v377 = ListMachine((int)IDBlockPointer);
  1622.           if ( v377 > 0 )
  1623.           {
  1624.             do
  1625.             {
  1626.               v52 = (const char *)ListMachineByIndex((int)IDBlockPointer, v51);
  1627.               v53 = strlen(v52) + 1;
  1628.               v54 = strlen(ChatText) + 1;
  1629.               v55 = ChatText;
  1630.               if ( v54 - 1 >= v53 - 1 )
  1631.                 v55 = v52;
  1632.               v56 = strlen(v55) + 1;
  1633.               v57 = ChatText;
  1634.               v58 = v52;
  1635.               v59 = v56 - 1;
  1636.               v60 = 1;
  1637.               do
  1638.               {
  1639.                 if ( !v59 )
  1640.                   break;
  1641.                 v60 = *v57++ == *v58++;
  1642.                 --v59;
  1643.               }
  1644.               while ( v60 );
  1645.               if ( v60 )
  1646.               {
  1647.                 ListMachineSomething((int)IDBlockPointer, v51);
  1648.                 --v377;
  1649.               }
  1650.               else
  1651.               {
  1652.                 ++v51;
  1653.               }
  1654.             }
  1655.             while ( v51 < v377 );
  1656.           }
  1657.           sub_407200(IDBlockPointer);
  1658.           if ( !player )
  1659.             goto LABEL_187;
  1660.           v367 = 0;
  1661.           v359 = "MachineId Block Removed";
  1662.           goto LABEL_186;
  1663.         }
  1664.         if ( !_memicmp(v8, "*listmachine", 0xCu) && player )
  1665.         {
  1666.           v61 = ListMachine((int)IDBlockPointer);
  1667.           for ( i = 0; i < v61; ++i )
  1668.           {
  1669.             v63 = (const char *)ListMachineByIndex((int)IDBlockPointer, i);
  1670.             SendArenaMessage(player, v63, 0);
  1671.           }
  1672.           goto LABEL_187;
  1673.         }
  1674.         if ( !_memicmp(v8, "*log", 4u) && player )
  1675.         {
  1676.           v64 = 0;
  1677.           do
  1678.           {
  1679.             if ( LogArray[256 * (v64 + CurrentLogLine) % 48] )
  1680.               SendArenaMessage(player, &LogArray[256 * (v64 + CurrentLogLine) % 48], 0);
  1681.             ++v64;
  1682.           }
  1683.           while ( v64 < 48 );
  1684.           goto LABEL_187;
  1685.         }
  1686.         if ( !_memicmp(v8, "*shutdown", 9u) )
  1687.         {
  1688.           if ( player )
  1689.             SendArenaMessage(player, "Shutting down server...", 0);
  1690.           printf("Shutting down server...\n");
  1691.           v65 = v8 + 9;
  1692.           RecycleServer = 1;
  1693.           IsServerRunning = 1;
  1694.           ShutdownArguments = 0;
  1695.           ChatText = v65;
  1696.           if ( *v65 == 32 )
  1697.           {
  1698.             ++v65;
  1699.             ChatText = v65;
  1700.           }
  1701.           if ( *v65 )
  1702.             strcpy(&ShutdownArguments, v65);
  1703.           goto LABEL_187;
  1704.         }
  1705.         if ( !_memicmp(v8, "*sysop", 6u) )
  1706.         {
  1707.           if ( a4 != 5 || (v66 = ZonePlayerList[v10]) == 0 )
  1708.             goto LABEL_187;
  1709.           v67 = v66->isSysop;
  1710.           v68 = v67 == 0;
  1711.           v66->isSysop = v68;
  1712.           v66->isSuperModerator = v68;
  1713.           v66->isModerator = v68;
  1714.           v367 = 0;
  1715.           if ( v67 )
  1716.             v359 = "Player Sysop Mode OFF";
  1717.           else
  1718.             v359 = "Player Sysop Mode ON";
  1719.           goto LABEL_186;
  1720.         }
  1721.         if ( !_memicmp(v8, "*smoderator", 0xBu) )
  1722.         {
  1723.           if ( a4 != 5 || (v69 = ZonePlayerList[v10]) == 0 )
  1724.             goto LABEL_187;
  1725.           v70 = v69->isSuperModerator;
  1726.           v71 = v70 == 0;
  1727.           v69->isSuperModerator = v71;
  1728.           v69->isModerator = v71;
  1729.           v367 = 0;
  1730.           if ( v70 )
  1731.             v359 = "Player Super Moderator Mode OFF";
  1732.           else
  1733.             v359 = "Player Super Moderator Mode ON";
  1734.           goto LABEL_186;
  1735.         }
  1736.         if ( _memicmp(v8, "*s*", 3u) && _memicmp(v8, "*g*", 3u) )
  1737.         {
  1738.           if ( _memicmp(v8, "*set ", 5u) )
  1739.             goto LABEL_187;
  1740.           v72 = v8[5];
  1741.           v73 = (int)(v8 + 5);
  1742.           for ( j = Str1; v72; ++v73 )
  1743.           {
  1744.             if ( v72 == 58 )
  1745.               break;
  1746.             *j = v72;
  1747.             v72 = *(_BYTE *)(v73 + 1);
  1748.             ++j;
  1749.           }
  1750.           v75 = *(_BYTE *)v73;
  1751.           *j = 0;
  1752.           if ( !v75 )
  1753.             return;
  1754.           v76 = *(_BYTE *)(v73 + 1);
  1755.           v77 = v73 + 1;
  1756.           for ( k = array1; v76; ++v77 )
  1757.           {
  1758.             if ( v76 == 58 )
  1759.               break;
  1760.             *k = v76;
  1761.             v76 = *(_BYTE *)(v77 + 1);
  1762.             ++k;
  1763.           }
  1764.           v79 = *(_BYTE *)v77;
  1765.           *k = 0;
  1766.           if ( !v79 )
  1767.             return;
  1768.           v80 = *(_BYTE *)(v77 + 1);
  1769.           v81 = v77 + 1;
  1770.           for ( l = Dest; v80; ++v81 )
  1771.           {
  1772.             *l = v80;
  1773.             v80 = *(_BYTE *)(v81 + 1);
  1774.             ++l;
  1775.           }
  1776.           *l = 0;
  1777.           GetModuleFileNameA(0, StartupInfo, 256u);
  1778.           v83 = strrchr(StartupInfo, 92);
  1779.           if ( v83 )
  1780.             *v83 = 0;
  1781.           else
  1782.             StartupInfo[0] = 0;
  1783.           sprintf(array2, "%s\\server.cfg", StartupInfo);
  1784.           if ( _strcmpi(Str1, "All") )
  1785.           {
  1786.             WritePrivateProfileStringA(Str1, array1, Dest, array2);
  1787.           }
  1788.           else
  1789.           {
  1790.             WritePrivateProfileStringA("Warbird", array1, Dest, array2);
  1791.             WritePrivateProfileStringA("Javelin", array1, Dest, array2);
  1792.             WritePrivateProfileStringA("Spider", array1, Dest, array2);
  1793.             WritePrivateProfileStringA("Leviathan", array1, Dest, array2);
  1794.             WritePrivateProfileStringA("Weasel", array1, Dest, array2);
  1795.             WritePrivateProfileStringA("Terrier", array1, Dest, array2);
  1796.             WritePrivateProfileStringA("Lancaster", array1, Dest, array2);
  1797.             WritePrivateProfileStringA("Shark", array1, Dest, array2);
  1798.           }
  1799.           if ( !player )
  1800.             goto LABEL_187;
  1801.           v367 = 0;
  1802.           v359 = "Change complete";
  1803.           goto LABEL_186;
  1804.         }
  1805.         v84 = v8[3];
  1806.         v85 = (int)(v8 + 3);
  1807.         for ( m = Str1; v84; ++v85 )
  1808.         {
  1809.           if ( v84 == 58 )
  1810.             break;
  1811.           *m = v84;
  1812.           v84 = *(_BYTE *)(v85 + 1);
  1813.           ++m;
  1814.         }
  1815.         v87 = *(_BYTE *)v85;
  1816.         *m = 0;
  1817.         if ( !v87 )
  1818.           return;
  1819.         v88 = *(_BYTE *)(v85 + 1);
  1820.         v89 = v85 + 1;
  1821.         for ( n = array1; v88; ++v89 )
  1822.         {
  1823.           if ( v88 == 58 )
  1824.             break;
  1825.           *n = v88;
  1826.           v88 = *(_BYTE *)(v89 + 1);
  1827.           ++n;
  1828.         }
  1829.         *n = 0;
  1830.         if ( !_memicmp(v8, "*s*", 3u) )
  1831.         {
  1832.           if ( !*(_BYTE *)v89 )
  1833.             return;
  1834.           v91 = *(_BYTE *)(v89 + 1);
  1835.           v92 = v89 + 1;
  1836.           for ( ii = AppName; v91; ++v92 )
  1837.           {
  1838.             *ii = v91;
  1839.             v91 = *(_BYTE *)(v92 + 1);
  1840.             ++ii;
  1841.           }
  1842.           *ii = 0;
  1843.           WritePrivateProfileStringA(Str1, array1, AppName, FileName);
  1844.           dword_4D5920 = 1;
  1845.         }
  1846.         if ( !player )
  1847.           goto LABEL_187;
  1848.         GetPrivateProfileStringA(Str1, array1, "InvalidTag", StartupInfo, 64u, FileName);
  1849.         sprintf(Dest, "%s:%s:%s", Str1, array1, StartupInfo);
  1850.         v19 = Dest;
  1851.         v367 = 0;
  1852.       }
  1853.       else
  1854.       {
  1855.         v45 = v8[11];
  1856.         v46 = v8 + 11;
  1857.         ChatText = v46;
  1858.         if ( v45 == 32 )
  1859.         {
  1860.           do
  1861.             v47 = (v46++)[1];
  1862.           while ( v47 == 32 );
  1863.           ChatText = v46;
  1864.         }
  1865.         if ( !*v46 || (sub_407280((int)IDBlockPointer, v46), sub_407200(IDBlockPointer), !player) )
  1866.           goto LABEL_187;
  1867.         sprintf(array2, "MachineId Block Added: %s", v46);
  1868.         v19 = array2;
  1869.         v367 = 0;
  1870.       }
  1871.     }
  1872.     else
  1873.     {
  1874.       if ( a4 != 5 )
  1875.       {
  1876.         if ( !player->MyArena )
  1877.           goto LABEL_187;
  1878.         v20 = player->isEnergyShowing;
  1879.         player->isEnergyShowing = v20 == 0;
  1880.         v367 = 0;
  1881.         if ( v20 )
  1882.           v359 = "Showing Energy OFF";
  1883.         else
  1884.           v359 = "Showing Energy ON";
  1885.         goto LABEL_186;
  1886.       }
  1887.       v17 = ZonePlayerList[v10];
  1888.       if ( !v17 )
  1889.         goto LABEL_187;
  1890.       v18 = v17->isEnergyShowing;
  1891.       v17->isEnergyShowing = v18 == 0;
  1892.       if ( v18 )
  1893.       {
  1894.         v366 = (int)v17->Name;
  1895.         v358 = "Showing Energy OFF for %s";
  1896.         v353 = array2;
  1897.       }
  1898.       else
  1899.       {
  1900.         v366 = (int)v17->Name;
  1901.         v358 = "Showing Energy ON for %s";
  1902.         v353 = array2;
  1903.       }
  1904.       sprintf(v353, v358, v366);
  1905.       v19 = array2;
  1906.       v367 = 0;
  1907.     }
  1908.     v359 = v19;
  1909. LABEL_186:
  1910.     SendArenaMessage(player, v359, v367);
  1911.     goto LABEL_187;
  1912.   }
  1913.   if ( player )
  1914.   {
  1915.     a5[1] = player->MyArena;
  1916.     if ( a5[1] )
  1917.     {
  1918.       if ( v15 == 63 )
  1919.       {
  1920.         if ( !strcmp(ChatText, "?usage") )
  1921.         {
  1922.           HIDWORD(v201) = player->TotalUsageSeconds2;
  1923.           LODWORD(v201) = time(0);
  1924.           v202 = (signed __int64)difftime(v201, *(time_t *)v374);
  1925.           v203 = v202;
  1926.           LODWORD(v202) = (signed int)((_DWORD)v202 + ((unsigned __int64)(-2004318071i64 * (signed int)v202) >> 32)) >> 5;
  1927.           sprintf(
  1928.             array2,
  1929.             "Session Usage: %5d hours %d minutes",
  1930.             v203 / 3600,
  1931.             (signed int)(((unsigned int)v202 >> 31) + v202) % 60);
  1932.           SendArenaMessage(player, array2, 0);
  1933.           sprintf(
  1934.             array2,
  1935.             "  Total Usage: %5d hours %d minutes",
  1936.             (player->UsageTotalSeconds + v203) / 3600,
  1937.             (player->UsageTotalSeconds + v203) / 60 % 60);
  1938.           SendArenaMessage(player, array2, 0);
  1939.           sprintf(
  1940.             array2,
  1941.             " First played: %d-%d-%d %d:%d:%d",
  1942.             player->AccountCreationMonth,
  1943.             player->AccountCreationDay,
  1944.             player->AccountCreationYear,
  1945.             player->AccountCreationHour,
  1946.             player->AccountCreationMinute,
  1947.             player->AccountCreationSecond);
  1948.           SendArenaMessage(player, array2, 0);
  1949.           return;
  1950.         }
  1951.         if ( !strcmp(ChatText, "?sheep") )
  1952.         {
  1953.           SendArenaMessage(player, a5[1]->ServersideArenaSettings.MiscSheepMessage, 24);
  1954.           return;
  1955.         }
  1956.         v204 = 4;
  1957.         v205 = (int)"?buy";
  1958.         v206 = ChatText;
  1959.         v207 = 1;
  1960.         do
  1961.         {
  1962.           if ( !v204 )
  1963.             break;
  1964.           v207 = *v206++ == *(_BYTE *)v205++;
  1965.           --v204;
  1966.         }
  1967.         while ( v207 );
  1968.         if ( v207 )
  1969.         {
  1970.           v208 = ChatText + 4;
  1971.           Buf1b = ChatText + 4;
  1972.           while ( *v208 == 32 || *v208 == 61 )
  1973.             ++v208;
  1974.           Buf1a = v208;
  1975.           if ( *v208 )
  1976.           {
  1977.             if ( player->Ship == 8 )
  1978.             {
  1979.               SendArenaMessage(player, "Spectators cannot purchase items.", 0);
  1980.             }
  1981.             else
  1982.             {
  1983.               if ( a5[1]->ServersideArenaSettings.CostPurchaseAnytime || player->ShipTogglables & 0x20 )
  1984.               {
  1985.                 v226 = 0;
  1986.                 v227 = 0;
  1987.                 while ( _strcmpi(&player->MyArena->ServersideArenaSettings.char158[v227], Buf1a) )
  1988.                 {
  1989.                   v227 += 24;
  1990.                   ++v226;
  1991.                   if ( v227 >= 576 )
  1992.                     goto LABEL_529;
  1993.                 }
  1994.                 v228 = player->MyArena;
  1995.                 v229 = player->FlagPoints;
  1996.                 v230 = 24 * v226;
  1997.                 v231 = *(_DWORD *)&v228->ServersideArenaSettings.char158[24 * v226 + 16];
  1998.                 v232 = (int)&v228->ServersideArenaSettings.char158[24 * v226 + 16];
  1999.                 if ( v231 )
  2000.                 {
  2001.                   if ( v231 <= v229 + player->KillPoints )
  2002.                   {
  2003.                     v233 = *(_DWORD *)v232;
  2004.                     if ( *(_DWORD *)v232 <= v229 )
  2005.                     {
  2006.                       v370 = -v233;
  2007.                       v362 = 0;
  2008.                     }
  2009.                     else
  2010.                     {
  2011.                       v370 = -v229;
  2012.                       v362 = v229 - v233;
  2013.                     }
  2014.                     AppendPointsLog(player, v362, v370);
  2015.                     v234 = player->MyArena;
  2016.                     ExitCode[0] = 32;
  2017.                     *(_WORD *)&ExitCode[3] = *(_WORD *)((char *)&v234->ServersideArenaSettings.dword16C + v230);
  2018.                     *(_WORD *)&ExitCode[1] = 1;
  2019.                     SendPlayerReliablePacket(player, ExitCode, 5, 1);
  2020.                     v235 = player->FlagPoints;
  2021.                     v236 = player->KillPoints;
  2022.                     v385 = player->PlayerId;
  2023.                     v237 = player->CurrentWins;
  2024.                     v387 = v235;
  2025.                     v386 = v236;
  2026.                     LOWORD(v236) = player->CurrentLosses;
  2027.                     v388 = v237;
  2028.                     v238 = *(_DWORD *)&player->CurrentWins;
  2029.                     *(_WORD *)v389 = v236;
  2030.                     v239 = *(_DWORD *)&player->GoalCount;
  2031.                     player->dword23F = v238;
  2032.                     v240 = *(int *)((char *)&player->KillPoints + 2);
  2033.                     v384 = 9;
  2034.                     *(_DWORD *)&player->dword243 = v239;
  2035.                     LOWORD(v239) = HIWORD(player->FlagPoints);
  2036.                     *(_DWORD *)&player->dword247 = v240;
  2037.                     LOWORD(player->word24B) = v239;
  2038.                     SendPlayerReliablePacket(player, &v384, 15, 1);
  2039.                     if ( *(_DWORD *)&player->MyArena->ServersideArenaSettings.char158[v230 + 16] > 500 )
  2040.                       sub_40E040(player, &v384, 15, 0);
  2041.                   }
  2042.                   else
  2043.                   {
  2044.                     SendArenaMessage(player, "You do not have enough points to purchase that item.", 0);
  2045.                   }
  2046.                 }
  2047.                 else
  2048.                 {
  2049.                   SendArenaMessage(player, "That item is not available for purchase.", 0);
  2050.                 }
  2051. LABEL_529:
  2052.                 if ( v226 == 24 )
  2053.                   SendArenaMessage(player, "Invalid item specified for purchase.", 0);
  2054.               }
  2055.               else
  2056.               {
  2057.                 SendArenaMessage(player, "You must be in safe zone to purchase items.", 0);
  2058.               }
  2059.             }
  2060.           }
  2061.           else
  2062.           {
  2063.             array2[0] = 0;
  2064.             v209 = 0;
  2065.             do
  2066.             {
  2067.               v210 = (char *)player->MyArena + v209;
  2068.               v211 = *(_DWORD *)(v210 + 109982);
  2069.               if ( v211 > 0 )
  2070.               {
  2071.                 sprintf(Dest, "%s=%d", v210 + 109966, v211);
  2072.                 if ( strlen(Dest) + strlen(array2) > 0x4B )
  2073.                 {
  2074.                   SendArenaMessage(player, array2, 0);
  2075.                   array2[0] = 0;
  2076.                 }
  2077.                 v212 = (int)" ";
  2078.                 if ( !array2[0] )
  2079.                   v212 = (int)"PRICE: ";
  2080.                 v213 = -1;
  2081.                 do
  2082.                 {
  2083.                   if ( !v213 )
  2084.                     break;
  2085.                   v60 = *(_BYTE *)v212++ == 0;
  2086.                   --v213;
  2087.                 }
  2088.                 while ( !v60 );
  2089.                 v214 = ~v213;
  2090.                 v215 = (const void *)(v212 - v214);
  2091.                 v216 = array2;
  2092.                 v217 = v214;
  2093.                 v218 = -1;
  2094.                 do
  2095.                 {
  2096.                   if ( !v218 )
  2097.                     break;
  2098.                   v60 = *v216++ == 0;
  2099.                   --v218;
  2100.                 }
  2101.                 while ( !v60 );
  2102.                 memcpy(v216 - 1, v215, v217);
  2103.                 v219 = Dest;
  2104.                 v220 = -1;
  2105.                 do
  2106.                 {
  2107.                   if ( !v220 )
  2108.                     break;
  2109.                   v60 = *v219++ == 0;
  2110.                   --v220;
  2111.                 }
  2112.                 while ( !v60 );
  2113.                 v221 = ~v220;
  2114.                 v222 = &v219[-v221];
  2115.                 v223 = array2;
  2116.                 v224 = v221;
  2117.                 v225 = -1;
  2118.                 do
  2119.                 {
  2120.                   if ( !v225 )
  2121.                     break;
  2122.                   v60 = *v223++ == 0;
  2123.                   --v225;
  2124.                 }
  2125.                 while ( !v60 );
  2126.                 memcpy(v223 - 1, v222, v224);
  2127.               }
  2128.               v209 += 24;
  2129.             }
  2130.             while ( v209 < 576 );
  2131.             if ( array2[0] )
  2132.               SendArenaMessage(player, array2, 0);
  2133.           }
  2134.           return;
  2135.         }
  2136.         if ( !strcmp(ChatText, "?zone") )
  2137.         {
  2138.           SendArenaMessage(player, BillingServerName, 0);
  2139.           return;
  2140.         }
  2141.         if ( !strcmp(ChatText, "?userid") )
  2142.         {
  2143.           sprintf(Dest, "UserId:%d", player->UserId);
  2144.           SendArenaMessage(player, Dest, 0);
  2145.           return;
  2146.         }
  2147.         if ( !strcmp(ChatText, "?owner") )
  2148.         {
  2149.           sprintf(Dest, "Arena Owner:%s", a5[1]->ServersideArenaSettings.OwnerName);
  2150.           SendArenaMessage(player, Dest, 0);
  2151.           return;
  2152.         }
  2153.         if ( !strcmp(ChatText, "?getsettings") )
  2154.         {
  2155.           if ( player->isSysop
  2156.             || (v241 = a5[1]->ServersideArenaSettings.OwnerUserId, player->UserId == v241) && v241 >= 0 )
  2157.           {
  2158.             SendArenaMessage(player, "File being sent, please wait.", 0);
  2159.             v242 = player->MyArena;
  2160.             v400[0] = 16;
  2161.             v243 = strrchr(v242->szConfigFile, 92);
  2162.             if ( v243 )
  2163.             {
  2164.               strcpy(&v400[1], v243 + 1);
  2165.               v244 = strrchr(&v400[1], 46);
  2166.               if ( v244 )
  2167.                 strcpy(v244, ".set");
  2168.               v245 = &v400[17];
  2169.               v246 = (int)operator new(0x2B74Cu);
  2170.               *(_DWORD *)ExitCode = v246;
  2171.               v403 = 0;
  2172.               if ( v246 )
  2173.               {
  2174.                 v247 = (ARENA *)sub_406210(v246, player->MyArena->szConfigFile);
  2175.                 a5[0] = v247;
  2176.               }
  2177.               else
  2178.               {
  2179.                 a5[0] = 0;
  2180.                 v247 = 0;
  2181.               }
  2182.               v403 = -1;
  2183.               v376 = 0;
  2184.               if ( TotalTemplateSSSEntries > 0 )
  2185.               {
  2186.                 v248 = TotalTemplateSSSList[0].SomeString256;
  2187.                 do
  2188.                 {
  2189.                   if ( !v248[256] || v9->isSysop )
  2190.                   {
  2191.                     if ( _strcmpi(v248 - 80, "All") )
  2192.                     {
  2193.                       sub_4066B0(
  2194.                         (int)a5[0],
  2195.                         v248 - 80,
  2196.                         v248 - 48,
  2197.                         (const char *)&DirectoryCurrentNamePassword,
  2198.                         Dest,
  2199.                         0x100u);
  2200.                       v251 = *((_DWORD *)v248 - 2);
  2201.                       if ( v251 == -999 )
  2202.                         sprintf(v245, "%s:%s:%s:::%s\r\n", v248 - 80, v248 - 48, Dest, v248);
  2203.                       else
  2204.                         sprintf(
  2205.                           v245,
  2206.                           "%s:%s:%s:%d:%d:%s\r\n",
  2207.                           v248 - 80,
  2208.                           v248 - 48,
  2209.                           Dest,
  2210.                           v251,
  2211.                           *((_DWORD *)v248 - 1),
  2212.                           v248);
  2213.                       v245 += strlen(v245);
  2214.                     }
  2215.                     else
  2216.                     {
  2217.                       v249 = (signed int)off_42C848;
  2218.                       do
  2219.                       {
  2220.                         sub_4066B0(
  2221.                           (int)a5[0],
  2222.                           *(const char **)v249,
  2223.                           v248 - 48,
  2224.                           (const char *)&DirectoryCurrentNamePassword,
  2225.                           array2,
  2226.                           256u);
  2227.                         if ( v249 <= (signed int)off_42C848 )
  2228.                         {
  2229.                           v250 = *((_DWORD *)v248 - 2);
  2230.                           if ( v250 == -999 )
  2231.                             sprintf(v245, "%s:%s:%s:::%s\r\n", *(_DWORD *)v249, v248 - 48, array2, v248);
  2232.                           else
  2233.                             sprintf(
  2234.                               v245,
  2235.                               "%s:%s:%s:%d:%d:%s\r\n",
  2236.                               *(_DWORD *)v249,
  2237.                               v248 - 48,
  2238.                               array2,
  2239.                               v250,
  2240.                               *((_DWORD *)v248 - 1),
  2241.                               v248);
  2242.                         }
  2243.                         else
  2244.                         {
  2245.                           sprintf(v245, "%s:%s:%s:*\r\n", *(_DWORD *)v249, v248 - 48, array2);
  2246.                         }
  2247.                         v249 += 4;
  2248.                         v245 += strlen(v245);
  2249.                       }
  2250.                       while ( v249 < (signed int)"Spawned Command" );
  2251.                     }
  2252.                   }
  2253.                   v9 = player;
  2254.                   v248 += 338;
  2255.                   ++v376;
  2256.                 }
  2257.                 while ( v376 < TotalTemplateSSSEntries );
  2258.                 v247 = a5[0];
  2259.               }
  2260.               SendPlayerReliablePacket(v9, v400, v245 - v400, 1);
  2261.               if ( v247 )
  2262.               {
  2263.                 sub_4063F0((int)v247);
  2264.                 operator delete(v247);
  2265.               }
  2266.             }
  2267.           }
  2268.           else
  2269.           {
  2270.             SendArenaMessage(player, "Only the owner of this arena can view the settings.", 0);
  2271.           }
  2272.           return;
  2273.         }
  2274.         v252 = 10;
  2275.         v253 = (int)"?setlevel ";
  2276.         v254 = ChatText;
  2277.         v255 = 1;
  2278.         do
  2279.         {
  2280.           if ( !v252 )
  2281.             break;
  2282.           v255 = *v254++ == *(_BYTE *)v253++;
  2283.           --v252;
  2284.         }
  2285.         while ( v255 );
  2286.         if ( v255 )
  2287.         {
  2288.           if ( player->isSysop
  2289.             || (v256 = a5[1]->ServersideArenaSettings.OwnerUserId, player->UserId == v256) && v256 >= 0 )
  2290.           {
  2291.             buf[0] = 25;
  2292.             strncpy(&buf[1], ChatText + 10, 256u);
  2293.             v257 = player->MyArena->szLevelFile2;
  2294.             buf[256] = 0;
  2295.             strncpy(&buf[257], v257, 0x10u);
  2296.             buf[272] = 0;
  2297.             SendPlayerReliablePacket(player, buf, 273, 1);
  2298.           }
  2299.           else
  2300.           {
  2301.             SendArenaMessage(player, "Only the owner of this arena can change the level.", 0);
  2302.           }
  2303.           return;
  2304.         }
  2305.         if ( !strcmp(ChatText, "?recycle") )
  2306.         {
  2307.           if ( player->isSysop || player->UserId == a5[1]->ServersideArenaSettings.OwnerUserId )
  2308.             a5[1]->field_10026 = 1;
  2309.           else
  2310.             SendArenaMessage(player, "Only the owner of this arena can recycle it.", 0);
  2311.           return;
  2312.         }
  2313.         if ( !strcmp(ChatText, "?spec") )
  2314.         {
  2315.           v258 = a5[1];
  2316.           array2[0] = 0;
  2317.           v376 = 0;
  2318.           if ( a5[1]->ArenaPlayerCount > 0 )
  2319.           {
  2320.             v259 = 16072;
  2321.             do
  2322.             {
  2323.               v260 = v258->PlayerPointers[v259];
  2324.               v261 = 0;
  2325.               if ( player->isSuperModerator )
  2326.               {
  2327.                 if ( v260->Ship == 8 )
  2328.                 {
  2329.                   if ( v260->ArenaPlayerIndex < 0 )
  2330.                   {
  2331.                     v262 = (signed int)v260->XPixels - (signed int)player->XPixels;
  2332.                     if ( (signed int)((HIDWORD(v262) ^ v262) - HIDWORD(v262)) < 1280 )
  2333.                     {
  2334.                       v263 = (signed int)v260->YPixels - (signed int)player->YPixels;
  2335.                       if ( (signed int)((HIDWORD(v263) ^ v263) - HIDWORD(v263)) < 1024 )
  2336.                         v261 = 1;
  2337.                     }
  2338.                   }
  2339.                 }
  2340.               }
  2341.               if ( (v260->ArenaPlayerIndex == *(_DWORD *)&player->PlayerId || v261)
  2342.                 && (player->isSysop || !v260->isModerator) )
  2343.               {
  2344.                 if ( v261 )
  2345.                 {
  2346.                   v371 = (int)v260->Name;
  2347.                   v363 = "*%s";
  2348.                   v355 = Dest;
  2349.                 }
  2350.                 else
  2351.                 {
  2352.                   v371 = (int)v260->Name;
  2353.                   v363 = "%s";
  2354.                   v355 = Dest;
  2355.                 }
  2356.                 sprintf(v355, v363, v371);
  2357.                 if ( strlen(Dest) + strlen(array2) > 0x4B )
  2358.                 {
  2359.                   SendArenaMessage(player, array2, 0);
  2360.                   array2[0] = 0;
  2361.                 }
  2362.                 v264 = (int)",";
  2363.                 if ( !array2[0] )
  2364.                   v264 = (int)"SPEC: ";
  2365.                 v265 = -1;
  2366.                 do
  2367.                 {
  2368.                   if ( !v265 )
  2369.                     break;
  2370.                   v60 = *(_BYTE *)v264++ == 0;
  2371.                   --v265;
  2372.                 }
  2373.                 while ( !v60 );
  2374.                 v266 = ~v265;
  2375.                 v267 = (const void *)(v264 - v266);
  2376.                 v268 = array2;
  2377.                 v269 = v266;
  2378.                 v270 = -1;
  2379.                 do
  2380.                 {
  2381.                   if ( !v270 )
  2382.                     break;
  2383.                   v60 = *v268++ == 0;
  2384.                   --v270;
  2385.                 }
  2386.                 while ( !v60 );
  2387.                 memcpy(v268 - 1, v267, v269);
  2388.                 v271 = Dest;
  2389.                 v272 = -1;
  2390.                 do
  2391.                 {
  2392.                   if ( !v272 )
  2393.                     break;
  2394.                   v60 = *v271++ == 0;
  2395.                   --v272;
  2396.                 }
  2397.                 while ( !v60 );
  2398.                 v273 = ~v272;
  2399.                 v274 = &v271[-v273];
  2400.                 v275 = array2;
  2401.                 v276 = v273;
  2402.                 v277 = -1;
  2403.                 do
  2404.                 {
  2405.                   if ( !v277 )
  2406.                     break;
  2407.                   v60 = *v275++ == 0;
  2408.                   --v277;
  2409.                 }
  2410.                 while ( !v60 );
  2411.                 memcpy(v275 - 1, v274, v276);
  2412.               }
  2413.               v258 = player->MyArena;
  2414.               ++v259;
  2415.               v278 = v258->ArenaPlayerCount;
  2416.               ++v376;
  2417.             }
  2418.             while ( v376 < v278 );
  2419.           }
  2420.           if ( array2[0] )
  2421.             SendArenaMessage(player, array2, 0);
  2422.           return;
  2423.         }
  2424.         if ( !strcmp(ChatText, "?packetloss") )
  2425.         {
  2426.           sub_41CB70((int)&player->encryptionPointer->ConnectionStatus, (int)a5, (int)&v377);
  2427.           v279 = 1000 - v377;
  2428.           v60 = (ARENA *)1000 == a5[0];
  2429.           a5[0] = (ARENA *)(1000 - (unsigned int)a5[0]);
  2430.           v377 = 1000 - v377;
  2431.           if ( !v60 || v279 )
  2432.             sprintf(
  2433.               array2,
  2434.               "PACKET LOSS ServerToYou:%.1f%%  YouToServer:%.1f%%",
  2435.               (double)*(signed int *)a5 * dword_429008,
  2436.               (double)v377 * dword_429008);
  2437.           else
  2438.             sprintf(array2, "PACKET LOSS Unknown, check again in a few minutes.");
  2439.           SendArenaMessage(player, array2, 0);
  2440.           return;
  2441.         }
  2442.         if ( !strcmp(ChatText, "?jackpot") )
  2443.         {
  2444.           sprintf(Dest, "Current Jackpot: %d", a5[1]->ArenaJackpot);
  2445.           SendArenaMessage(player, Dest, 0);
  2446.           return;
  2447.         }
  2448.         if ( !strcmp(ChatText, "?crown") )
  2449.         {
  2450.           if ( a5[1]->ServersideArenaSettings.KingDeathCount <= 0
  2451.             || a5[1]->ServersideArenaSettings.KingCrownRecoverKills <= 0 )
  2452.           {
  2453.             SendArenaMessage(player, "This is not a king of the hill style game or crowns cannot be recovered.", 0);
  2454.           }
  2455.           else
  2456.           {
  2457.             if ( player->KotHDeathCount <= 0 )
  2458.             {
  2459.               sprintf(
  2460.                 Dest,
  2461.                 "Kills needed for crown: %d",
  2462.                 a5[1]->ServersideArenaSettings.KingCrownRecoverKills - player->KingCrownKills);
  2463.               SendArenaMessage(player, Dest, 0);
  2464.             }
  2465.             else
  2466.             {
  2467.               SendArenaMessage(player, "You already have a crown.", 0);
  2468.             }
  2469.           }
  2470.           return;
  2471.         }
  2472.         if ( !strcmp(ChatText, "?score") )
  2473.         {
  2474.           GetScore(a5[1], (int)player);
  2475.           return;
  2476.         }
  2477.         if ( !strcmp(ChatText, "?arena") )
  2478.         {
  2479.           v280 = 0;
  2480.           v399[0] = 47;
  2481.           v281 = &v399[1];
  2482.           v376 = 0;
  2483.           if ( ArenaArrayLength > 0 )
  2484.           {
  2485.             a5[0] = (ARENA *)Arenas;
  2486.             do
  2487.             {
  2488.               if ( BYTE3(a5[0]->PlayerPointers[0][74].UserId) != 35
  2489.                 || player->isModerator
  2490.                 || player->MyArena == (ARENA *)a5[0]->PlayerPointers[0] )
  2491.               {
  2492.                 if ( BYTE3(a5[0]->PlayerPointers[0][74].UserId) )
  2493.                 {
  2494.                   v372 = (char *)&a5[0]->PlayerPointers[0][74].UserId + 3;
  2495.                   v364 = "%s";
  2496.                   v356 = array2;
  2497.                 }
  2498.                 else
  2499.                 {
  2500.                   v372 = (char *)v280;
  2501.                   v364 = "%d";
  2502.                   v356 = array2;
  2503.                 }
  2504.                 sprintf(v356, v364, v372);
  2505.                 strcpy(v281, array2);
  2506.                 v282 = (unsigned int)&v281[strlen(array2) + 1];
  2507.                 v283 = a5[0]->PlayerPointers[0];
  2508.                 if ( a5[0]->PlayerPointers[0] == (PLAYER *)player->MyArena )
  2509.                   *(_WORD *)v282 = -*(_WORD *)&v283[75].TypedName[18];
  2510.                 else
  2511.                   *(_WORD *)v282 = *(_WORD *)&v283[75].TypedName[18];
  2512.                 v280 = v376;
  2513.                 v281 = (char *)(v282 + 2);
  2514.               }
  2515.               ++v280;
  2516.               v376 = v280;
  2517.               a5[0] = (ARENA *)((char *)a5[0] + 4);
  2518.             }
  2519.             while ( v280 < ArenaArrayLength );
  2520.           }
  2521.           SendPlayerReliablePacket(player, v399, v281 - v399, 1);
  2522.           return;
  2523.         }
  2524.         if ( !strcmp(ChatText, "?time") )
  2525.         {
  2526.           if ( a5[1]->ServersideArenaSettings.MiscTimedGame <= 0 )
  2527.           {
  2528.             if ( a5[1]->GameTimeStart )
  2529.             {
  2530.               v285 = player->MyArena->GameTimeStart - abs(GetTickCount() / 0xA - player->MyArena->GameTimePassed);
  2531.               if ( v285 < 0 )
  2532.                 v285 = 0;
  2533.               sprintf(array2, "Time left: %d minutes %d seconds", v285 / 6000, v285 % 6000 / 100);
  2534.               SendArenaMessage(player, array2, 0);
  2535.             }
  2536.             else
  2537.             {
  2538.               if ( player->isModerator )
  2539.               {
  2540.                 v286 = player->MyArena->ServersideArenaSettings.TerritoryRewardDelay
  2541.                      - abs(GetTickCount() / 0xA - player->MyArena->TerritoryRewardTimePassed);
  2542.                 if ( v286 < 0 )
  2543.                   v286 = 0;
  2544.                 sprintf(array2, "Time left to reward: %d minutes %d seconds", v286 / 6000, v286 % 6000 / 100);
  2545.                 SendArenaMessage(player, array2, 0);
  2546.               }
  2547.               else
  2548.               {
  2549.                 SendArenaMessage(player, "This zone does not have a game time limit", 0);
  2550.               }
  2551.             }
  2552.           }
  2553.           else
  2554.           {
  2555.             v284 = player->MyArena->ServersideArenaSettings.MiscTimedGame
  2556.                  - abs(GetTickCount() / 0xA - player->MyArena->GameTimePassedTwo);
  2557.             if ( v284 < 0 )
  2558.               v284 = 0;
  2559.             sprintf(array2, "Time left: %d minutes %d seconds", v284 / 6000, v284 % 6000 / 100);
  2560.             SendArenaMessage(player, array2, 0);
  2561.           }
  2562.           return;
  2563.         }
  2564.         if ( !strcmp(ChatText, "?best") )
  2565.         {
  2566.           if ( a5[1]->ServersideArenaSettings.MiscTimedGame <= 0 )
  2567.           {
  2568.             v373 = player->CurrentLosses;
  2569.             v365 = player->CurrentWins;
  2570.             v357 = player->KillPoints + player->FlagPoints;
  2571.             v352 = "CURRENT SCORE  Points:%d  Win:%d  Lose:%d";
  2572.             v351 = Dest;
  2573.           }
  2574.           else
  2575.           {
  2576.             v373 = player->PersonalBestLosses;
  2577.             v365 = player->PersonalBestWins;
  2578.             v357 = *(_DWORD *)&player->PersonalBestPoints1of2 + *(_DWORD *)&player->PersonalBestPoints2of2;
  2579.             v352 = "PERSONAL BEST  Points:%d  Win:%d  Lose:%d";
  2580.             v351 = Dest;
  2581.           }
  2582.           sprintf(v351, v352, v357, v365, v373);
  2583.           SendArenaMessage(player, Dest, 0);
  2584.           return;
  2585.         }
  2586.         v287 = 5;
  2587.         v288 = (int)"?set ";
  2588.         v289 = ChatText;
  2589.         v290 = 1;
  2590.         do
  2591.         {
  2592.           if ( !v287 )
  2593.             break;
  2594.           v290 = *v289++ == *(_BYTE *)v288++;
  2595.           --v287;
  2596.         }
  2597.         while ( v290 );
  2598.         if ( v290 )
  2599.           goto LABEL_845;
  2600.         v291 = 5;
  2601.         v292 = (int)"?get ";
  2602.         v293 = ChatText;
  2603.         v294 = 1;
  2604.         do
  2605.         {
  2606.           if ( !v291 )
  2607.             break;
  2608.           v294 = *v293++ == *(_BYTE *)v292++;
  2609.           --v291;
  2610.         }
  2611.         while ( v294 );
  2612.         if ( v294 )
  2613.         {
  2614. LABEL_845:
  2615.           v295 = 0;
  2616.           if ( player->isSysop
  2617.             || (v296 = player->UserId, v296 >= 0)
  2618.             && a5[1]->bHasScrFile
  2619.             && a5[1]->ServersideArenaSettings.OwnerUserId == v296 )
  2620.             v295 = 1;
  2621.           if ( v295 )
  2622.           {
  2623.             v297 = ChatText[5];
  2624.             v298 = ChatText + 5;
  2625.             for ( jj = AppName; v297; ++v298 )
  2626.             {
  2627.               if ( v297 == 58 )
  2628.                 break;
  2629.               *jj = v297;
  2630.               v297 = v298[1];
  2631.               ++jj;
  2632.             }
  2633.             v300 = *v298;
  2634.             *jj = 0;
  2635.             if ( v300 )
  2636.             {
  2637.               v301 = v298[1];
  2638.               v302 = (int)(v298 + 1);
  2639.               for ( kk = Str1; v301; ++v302 )
  2640.               {
  2641.                 if ( v301 == 61 )
  2642.                   break;
  2643.                 if ( v301 == 58 )
  2644.                   break;
  2645.                 *kk = v301;
  2646.                 v301 = *(_BYTE *)(v302 + 1);
  2647.                 ++kk;
  2648.               }
  2649.               v304 = *(_BYTE *)v302;
  2650.               *kk = 0;
  2651.               if ( v304 )
  2652.                 ++v302;
  2653.               strcpy(Dest, (const char *)v302);
  2654.               if ( _memicmp(ChatText, "?set ", 5u)
  2655.                 || (sprintf(StartupInfo, "%s:%s:%s", AppName, Str1, Dest),
  2656.                     !ChangeSettings(player->MyArena, player, StartupInfo)) )
  2657.               {
  2658.                 if ( !_strcmpi(AppName, "All") )
  2659.                   strcpy(AppName, "Warbird");
  2660.                 GetPrivateProfileStringA(AppName, Str1, "InvalidTag", array2, 128u, player->MyArena->szConfigFile);
  2661.                 sprintf(buf, "%s:%s=%s", AppName, Str1, array2);
  2662.                 SendArenaMessage(player, buf, 0);
  2663.               }
  2664.             }
  2665.           }
  2666.           else
  2667.           {
  2668.             SendArenaMessage(player, "You do not have permission to set parameters in this arena.", 0);
  2669.           }
  2670.           return;
  2671.         }
  2672.         if ( isalpha(ChatText[1]) )
  2673.         {
  2674.           if ( BillingConnectionStructPointer )
  2675.             SendBillerUserCommandPacket(player->BillerPlayerId, ChatText);
  2676.           return;
  2677.         }
  2678.       }
  2679.     }
  2680.   }
  2681.   v305 = buf;
  2682.   v306 = (int *)ChatText;
  2683.   if ( *ChatText )
  2684.   {
  2685.     do
  2686.     {
  2687.       if ( isalpha(*(_BYTE *)v306) )
  2688.         *v305++ = toupper(*(_BYTE *)v306);
  2689.       v307 = *((_BYTE *)v306 + 1);
  2690.       v306 = (int *)((char *)v306 + 1);
  2691.     }
  2692.     while ( v307 );
  2693.   }
  2694.   v308 = (int)ObscenePointer;
  2695.   *v305 = 0;
  2696.   v309 = ListMachine(v308);
  2697.   v310 = 0;
  2698.   if ( v309 <= 0 )
  2699.   {
  2700. LABEL_711:
  2701.     a5[0] = 0;
  2702.     v312 = (ARENA *)1;
  2703.   }
  2704.   else
  2705.   {
  2706.     while ( 1 )
  2707.     {
  2708.       v311 = (const char *)ListMachineByIndex((int)ObscenePointer, v310);
  2709.       if ( strstr(buf, v311) )
  2710.         break;
  2711.       ++v310;
  2712.       if ( v310 >= v309 )
  2713.         goto LABEL_711;
  2714.     }
  2715.     v312 = (ARENA *)1;
  2716.     a5[0] = (ARENA *)1;
  2717.   }
  2718.   a5[1] = 0;
  2719.   if ( player )
  2720.   {
  2721.     if ( player->Ship == 8 && player->MyArena->ServersideArenaSettings.MiscSpectatorQuiet && !player->isModerator )
  2722.       a5[1] = v312;
  2723.     if ( (signed int)(GetTickCount() / 0xA - player->GetTickCountValueDividedByTen2) >= 100 )
  2724.     {
  2725.       player->dword293 = 0;
  2726.     }
  2727.     else
  2728.     {
  2729.       v313 = player->MyArena;
  2730.       v314 = player->dword293 + 1;
  2731.       player->dword293 = v314;
  2732.       if ( v314 > v313->ServersideArenaSettings.MessageQuickMessageLimit && !player->isSysop )
  2733.       {
  2734.         WriteSubGameLog("Played kicked off for message flooding: %s\n", player->PlayerName);
  2735.         player->DisconnectReason = 12;
  2736.         player->AlreadySentReliablePacket = v312;
  2737.         SendArenaMessagePlayer(player, "WARNING: You have been disconnected for message flooding.", 0);
  2738.         return;
  2739.       }
  2740.     }
  2741.     player->GetTickCountValueDividedByTen2 = GetTickCount() / 0xA;
  2742.   }
  2743.   v315 = a4;
  2744.   if ( (ARENA *)a4 == v312 || a4 == 2 )
  2745.   {
  2746.     if ( player )
  2747.     {
  2748.       if ( player->MyArena )
  2749.       {
  2750.         v316 = (signed int)(GetTickCount() / 0xA - player->MyArena->GameTimePassedTwo);
  2751.         if ( (signed int)((HIDWORD(v316) ^ v316) - HIDWORD(v316)) < 600
  2752.           || (v317 = (signed int)(GetTickCount() / 0xA - player->MyArena->GetTickCountValue8),
  2753.               (signed int)((HIDWORD(v317) ^ v317) - HIDWORD(v317)) < 500)
  2754.           || (v318 = (signed int)(GetTickCount() / 0xA - player->MyArena->TerritoryRewardTimePassed),
  2755.               (signed int)((HIDWORD(v318) ^ v318) - HIDWORD(v318)) < 500) )
  2756.           return;
  2757.       }
  2758.     }
  2759.     v319 = (const char *)&DirectoryCurrentNamePassword;
  2760.     v376 = (int)&DirectoryCurrentNamePassword;
  2761.     if ( player )
  2762.     {
  2763.       v319 = player->Name;
  2764.       v376 = (int)player->Name;
  2765.     }
  2766.     if ( *v319 && ChatCounter64Max > 0 )
  2767.     {
  2768.       if ( !strcmp((const char *)&dword_431FC8[91 * ChatCounter64Max], v319)
  2769.         && !strcmp((const char *)&dword_431E9C[91 * ChatCounter64Max], ChatText) )
  2770.         return;
  2771.       v319 = (const char *)v376;
  2772.     }
  2773.     v320 = 364 * ChatCounter64Max + 4399112;
  2774.     v321 = (char *)(364 * ChatCounter64Max + 4399112);
  2775.     ChatCounter64Max = (unsigned __int8)((char)(ChatCounter64Max + 1) % -64);
  2776.     strncpy(v321, ChatText, 0x12Cu);
  2777.     v322 = v320 + 300;
  2778.     *(_BYTE *)(v320 + 299) = 0;
  2779.     strncpy((char *)(v320 + 300), v319, 0x20u);
  2780.     v320 += 332;
  2781.     *(_BYTE *)(v322 + 31) = 0;
  2782.     strncpy((char *)v320, "(Everyone)", 0x20u);
  2783.     *(_BYTE *)(v320 + 31) = 0;
  2784.     if ( player )
  2785.     {
  2786.       v323 = player->MyArena;
  2787.       if ( v323 )
  2788.         FormatMessageArena(v323, "%16.16s>%s\n", v322, ChatText);
  2789.     }
  2790.     v315 = a4;
  2791.   }
  2792.   v398[0] = 7;
  2793.   v398[1] = v315;
  2794.   v398[2] = a7;
  2795.   if ( v315 == 7 )
  2796.   {
  2797.     if ( !player
  2798.       || (v324 = player->MyArena) == 0
  2799.       || player->isModerator
  2800.       || v324->SpecMessageLock && player->Ship != 8
  2801.       || !v324->PrivateMessagesLocked )
  2802.     {
  2803.       *(_WORD *)&v398[3] = 0;
  2804.       v325 = strchr(ChatText + 1, 58);
  2805.       *(_DWORD *)ExitCode = v325;
  2806.       if ( v325 )
  2807.       {
  2808.         v326 = v325 - ChatText - 1;
  2809.         Size = v326;
  2810.         memcpy(array2, ChatText + 1, v326);
  2811.         v327 = 0;
  2812.         v60 = ArenaArrayLength == 0;
  2813.         v328 = ArenaArrayLength < 0;
  2814.         array2[v326] = 0;
  2815.         v377 = 0;
  2816.         v376 = 0;
  2817.         if ( !(v328 | v60) )
  2818.         {
  2819.           v329 = Arenas;
  2820.           do
  2821.           {
  2822.             v330 = *v329;
  2823.             v331 = 0;
  2824.             if ( (*v329)->ArenaPlayerCount > 0 )
  2825.             {
  2826.               v332 = 16072;
  2827.               while ( _strcmpi(array2, v330->PlayerPointers[v332]->Name) )
  2828.               {
  2829.                 if ( !v377 && player && !_memicmp(array2, (*v329)->PlayerPointers[v332]->Name, Size) )
  2830.                   v377 = (int)(*v329)->PlayerPointers[v332];
  2831.                 v330 = *v329;
  2832.                 ++v331;
  2833.                 ++v332;
  2834.                 if ( v331 >= (*v329)->ArenaPlayerCount )
  2835.                   goto LABEL_761;
  2836.               }
  2837.               v377 = (int)(*v329)->playerPointersForSomething[v331];
  2838.             }
  2839. LABEL_761:
  2840.             ++v329;
  2841.             ++v376;
  2842.           }
  2843.           while ( v376 < ArenaArrayLength );
  2844.           v326 = Size;
  2845.           v325 = *(char **)ExitCode;
  2846.           v327 = (PLAYER *)v377;
  2847.         }
  2848.         if ( v327 )
  2849.         {
  2850.           if ( player )
  2851.             sprintf(&v398[5], "(%s)>%s", player->Name, v325 + 1);
  2852.           else
  2853.             sprintf(&v398[5], "%s", v325 + 1);
  2854.           sub_40E000(v327, v398, strlen(&v398[5]) + 6, 1, (int)a5[0], a5[1]);
  2855.         }
  2856.         else
  2857.         {
  2858.           if ( player )
  2859.           {
  2860.             buf[0] = 2;
  2861.             buf[1] = a7;
  2862.             sprintf(&buf[2], ":%s:(%s)>%s", array2, player->Name, v325 + 1);
  2863.             if ( BillingConnectionStructPointer )
  2864.               SendBillerUserPrivateChatPacket(-1, BillingGroupId, buf, strlen(&buf[2]) + 3);
  2865.           }
  2866.           else
  2867.           {
  2868.             if ( array2[0] == 35 )
  2869.             {
  2870.               if ( v326 > 2 )
  2871.               {
  2872.                 if ( array2[1] != 32 )
  2873.                 {
  2874.                   sprintf(&v398[5], "%s", v325 + 1);
  2875.                   v333 = strlen(&v398[5]) + 1;
  2876.                   v376 = 0;
  2877.                   if ( ArenaArrayLength > 0 )
  2878.                   {
  2879.                     v334 = Arenas;
  2880.                     do
  2881.                     {
  2882.                       v335 = 0;
  2883.                       if ( (*v334)->ArenaPlayerCount > 0 )
  2884.                       {
  2885.                         v336 = 16072;
  2886.                         do
  2887.                         {
  2888.                           if ( !_strcmpi(&array2[1], (*v334)->PlayerPointers[v336]->Squad) )
  2889.                             sub_40E000((*v334)->PlayerPointers[v336], v398, v333 - 1 + 6, 1, (int)a5[0], a5[1]);
  2890.                           ++v335;
  2891.                           ++v336;
  2892.                         }
  2893.                         while ( v335 < (*v334)->ArenaPlayerCount );
  2894.                       }
  2895.                       ++v334;
  2896.                       ++v376;
  2897.                     }
  2898.                     while ( v376 < ArenaArrayLength );
  2899.                   }
  2900.                 }
  2901.               }
  2902.             }
  2903.           }
  2904.         }
  2905.       }
  2906.     }
  2907.   }
  2908.   else
  2909.   {
  2910.     if ( player && (v337 = player->MyArena) != 0 )
  2911.     {
  2912.       *(_WORD *)&v398[3] = player->PlayerId;
  2913.       *(_DWORD *)ExitCode = strcpy(&v398[5], ChatText);
  2914.       v338 = v337->ServersideArenaSettings.MessageReliable;
  2915.       v339 = strlen(ChatText) + 6;
  2916.       if ( v337->ArenaPlayerCount < 20 )
  2917.         v338 = 1;
  2918.       switch ( a4 )
  2919.       {
  2920.         case 9:
  2921.           if ( player->isModerator || v337->SpecMessageLock && player->Ship != 8 || !v337->PrivateMessagesLocked )
  2922.           {
  2923.             if ( BillingConnectionStructPointer )
  2924.             {
  2925.               if ( *ChatText == 59 || isdigit(*ChatText) && ChatText[1] == 59 )
  2926.               {
  2927.                 v340 = ChatText;
  2928.                 if ( *ChatText == 59 )
  2929.                   v340 = ChatText + 1;
  2930.                 v341 = *v340;
  2931.                 for ( ll = Str1; v341; ++v340 )
  2932.                 {
  2933.                   if ( v341 == 59 )
  2934.                     break;
  2935.                   if ( v341 == 58 )
  2936.                     break;
  2937.                   *ll = v341;
  2938.                   v341 = v340[1];
  2939.                   ++ll;
  2940.                 }
  2941.                 v343 = *v340;
  2942.                 *ll = 0;
  2943.                 if ( v343 )
  2944.                 {
  2945.                   v344 = v340[1];
  2946.                   v345 = v340 + 1;
  2947.                   if ( v344 )
  2948.                   {
  2949.                     if ( Str1[0] )
  2950.                       SendBillerUserChannelChatPacket(player->BillerPlayerId, Str1, v345);
  2951.                   }
  2952.                 }
  2953.               }
  2954.               else
  2955.               {
  2956.                 SendBillerUserChannelChatPacket(
  2957.                   player->BillerPlayerId,
  2958.                   (const char *)&DirectoryCurrentNamePassword,
  2959.                   ChatText);
  2960.               }
  2961.             }
  2962.             else
  2963.             {
  2964.               SendArenaMessage(player, "Chat channels not available at this time.", 0);
  2965.             }
  2966.           }
  2967.           break;
  2968.         case 1:
  2969.         case 2:
  2970.           if ( player->isModerator || v337->SpecMessageLock && player->Ship != 8 || !v337->AllMessagesLocked )
  2971.             SomethingWithAttachedPlayer(player, v398, v339, v338, (int)a5[0], (int)a5[1]);
  2972.           break;
  2973.         case 3:
  2974.           if ( player->isModerator
  2975.             || v337->SpecMessageLock && player->Ship != 8
  2976.             || !v337->AllMessagesLockedAgainSomething )
  2977.           {
  2978.             v346 = v337->ServersideArenaSettings.MessageTeamReliable || v338;
  2979.             sub_40E220(player, v398, v339, v346, (int)a5[0], (int)a5[1]);
  2980.           }
  2981.           break;
  2982.         case 5:
  2983.           if ( player->isModerator || v337->SpecMessageLock && player->Ship != 8 || !v337->PrivateMessagesLocked )
  2984.             SomethingWithAudioByteAndShip8((ARENA *)arenaPlayerIndex, v398, v339, 1, (int)a5[0], a5[1]);
  2985.           break;
  2986.         case 4:
  2987.           if ( player->isModerator
  2988.             || v337->SpecMessageLock && player->Ship != 8
  2989.             || !v337->AllMessagesLockedAgainSomething )
  2990.           {
  2991.             v347 = v337->ServersideArenaSettings.MessageTeamReliable || v338;
  2992.             sub_40E300(player, arenaPlayerIndex, v398, v339, v347, (int)a5[0], (int)a5[1]);
  2993.           }
  2994.           break;
  2995.         default:
  2996.           return;
  2997.       }
  2998.     }
  2999.     else
  3000.     {
  3001.       buf[2] = a7;
  3002.       strcpy(&buf[5], ChatText);
  3003.       buf[0] = 7;
  3004.       buf[1] = 0;
  3005.       *(_WORD *)&buf[3] = 0;
  3006.       v348 = strlen(ChatText) + 1;
  3007.       v349 = 0;
  3008.       if ( ZonePlayerCount > 0 )
  3009.       {
  3010.         v350 = playerPointerList;
  3011.         do
  3012.         {
  3013.           if ( (*v350)->MyArena )
  3014.             SendPlayerReliablePacket(*v350, buf, v348 - 1 + 6, 1);
  3015.           ++v349;
  3016.           ++v350;
  3017.         }
  3018.         while ( v349 < ZonePlayerCount );
  3019.       }
  3020.     }
  3021.   }
  3022. }
  3023.  
  3024.  
  3025. -----------------------------------------------------------------------
  3026. Stack Frame View
  3027. -----------------------------------------------------------------------
  3028.  
  3029. -00016090 ; Ins/Del : create/delete structure
  3030. -00016090 ; D/A/*   : create structure member (data/ascii/array)
  3031. -00016090 ; N       : rename structure or structure member
  3032. -00016090 ; U       : delete structure member
  3033. -00016090 ; Use data definition commands to create local variables and function arguments.
  3034. -00016090 ; Two special fields " r" and " s" represent return address and saved registers.
  3035. -00016090 ; Frame size: 16090; Saved regs: 0; Purge: 0
  3036. -00016090 ;
  3037. -00016090
  3038. -00016090 var_16090       dq ?
  3039. -00016088 var_16088       dq ?
  3040. -00016080 var_16080       dd 6 dup(?)             ; offset
  3041. -00016068 a5              dd 2 dup(?)             ; offset
  3042. -00016060 var_16060       dd ?
  3043. -0001605C var_1605C       dd ?
  3044. -00016058 ExitCode        db 7 dup(?)
  3045. -00016051 var_16051       db ?
  3046. -00016050 Size            dd ?
  3047. -0001604C var_1604C       dd ?
  3048. -00016048 var_16048       dd ?
  3049. -00016044 var_16044       dd ?
  3050. -00016040 var_16040       db ?
  3051. -0001603F var_1603F       dw ?
  3052. -0001603D var_1603D       dd ?
  3053. -00016039 var_16039       dd ?
  3054. -00016035 var_16035       dw ?
  3055. -00016033 var_16033       db 3 dup(?)
  3056. -00016030 var_16030       dd ?
  3057. -0001602C array1          db 32 dup(?)
  3058. -0001600C array2          db 256 dup(?)
  3059. -00015F0C Dest            db 256 dup(?)
  3060. -00015E0C Str1            db 64 dup(?)
  3061. -00015DCC AppName         db 64 dup(?)
  3062. -00015D8C buf             db 512 dup(?)
  3063. -00015B8C StartupInfo     db 256 dup(?)
  3064. -00015A8C var_15A8C       db 512 dup(?)
  3065. -0001588C var_1588C       db 8192 dup(?)
  3066. -0001388C var_1388C       db 80000 dup(?)
  3067. -0000000C var_C           dd ?
  3068. -00000008                 db ? ; undefined
  3069. -00000007                 db ? ; undefined
  3070. -00000006                 db ? ; undefined
  3071. -00000005                 db ? ; undefined
  3072. -00000004 var_4           dd ?
  3073. +00000000  r              db 4 dup(?)
  3074. +00000004 player          dd ?                    ; offset
  3075. +00000008 arenaPlayerIndex dq ?
  3076. +00000010 ChatText        dd ?                    ; offset
  3077. +00000014 SoundByte       db ?
  3078. +00000015
  3079. +00000015 ; end of stack variables
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement