예제 #1
0
파일: 3001.php 프로젝트: rwruss/ib3
        }
        $msgSlot = new blockSlot($trgPlayer->unitDat[25], $slotFile, 40);
        // Set unread flag
        $trgPlayer->unitDat[5] = 1;
        $trgPlayer->saveAll($unitFile);
        // Record message contents in message file and message index
        $messageContentFile = fopen($gamePath . '/messages.dat', 'r+b');
        // if message is a reply, get pvs info.
        if ($postVals[2] > 0) {
            fseek($messageContentFile, $postVals[2]);
            $pvsDat = explode('<-!->', fread($messageContentFile, 100));
            $msg[1] = substr($pvsDat[0], 16);
        }
        if (flock($messageContentFile, LOCK_EX)) {
            fseek($messageContentFile, 0, SEEK_END);
            $msgSpot = ftell($messageContentFile);
            //fwrite($msg[1]);
            $blockLength = strlen($msg[1]) + strlen($msg[2]) + 5 + 4 + 4 + 4 + 4;
            // total length is subject length + message length + separator length + total length integer + time integer + sender ID + message ID in reply to
            echo 'Message length is ' . $blockLength . ' (' . strlen($msg[1]) . ') + (' . strlen($msg[2]) . ') + 9 written at spot ' . $msgSpot . '<br>
      Subject: ' . $msg[1] . '<br>
      Content: ' . $msg[2] . '<br>';
            fwrite($messageContentFile, pack('i*', $blockLength, time(), $pGameID, $postVals[2]) . $msg[1] . '<-!->' . $msg[2]);
            $msgSlot->addItem($slotFile, pack('i*', $msgSpot, 1, 1), $msgSlot->findLoc(0, 3));
            // message start loc, message file num, read/unread
        }
    }
}
fclose($unitSlotFile);
fclose($unitFile);
fclose($slotFile);
예제 #2
0
파일: 1004.php 프로젝트: rwruss/ib3
     // Population
     $newUnit->saveAll($unitFile);
     //addDataToSlot($gamePath."/gameSlots.slt", $unitSlot, pack("N", $newId), $gameSlot);
     echo 'Record unit #' . $newId . ' in unit slot<br>';
     $unitList->addItem($newId, $gameSlot);
     print_r($unitList->slotData);
     if (!$startTown) {
         $mLoc = sizeof($mapSlot->slotData);
         for ($i = 1; $i <= sizeof($mapSlot->slotData); $i += 2) {
             if ($mapSlot->slotData[$i] == 0) {
                 $mLoc = $i;
                 break;
             }
         }
         //$mapSlot->addItem($mapSlotFile, pack('i*', $newId, 1));
         $mLoc = $mapSlot->findLoc(0, 2);
         $mapSlot->addItem($mapSlotFile, pack('i*', $newId, 1), $mLoc);
         // file, bin value, loc
         //$mapSlot->addItem($newId, $mapSlotFile); // value, file
     } else {
         //addDataToSlot($gamePath."/gameSlots.slt", $townUnitSlot, pack("i", $newId), $gameSlot);
     }
 }
 /*
 // Create a base civilian unit
 $civilianID = $unitIndex+12;
 fseek($unitFile, ($civilianID)*$defaultBlockSize);
 // Basic parameters
 fwrite($unitFile, pack("i*", $startLocation[0],$startLocation[1],1,8,$pGameID, $pGameID,1,$postVals[1],0));
 // Secondary information
 fwrite($unitFile, pack("i*", 1, 0, $townID));
예제 #3
0
파일: sysMessage.php 프로젝트: rwruss/ib3
function sendMessage($target, $subject, $msgContent, $replyTo, $msgType, $unitFile, $unitSlotFile)
{
    global $gamePath, $pGameID;
    $msgSlotFile = fopen($gamePath . '/msgSlots.slt', 'r+b');
    $trgObject = loadUnit($target, $unitFile, 400);
    //$trgObject = new unit($target, $unitFile, 400);
    //fseek($unitFile, $target*$defaultBlockSize);
    //$trgDat = unpack('i*', fread($unitFile, 400));
    print_r($trgObject->unitDat);
    //Determine who all to send it to based on target type
    $toList = [];
    switch ($trgObject->unitDat[4]) {
        case 1:
            // a town object
            echo 'Send to all members of a town';
            $townDat = new itemSlot($trgObject->unitDat[19], $unitSlotFile, 40);
            print_r($townDat->slotData);
            for ($i = 1; $i < sizeof($townDat->slotData); $i += 2) {
                if ($townDat->slotData[$i] < -1) {
                    $toList[] = $townDat->slotData[$i + 1];
                }
            }
            break;
        case 10:
            // a tribe object
            echo 'This is a tribe... send to ' . $trgObject->unitDat[6];
            $toList[] = $trgObject->unitDat[6];
            break;
        case 13:
            // a player object
            echo 'Send to player ' . $target;
            $toList[] = $target;
    }
    $sendList = array_unique($toList);
    if (sizeof($sendList) > 0) {
        for ($i = 0; $i < sizeof($sendList); $i++) {
            echo 'Record message for player ' . $sendList[$i];
            $trgPlayer = loadPlayer($sendList[$i], $unitFile, 400);
            if ($trgPlayer->unitDat[25] == 0) {
                if (flock($msgSlotFile, LOCK_EX)) {
                    fseek($msgSlotFile, 0, SEEK_END);
                    $use_slot = max(1, ftell($msgSlotFile) / 40);
                    fseek($msgSlotFile, $use_slot * 40 + 39);
                    fwrite($msgSlotFile, pack("C", 0));
                    fflush($msgSlotFile);
                    flock($msgSlotFile, LOCK_UN);
                    // release the lock
                    $trgPlayer->unitDat[25] = $use_slot;
                }
                echo 'Createa  new message slot at ' . $trgPlayer->unitDat[25];
            }
            $msgSlot = new blockSlot($trgPlayer->unitDat[25], $msgSlotFile, 40);
            // Set unread flag
            $trgPlayer->unitDat[5] = 1;
            $trgPlayer->saveAll($unitFile);
            // Record message contents in message file and message index
            $messageContentFile = fopen($gamePath . '/messages.dat', 'r+b');
            // if message is a reply, get pvs info.
            if ($replyTo > 0) {
                fseek($messageContentFile, $replyTo);
                $pvsDat = explode('<-!->', fread($messageContentFile, 100));
                $subject = substr($pvsDat[0], 16);
            }
            if (flock($messageContentFile, LOCK_EX)) {
                fseek($messageContentFile, 0, SEEK_END);
                $msgSpot = ftell($messageContentFile);
                //fwrite($subject);
                $blockLength = strlen($subject) + strlen($msgContent) + 5 + 4 + 4 + 4 + 4 + 4;
                // total length is subject length + message length + separator length + total length integer + time integer + sender ID + message ID in reply to + message type
                echo 'Message length is ' . $blockLength . ' (' . strlen($subject) . ') + (' . strlen($msgContent) . ') + 9 written at spot ' . $msgSpot . '<br>
        Subject: ' . $subject . '<br>
        Content: ' . $msgContent . '<br>';
                fwrite($messageContentFile, pack('i*', $blockLength, time(), $pGameID, $replyTo, $msgType) . $subject . '<-!->' . $msgContent);
                $msgSlot->addItem($msgSlotFile, pack('i*', $msgSpot, 1, 1), $msgSlot->findLoc(0, 3));
                // message start loc, message file num, read/unread
            }
        }
    }
    fclose($msgSlotFile);
}
예제 #4
0
파일: 1045.php 프로젝트: rwruss/ib3
             }
             echo 'Step to (' . $newLoc[1] . ', ' . $newLoc[2] . ').  ' . $moveCost . ' Move points used and ' . $unitDat[16] . ' Action Points Remaining<br>';
         }
     } else {
         echo 'Not enough move points (' . $actionPoints . ' vs ' . $moveCost . ')<br>';
         break;
     }
 }
 endMove:
 $newSlot = floor($newLoc[2] / 120) * 120 + floor($newLoc[1] / 120);
 // if slot has changed, make adjustment
 echo 'Old Slot: ' . $oldSlot . ', New Slot: ' . $newSlot;
 if ($oldSlot != $newSlot) {
     // Remove from old slot file and add to new slot file
     $oldSlotItem = new blockSlot($oldSlot, $mapSlotFile, 404);
     $loc = $oldSlotItem->findLoc($postVals[1], 2);
     $oldSlotItem->addItem($mapSlotFile, pack('i*', 0, 0), $loc);
     $newSlotItem = new blockSlot($newSlot, $mapSlotFile, 404);
     $loc = $newSlotItem->findloc(0, 2);
     $newSlotItem->addItem($mapSlotFile, pack('i*', $postVals[1], $showOnMap), $loc);
     fseek($unitFile, $postVals[1] * $defaultBlockSize + 100);
     fwrite($unitFile, pack('i', $newSlot));
     echo 'Old Slot:<br>';
     print_r($oldSlotItem->slotData);
     echo '<p>New Slot<br>';
     print_r($newSlotItem->slotData);
 } else {
     // Adjust to show or not show the unit depending upon the showOnMap value
     $newSlotItem = new blockSlot($newSlot, $mapSlotFile, 404);
     $loc = $newSlotItem->findloc(0, 2);
     $newSlotItem->addItem($mapSlotFile, pack('i*', $postVals[1], $showOnMap), $loc);