mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-08-13 23:01:02 +00:00
This commit is contained in:
+19
-2
@@ -5895,7 +5895,7 @@ $q = "INSERT INTO ".TB_PREFIX."demolition VALUES (
|
|||||||
$pairs[] = '(0, '.(int) $typeValue.', '.(int) $from[$index].', '.(int) $to[$index].', '.(int) $ref[$index].', '.(int) $ref2[$index].', '.(int) $time[$index].', '.(int) $endtime[$index].', 0, '.(int) $send[$index].', '.(int) $wood[$index].', '.(int) $clay[$index].', '.(int) $iron[$index].', '.(int) $crop[$index].')';
|
$pairs[] = '(0, '.(int) $typeValue.', '.(int) $from[$index].', '.(int) $to[$index].', '.(int) $ref[$index].', '.(int) $ref2[$index].', '.(int) $time[$index].', '.(int) $endtime[$index].', 0, '.(int) $send[$index].', '.(int) $wood[$index].', '.(int) $clay[$index].', '.(int) $iron[$index].', '.(int) $crop[$index].')';
|
||||||
|
|
||||||
if ($counter++ > 25) {
|
if ($counter++ > 25) {
|
||||||
$q = "INSERT INTO " . TB_PREFIX . "movement VALUES ".implode(', ', $pairs);
|
$q = "INSERT INTO " . TB_PREFIX . "movement (moveid, sort_type, `from`, `to`, ref, ref2, starttime, endtime, proc, send, wood, clay, iron, crop) VALUES ".implode(', ', $pairs);
|
||||||
mysqli_query($this->dblink,$q);
|
mysqli_query($this->dblink,$q);
|
||||||
|
|
||||||
$pairs = [];
|
$pairs = [];
|
||||||
@@ -5904,7 +5904,7 @@ $q = "INSERT INTO ".TB_PREFIX."demolition VALUES (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($counter > 0) {
|
if ($counter > 0) {
|
||||||
$q = "INSERT INTO " . TB_PREFIX . "movement VALUES " . implode( ', ', $pairs );
|
$q = "INSERT INTO " . TB_PREFIX . "movement (moveid, sort_type, `from`, `to`, ref, ref2, starttime, endtime, proc, send, wood, clay, iron, crop) VALUES " . implode( ', ', $pairs );
|
||||||
return mysqli_query( $this->dblink, $q );
|
return mysqli_query( $this->dblink, $q );
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
@@ -8039,6 +8039,23 @@ $q = "INSERT INTO ".TB_PREFIX."demolition VALUES (
|
|||||||
return $array;
|
return $array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Rally-point attack marker (issue #245): a defender can tag an incoming
|
||||||
|
// attack green/yellow/red. The WHERE clause restricts the update to a
|
||||||
|
// movement whose target village (`to`) belongs to $uid, so a player can
|
||||||
|
// only mark attacks incoming on their own villages.
|
||||||
|
function setMovementMarker($moveid, $marker, $uid) {
|
||||||
|
$moveid = (int) $moveid;
|
||||||
|
$marker = (int) $marker;
|
||||||
|
$uid = (int) $uid;
|
||||||
|
if ($marker < 0 || $marker > 3 || $moveid <= 0 || $uid <= 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$q = "UPDATE ".TB_PREFIX."movement SET marker = ".$marker.
|
||||||
|
" WHERE moveid = ".$moveid.
|
||||||
|
" AND `to` IN (SELECT wref FROM ".TB_PREFIX."vdata WHERE owner = ".$uid.")";
|
||||||
|
return mysqli_query($this->dblink, $q) && mysqli_affected_rows($this->dblink) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
// no need to cache this method
|
// no need to cache this method
|
||||||
function getLinks($id) {
|
function getLinks($id) {
|
||||||
list($id) = $this->escape_input((int) $id);
|
list($id) = $this->escape_input((int) $id);
|
||||||
|
|||||||
@@ -805,6 +805,7 @@ tz_def('RETURNFROM', 'Return from');
|
|||||||
tz_def('REINFORCEMENTFOR', 'Reinforcement to');
|
tz_def('REINFORCEMENTFOR', 'Reinforcement to');
|
||||||
tz_def('ATTACK_ON', 'Attack to');
|
tz_def('ATTACK_ON', 'Attack to');
|
||||||
tz_def('RAID_ON', 'Raid to');
|
tz_def('RAID_ON', 'Raid to');
|
||||||
|
tz_def('MARK_ATTACK', 'Mark this attack (severity)');
|
||||||
tz_def('SCOUTING', 'Scouting');
|
tz_def('SCOUTING', 'Scouting');
|
||||||
tz_def('PRISONERS', 'Prisoners');
|
tz_def('PRISONERS', 'Prisoners');
|
||||||
tz_def('PRISONERSIN', 'Prisoners in');
|
tz_def('PRISONERSIN', 'Prisoners in');
|
||||||
|
|||||||
@@ -801,6 +801,7 @@ define('RETURNFROM', 'Retour de');
|
|||||||
define('REINFORCEMENTFOR', 'Renfort vers');
|
define('REINFORCEMENTFOR', 'Renfort vers');
|
||||||
define('ATTACK_ON', 'Attaque sur');
|
define('ATTACK_ON', 'Attaque sur');
|
||||||
define('RAID_ON', 'Pillage sur');
|
define('RAID_ON', 'Pillage sur');
|
||||||
|
define('MARK_ATTACK', 'Marquer cette attaque (gravité)');
|
||||||
define('SCOUTING', 'Espionnage');
|
define('SCOUTING', 'Espionnage');
|
||||||
define('PRISONERS', 'Prisonniers');
|
define('PRISONERS', 'Prisonniers');
|
||||||
define('PRISONERSIN', 'Prisonniers à');
|
define('PRISONERSIN', 'Prisonniers à');
|
||||||
|
|||||||
@@ -801,6 +801,7 @@ define('RETURNFROM', 'Întoarcere din');
|
|||||||
define('REINFORCEMENTFOR', 'Întărire către');
|
define('REINFORCEMENTFOR', 'Întărire către');
|
||||||
define('ATTACK_ON', 'Atac către');
|
define('ATTACK_ON', 'Atac către');
|
||||||
define('RAID_ON', 'Raid către');
|
define('RAID_ON', 'Raid către');
|
||||||
|
define('MARK_ATTACK', 'Marchează acest atac (gravitate)');
|
||||||
define('SCOUTING', 'Explorare');
|
define('SCOUTING', 'Explorare');
|
||||||
define('PRISONERS', 'Prizonieri');
|
define('PRISONERS', 'Prizonieri');
|
||||||
define('PRISONERSIN', 'Prizonieri în');
|
define('PRISONERSIN', 'Prizonieri în');
|
||||||
|
|||||||
@@ -8,6 +8,33 @@ $units = $database->getMovement(34, $village->wid, 1);
|
|||||||
$artifactsSum = $database->getArtifactsSumByKind($session->uid, $village->wid, 3);
|
$artifactsSum = $database->getArtifactsSumByKind($session->uid, $village->wid, 3);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.atk_marker{position:relative;float:right;width:14px;height:14px;border-radius:50%;border:1px solid #666;margin:0 0 0 6px;cursor:pointer;box-shadow:inset 0 0 0 2px rgba(255,255,255,.55)}
|
||||||
|
.atk_marker.marker0{background:#dddddd}
|
||||||
|
.atk_marker.marker1{background:#3cb043}
|
||||||
|
.atk_marker.marker2{background:#f2c200}
|
||||||
|
.atk_marker.marker3{background:#e23b3b}
|
||||||
|
.atk_marker:hover{box-shadow:inset 0 0 0 2px rgba(255,255,255,.55),0 0 0 1px #333}
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript">
|
||||||
|
function cycleMarker(moveid, el){
|
||||||
|
var cur = parseInt(el.getAttribute('data-marker') || '0', 10);
|
||||||
|
var next = (cur + 1) % 4;
|
||||||
|
var body = 'moveid=' + encodeURIComponent(moveid) + '&marker=' + encodeURIComponent(next);
|
||||||
|
fetch('ajax.php?f=marker', {
|
||||||
|
method: 'POST',
|
||||||
|
credentials: 'same-origin',
|
||||||
|
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
|
||||||
|
body: body
|
||||||
|
}).then(function(r){ return r.json(); }).then(function(d){
|
||||||
|
if (d && d.ok) {
|
||||||
|
el.setAttribute('data-marker', next);
|
||||||
|
el.className = 'atk_marker marker' + next;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<?php foreach ($units as $u):
|
<?php foreach ($units as $u):
|
||||||
$session->timer++;
|
$session->timer++;
|
||||||
$sort = (int)$u['sort_type'];
|
$sort = (int)$u['sort_type'];
|
||||||
@@ -24,6 +51,19 @@ $artifactsSum = $database->getArtifactsSumByKind($session->uid, $village->wid, 3
|
|||||||
$start = ($tribe - 1) * 10 + 1;
|
$start = ($tribe - 1) * 10 + 1;
|
||||||
$end = $tribe * 10;
|
$end = $tribe * 10;
|
||||||
$dt = $generator->procMtime($u['endtime']);
|
$dt = $generator->procMtime($u['endtime']);
|
||||||
|
// Base travel time per troop type (issue #245): distance / unit speed,
|
||||||
|
// WITHOUT tournament square or artefact effects. INCREASE_SPEED is the
|
||||||
|
// server speed multiplier, matching MyGenerator::procDistanceTime().
|
||||||
|
$mtimes = [];
|
||||||
|
if (!$isElders) {
|
||||||
|
$fromInfo = $database->getMInfo($from);
|
||||||
|
$toInfo = $database->getMInfo($u['to']);
|
||||||
|
$dist = $database->getDistance($fromInfo['x'], $fromInfo['y'], $toInfo['x'], $toInfo['y']);
|
||||||
|
for ($i = $start; $i <= $end; $i++) {
|
||||||
|
$spd = isset($GLOBALS['u'.$i]['speed']) ? $GLOBALS['u'.$i]['speed'] : 0;
|
||||||
|
$mtimes[$i] = $spd > 0 ? $generator->getTimeFormat((int) round(($dist / $spd) * 3600 / INCREASE_SPEED)) : '-';
|
||||||
|
}
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
<table class="troop_details" cellpadding="1" cellspacing="1">
|
<table class="troop_details" cellpadding="1" cellspacing="1">
|
||||||
<thead><tr>
|
<thead><tr>
|
||||||
@@ -33,6 +73,9 @@ $artifactsSum = $database->getArtifactsSumByKind($session->uid, $village->wid, 3
|
|||||||
<?php else:?><a><?php echo VILLAGE_OF_THE_ELDERS; ?></a><?php endif;?>
|
<?php else:?><a><?php echo VILLAGE_OF_THE_ELDERS; ?></a><?php endif;?>
|
||||||
</td>
|
</td>
|
||||||
<td colspan="<?= $colspan?>">
|
<td colspan="<?= $colspan?>">
|
||||||
|
<?php if (($atk == 3 || $atk == 4) && !$isElders): $marker = (int)($u['marker'] ?? 0); $mid = (int)$u['moveid'];?>
|
||||||
|
<span class="atk_marker marker<?= $marker?>" data-marker="<?= $marker?>" title="<?= MARK_ATTACK?>" onclick="cycleMarker(<?= $mid?>,this)"></span>
|
||||||
|
<?php endif;?>
|
||||||
<?php if (!$isElders):?>
|
<?php if (!$isElders):?>
|
||||||
<a href="karte.php?d=<?= $u['to']?>&c=<?= $generator->getMapCheck($u['to'])?>"><?= $action?> <?= $database->getVillageField($u['to'],'name')?></a>
|
<a href="karte.php?d=<?= $u['to']?>&c=<?= $generator->getMapCheck($u['to'])?>"><?= $action?> <?= $database->getVillageField($u['to'],'name')?></a>
|
||||||
<?php else:?><a><?= VILLAGE_OF_THE_ELDERS_TROOPS?></a><?php endif;?>
|
<?php else:?><a><?= VILLAGE_OF_THE_ELDERS_TROOPS?></a><?php endif;?>
|
||||||
@@ -40,7 +83,7 @@ $artifactsSum = $database->getArtifactsSumByKind($session->uid, $village->wid, 3
|
|||||||
</tr></thead>
|
</tr></thead>
|
||||||
<tbody class="units">
|
<tbody class="units">
|
||||||
<tr><th> </th>
|
<tr><th> </th>
|
||||||
<?php for ($i=$start;$i<=$end;$i++):?><td><img src="img/x.gif" class="unit u<?= $i?>" title="<?= $technology->getUnitName($i)?>"></td><?php endfor;?>
|
<?php for ($i=$start;$i<=$end;$i++):?><td><img src="img/x.gif" class="unit u<?= $i?>" title="<?= $technology->getUnitName($i)?><?= isset($mtimes[$i])? ': '.$mtimes[$i] : ''?>"></td><?php endfor;?>
|
||||||
<?php if ($u['t11'] && $isMine):?><td><img src="img/x.gif" class="unit uhero" title="<?php echo U0; ?>"></td><?php endif;?>
|
<?php if ($u['t11'] && $isMine):?><td><img src="img/x.gif" class="unit uhero" title="<?php echo U0; ?>"></td><?php endif;?>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th><?= TROOPS?></th>
|
<tr><th><?= TROOPS?></th>
|
||||||
|
|||||||
@@ -73,7 +73,25 @@ switch($_GET['f']) {
|
|||||||
include("Templates/Ajax/quest_core.tpl");
|
include("Templates/Ajax/quest_core.tpl");
|
||||||
}else{
|
}else{
|
||||||
include("Templates/Ajax/quest_core25.tpl");
|
include("Templates/Ajax/quest_core25.tpl");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
// Rally-point attack marker (issue #245): persist the green/yellow/red tag
|
||||||
|
// a defender sets on an incoming attack. setMovementMarker() enforces that
|
||||||
|
// the targeted village belongs to the logged-in user.
|
||||||
|
case 'marker':
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
if (!isset($_SESSION)) {
|
||||||
|
session_start();
|
||||||
|
}
|
||||||
|
include_once($autoprefix.'GameEngine/Database.php');
|
||||||
|
$uid = (int) ($_SESSION['id_user'] ?? 0);
|
||||||
|
if (!$uid) {
|
||||||
|
http_response_code(403);
|
||||||
|
echo json_encode(['ok' => 0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$ok = $database->setMovementMarker($_POST['moveid'] ?? 0, $_POST['marker'] ?? 0, $uid);
|
||||||
|
echo json_encode(['ok' => $ok ? 1 : 0]);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -1137,6 +1137,7 @@ CREATE TABLE IF NOT EXISTS `%PREFIX%movement` (
|
|||||||
`clay` int(11) DEFAULT NULL,
|
`clay` int(11) DEFAULT NULL,
|
||||||
`iron` int(11) DEFAULT NULL,
|
`iron` int(11) DEFAULT NULL,
|
||||||
`crop` int(11) DEFAULT NULL,
|
`crop` int(11) DEFAULT NULL,
|
||||||
|
`marker` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
PRIMARY KEY (`moveid`),
|
PRIMARY KEY (`moveid`),
|
||||||
KEY `ref` (`ref`),
|
KEY `ref` (`ref`),
|
||||||
KEY `from-proc-sort_type` (`from`,`proc`,`sort_type`),
|
KEY `from-proc-sort_type` (`from`,`proc`,`sort_type`),
|
||||||
|
|||||||
Reference in New Issue
Block a user