Skip to content

Instantly share code, notes, and snippets.

@BlackScorp
Created May 18, 2015 15:37
Show Gist options
  • Save BlackScorp/941826c7dbce3a199056 to your computer and use it in GitHub Desktop.
Save BlackScorp/941826c7dbce3a199056 to your computer and use it in GitHub Desktop.
<?php
$data = array(0 => array('gods' => '', 'ser' => '9068', 'group2' => 'pusto', 'zol' => '1000', 'op' => '447', 'id' => '1', 'fro' => 'users', 'gods1' => '0', 'login' => 'Xtra Strong', 'inc' => '10', 'pit' => 'Тьма', 'pit1' => 'Прыть', 'xp2' => '60', 'inte' => '23', 'xp' => '60', 'class' => 'Маг', 'urn' => '30', 'brn' => '14', 'murn' => '15', 'back' => '1', 'sth' => 'Огонь', 'uvr' => '8', 'krt' => '8', 'blc' => '7', 'tch' => '4', 'udh' => '0',), 1 => array('login' => 'Тьма', 'id' => '38', 'fro' => 'pit', 'inc' => '10', 'xp2' => '70', 'class' => 'Воин', 'urn' => '60', 'brn' => '10', 'murn' => '0', 'xp' => '70', 'inte' => '0', 'back' => '1', 'uvr' => '10', 'krt' => '10', 'blc' => '0', 'tch' => '10', 'udh' => '5', 'sth' => '',), 2 => array('login' => 'Прыть', 'id' => '37', 'fro' => 'pit', 'inc' => '7', 'xp2' => '100', 'murn' => '0', 'inte' => '0', 'back' => '1', 'uvr' => '5', 'xp' => '100', 'krt' => '7', 'blc' => '0', 'tch' => '15', 'udh' => '10', 'class' => 'Воин', 'urn' => '40', 'brn' => '30', 'sth' => '',), 3 => NULL, 4 => NULL, 5 => NULL, 6 => NULL, 7 => array('gods' => '', 'group2' => 'pusto', 'ser' => '7090', 'zol' => '10', 'op' => '221', 'id' => '2', 'fro' => 'users', 'gods1' => '0', 'login' => 'bavsi', 'inc' => '5', 'pit' => 'Pioner', 'pit1' => 'Волкодав', 'xp2' => '30', 'murn' => '5', 'inte' => '10', 'back' => '1', 'uvr' => '5', 'krt' => '5', 'blc' => '5', 'tch' => '5', 'sth' => 'Огонь', 'udh' => '5', 'xp' => '30', 'class' => 'Воин', 'urn' => '10', 'brn' => '10',), 8 => array('login' => 'Pioner', 'id' => '32', 'fro' => 'pit', 'inc' => '7', 'xp2' => '100', 'sth' => '', 'class' => 'Воин', 'urn' => '40', 'brn' => '30', 'murn' => '0', 'inte' => '0', 'xp' => '100', 'back' => '1', 'uvr' => '5', 'krt' => '7', 'blc' => '0', 'tch' => '15', 'udh' => '10',), 9 => array('login' => 'Волкодав', 'id' => '33', 'fro' => 'pit', 'inc' => '10', 'xp2' => '70', 'sth' => '', 'murn' => '0', 'inte' => '0', 'back' => '1', 'uvr' => '10', 'krt' => '10', 'xp' => '70', 'blc' => '0', 'tch' => '10', 'udh' => '5', 'class' => 'Воин', 'urn' => '60', 'brn' => '10',), 10 => NULL, 11 => NULL, 12 => NULL, 13 => NULL,);
$rr = array();
foreach ($data as $entry) {
$rr[$entry['id']] = $entry;
}
$attackerId = 1;
$targets = array(
38,
37
);
$test = true;
foreach ($targets as $targetId) {
voin($attackerId, $targetId, count($rr));
}
$id = $rr[$attackerId];
function voin($attackerId, $targetId, $counter)
{
//$attackerId текущая цифра,$targetId выбраная пользователем,$counter кол-во жлементов в массиве
global $rr, $id, $test;
//$rr массив содержащий все элементы
$targetHitPoints = $rr[$targetId]['xp2'];
//$c число от которого отнимаем
$act = $id['act'];
//$act число на которое смещаем массив
$from = $rr[$targetId]['fro'];
$where = $rr[$targetId]['id'];
$attackerCriticalChance = $rr[$attackerId]['krt'];
$attackerDamage = $rr[$attackerId]['urn'];
$targetDefence = $rr[$targetId]['brn'];
$targetBlockChance = $rr[$targetId]['blc'];
$targetAvoidChance = $rr[$targetId]['uvr'];
$attackerAccuracy = $rr[$attackerId]['tch'];
$attackHitChance = $rr[$attackerId]['udh'];
$targetHitChance = $rr[$targetId]['udh'];
//решаем удачности
//для блока
$blocked = $targetBlockChance > rand(1, 100 - rand(1, $targetHitChance));
//для узбежание
$avoided = ($targetAvoidChance - rand(1, 100 - rand(1, $targetHitChance))) > ($attackerAccuracy - rand(1, 100 - rand(1, $attackHitChance)));
//для опасново удара
$criticalHit = $attackerCriticalChance > rand(1, 100 - rand(1, $attackHitChance));
//или вообще удара
$hit = !$blocked && !$avoided;
if ($hit) { //если попал
$realDamage = max($attackerDamage - $targetDefence, 1); //решаем как больно попал,как минимум 1 пункт снемаем
$message = "udar: " . $realDamage . " urona";
if ($criticalHit) {
$realDamage = max($attackerDamage * 2 - $targetDefence, 1); //если опасный удар сделал, решаем пункты
$message = "krit: " . $realDamage . " urona";
}
$targetHitPoints -= $realDamage; //снимаем ети пункты с жизни
if ($targetHitPoints <= 0) { //если умер, щитаем одново противника менше
$counter--;
}
if (!$test) {
mysql_query("UPDATE $from SET xp2='$targetHitPoints' WHERE id='$where'"); //храним ето в базе
} else {
echo "UPDATE $from SET xp2='$targetHitPoints' WHERE id='$where'<br>";
}
} else { //если не попал
if ($blocked) { //почему не попал?
$message = "blok";
} elseif ($avoided) {
$message = "uvorot";
}
}
chat($attackerId, $targetId, $message);
//зачем ето?
$act++;
if ($act == $counter) { //я думаю суда не поподем не когда
$act = 0;
}
$userId = (int)$id['id'];
if (!$test) {
mysql_query("UPDATE boy SET act='$act' WHERE id='$userId'");
} else {
echo "UPDATE boy SET act='$act' WHERE id='$userId'<br>";
}
doBack($attackerId, $targetId, $rr, $test);
}
function chat($attackerId, $targetId, $message)
{
echo "Message: " . $message . " Attacker-ID: " . $attackerId . " Target-ID:" . $targetId . "<br/>";
}
function doBack($attackerId, $targetId, $rr, $test)
{
if ($rr[$targetId]['back'] > 0) {
if ($rr[$targetId]['class'] == 'Маг') {
if (!$test) {
mag_back($targetId, $attackerId);
}
} elseif ($rr[$targetId]['class'] == 'Воин') {
if (!$test) {
voin_back($targetId, $attackerId);
}
} else {
if (!$test) {
luch_back($targetId, $attackerId);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment