} $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);
// 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));
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); }
} 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);