Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie]System walki


bnmbb

Rekomendowane odpowiedzi

Opublikowano

Ja posiadam kod, ale jest pisany własnoręcznie, używam go w moim silniku, jest wydajny i działa prawie tak jak na plemiona.pl, uwzględnia przedmioty u rycerza i bonus nocny:

 

 

$pala_bonus = array (
'unit_spear' => array(1.3,1.2,'Halabarda szwajcarska'),
'unit_sword' => array(1.4,1.3,'Długi miecz Ulricha'),
'unit_axe' => array(1.4,1.3,'Wojowniczy topór Thorgarda'),
'unit_archer' => array(1.3,1.2,'Wielki łuk Edwarda'),
'unit_spy' => array(1,1,'Luneta Kalida'),
'unit_light' => array(1.3,1.2,'Lanca Mieszka'),
'unit_marcher' => array(1.3,1.2,'Łuk refleksyjny Khana'),
'unit_heavy' => array(1.3,1.2,'Flaga Baptysty'),
'unit_ram' => array(1,1,'Wekiera Carlosa'),
'unit_catapult' => array(1,10,'Ogień olimpijski'),
'unit_snob' => array(1.3,1.2,'Berło Vasca'),
);

function sim_battle($wojsko_obroncy,$wojsko_napastnika,$mor_level,$cel_katapolt_level,$szeczescie,$morale,$noc,$cel_budynek_nazwa = null,$att_pala_item = 0,$def_pala_item = 0) {
global $cl_units,$config,$arr_wall_bonus,$arr_basic_defense,$cl_builds,$pala_bonus;

if ($config['moral_activ'] === true) {
	$morale = floor($morale) / 100;
	} else {
	$morale = 1;
	}

$szeczescie /= 100;
$szeczescie++;
$suma_j_att = 0;

foreach ($cl_units->get_array("dbname") as $jname) {
	if ($def_pala_item == $jname) {
		$def_modifer = $pala_bonus[$jname][1];
		} else {
		$def_modifer = 1;
		}

	$sila_obrony_piechota += $wojsko_obroncy[$jname] * $cl_units->get_def($jname,1) * $def_modifer;
	$sila_obrony_kon += $wojsko_obroncy[$jname] * $cl_units->get_defcav($jname,1) * $def_modifer;
	$sila_obrony_luk += $wojsko_obroncy[$jname] * $cl_units->get_defarcher($jname,1) * $def_modifer;

	if ($att_pala_item == $jname) {
		$aktuunit_att = $cl_units->get_att($jname,1) * $pala_bonus[$jname][0];
		} else {
		$aktuunit_att = $cl_units->get_att($jname,1);
		}

	$sila_ataku += $wojsko_napastnika[$jname] * $aktuunit_att;
	$suma_j_att += $wojsko_napastnika[$jname];
	}

if ($sila_obrony_piechota == 0) {
	$sila_obrony_piechota = 1;
	}

$sila_ataku *= $szeczescie;
$sila_ataku *= $morale;

if ($noc) {
	$sila_obrony_piechota *= 2;
	$sila_obrony_kon *= 2;
	$sila_obrony_luk *= 2;
	}

$sila_obrony_piechota += $config['reason_defense'];
$sila_obrony_piechota += $arr_basic_defense[$mor_level];
$sila_obrony_piechota *= $arr_wall_bonus[$mor_level] + 1;
$sila_obrony_kon += $config['reason_defense'];
$sila_obrony_kon += $arr_basic_defense[$mor_level];
$sila_obrony_kon *= $arr_wall_bonus[$mor_level] + 1;
$sila_obrony_luk += $config['reason_defense'];
$sila_obrony_luk += $arr_basic_defense[$mor_level];
$sila_obrony_luk *= $arr_wall_bonus[$mor_level] + 1;

if ($sila_ataku < 1) {
	$sila_ataku = 1;
	}
if ($sila_obrony_piechota < 1) {
	$sila_obrony_piechota = 1;
	}
if ($sila_obrony_kon < 1) {
	$sila_obrony_kon = 1;
	}
if ($sila_obrony_luk < 1) {
	$sila_obrony_luk = 1;
	}

$stosunki['att_as_deff'] = pow($sila_ataku,"1.5") / max(array(pow($sila_obrony_piechota,"1.5"), pow($sila_obrony_kon,"1.5"),pow($sila_obrony_luk,"1.5")));

if ($stosunki['att_as_deff'] > 1) {
	$stosunki['att_as_deff'] = 1;
	}

$tarany = $wojsko_napastnika['unit_ram'];
$nowy_mur_level = $mor_level;
if ($tarany > 0) {
	$ram_damage = $tarany;
	if ($att_pala_item == 'unit_ram') {
		$ram_damage *= 2;
		}
	$ram_damage *= $stosunki['att_as_deff'];
	$ram_damage = floor($ram_damage);

	$wall_hp = $mor_level * 22;

	if ($ram_damage > $wall_hp) {
		$nowy_mur_level = 0;
		} else {
		$nowy_mur_level = round(($wall_hp - $ram_damage) / 22);
		}
	}

unset($wall_hp);
unset($ram_damage);
unset($tarany);

$katapulty = $wojsko_napastnika['unit_catapult'];
$nowy_ktpc_level = $cel_katapolt_level;
if ($katapulty > 0) {
	$catapult_damage = $katapulty;
	if ($att_pala_item == 'unit_catapult') {
		$catapult_damage *= 2;
		}
	$catapult_damage *= $stosunki['att_as_deff'];
	$catapult_damage = floor($catapult_damage);

	$ktpc_hp = $cel_katapolt_level * 22;

	if ($catapult_damage > $ktpc_hp) {
		$nowy_ktpc_level = 0;
		} else {
		$nowy_ktpc_level = round(($ktpc_hp - $catapult_damage) / 22);
		}
	}

unset($ktpc_hp);
unset($catapult_damage);
unset($katapulty);

unset($stosunki);

if ($sila_ataku < 1) {
	$sila_ataku = 1;
	}
if ($sila_obrony_piechota < 1) {
	$sila_obrony_piechota = 1;
	}
if ($sila_obrony_kon < 1) {
	$sila_obrony_kon = 1;
	}
if ($sila_obrony_luk < 1) {
	$sila_obrony_luk = 1;
	}

$sila_obrony_piechota /= $arr_wall_bonus[$mor_level] + 1;
$sila_obrony_piechota -= $arr_basic_defense[$mor_level];
$sila_obrony_kon /= $arr_wall_bonus[$mor_level] + 1;
$sila_obrony_kon -= $arr_basic_defense[$mor_level];
$sila_obrony_luk /= $arr_wall_bonus[$mor_level] + 1;
$sila_obrony_luk -= $arr_basic_defense[$mor_level];

$_diff_wall = round(($mor_level - $nowy_mur_level) / 2) + $nowy_mur_level;

$sila_obrony_piechota *= $arr_wall_bonus[$_diff_wall] + 1;
$sila_obrony_piechota += $arr_basic_defense[$_diff_wall];
$sila_obrony_kon *= $arr_wall_bonus[$_diff_wall] + 1;
$sila_obrony_kon += $arr_basic_defense[$_diff_wall];
$sila_obrony_luk *= $arr_wall_bonus[$_diff_wall] + 1;
$sila_obrony_luk += $arr_basic_defense[$_diff_wall];

unset($_diff_wall);

$sila_obrony_piechota = pow($sila_obrony_piechota,"1.5");
$sila_obrony_kon = pow($sila_obrony_kon,"1.5");
$sila_obrony_luk = pow($sila_obrony_luk,"1.5");

$sila_ataku = pow($sila_ataku,"1.5");

if ($sila_ataku < 1) {
	$sila_ataku = 1;
	}
if ($sila_obrony_piechota < 1) {
	$sila_obrony_piechota = 1;
	}
if ($sila_obrony_kon < 1) {
	$sila_obrony_kon = 1;
	}
if ($sila_obrony_luk < 1) {
	$sila_obrony_luk = 1;
	}

$stosunki['att_as_deff_foot'] = $sila_ataku / $sila_obrony_piechota;
$stosunki['deff_foot_as_att'] = $sila_obrony_piechota / $sila_ataku;
$stosunki['att_as_deff_cav'] = $sila_ataku / $sila_obrony_kon;
$stosunki['deff_cav_as_att'] = $sila_obrony_kon / $sila_ataku;
$stosunki['att_as_deff_archer'] = $sila_ataku / $sila_obrony_luk;
$stosunki['deff_archer_as_att'] = $sila_obrony_luk / $sila_ataku;

if ($stosunki['att_as_deff_foot'] > 1 || $stosunki['att_as_deff_cav'] > 1 || $stosunki['att_as_deff_archer'] > 1) {
	$wygral = "napastnik";
	$stosunek_straty['piechota'] = $stosunki['deff_foot_as_att'];
	$stosunek_straty['konie'] = $stosunki['deff_cav_as_att'];
	$stosunek_straty['luczniki'] = $stosunki['deff_archer_as_att'];
	if ($stosunek_straty['piechota'] > 1) {
		$stosunek_straty['piechota'] = 1;
		}
	if ($stosunek_straty['konie'] > 1) {
		$stosunek_straty['konie'] = 1;
		}
	if ($stosunek_straty['luczniki'] > 1) {
		$stosunek_straty['luczniki'] = 1;
		}
	} else {
	$wygral = "obronca";
	$stosunek_straty['wszystko'] = max(array($stosunki['att_as_deff_foot'],$stosunki['att_as_deff_cav'],$stosunki['att_as_deff_archer']));
	}

$szpiegowanie = false;

foreach ($cl_units->get_array("dbname") as $jname) {
	if ($wygral == "napastnik") {
		if ($jname == 'unit_spy') {
			$szpieg_pow_ilosc_att = pow($wojsko_napastnika[$jname] * 2,'1.5');
			$szpieg_pow_ilosc_def = pow($wojsko_obroncy[$jname],'1.5');
			if ($szpieg_pow_ilosc_att > $szpieg_pow_ilosc_def) {
				$szpiegowanie = true;
				$napastnik_straty[$jname] = round($wojsko_napastnika[$jname] * ($szpieg_pow_ilosc_def / $szpieg_pow_ilosc_att));
				} else {
				$szpiegowanie = false;
				$napastnik_straty[$jname] = $wojsko_napastnika[$jname];
				}
			$obronca_straty[$jname] = $wojsko_obroncy[$jname];
			$nap_os_straty += $cl_units->get_bhprice($jname) * $napastnik_straty[$jname];
			$obr_os_straty += $cl_units->get_bhprice($jname) * $obronca_straty[$jname];
			$maks_lup += $cl_units->get_booty($jname) * ($wojsko_napastnika[$jname] - $napastnik_straty[$jname]);
			} else {
			if ($cl_units->get_group($jname) == 'foot') {
				$napastnik_straty[$jname] = round($wojsko_napastnika[$jname] * $stosunek_straty['piechota']);
				}
			if ($cl_units->get_group($jname) == 'cav') {
				$napastnik_straty[$jname] = round($wojsko_napastnika[$jname] * $stosunek_straty['konie']);
				}
			if ($cl_units->get_group($jname) == 'archer') {
				$napastnik_straty[$jname] = round($wojsko_napastnika[$jname] * $stosunek_straty['luczniki']);
				}
			$obronca_straty[$jname] = $wojsko_obroncy[$jname];
			$nap_os_straty += $cl_units->get_bhprice($jname) * $napastnik_straty[$jname];
			$obr_os_straty += $cl_units->get_bhprice($jname) * $obronca_straty[$jname];
			$maks_lup += $cl_units->get_booty($jname) * ($wojsko_napastnika[$jname] - $napastnik_straty[$jname]);
			}
		}
	if ($wygral == "obronca") {
		if ($jname == 'unit_spy') {
			$szpieg_pow_ilosc_att = pow($wojsko_napastnika[$jname] * 2,'1.5');
			$szpieg_pow_ilosc_def = pow($wojsko_obroncy[$jname],'1.5');
			if ($szpieg_pow_ilosc_att > $szpieg_pow_ilosc_def) {
				$szpiegowanie = true;
				$napastnik_straty[$jname] = round($wojsko_napastnika[$jname] * ($szpieg_pow_ilosc_def / $szpieg_pow_ilosc_att));
				} else {
				$szpiegowanie = false;
				$napastnik_straty[$jname] = $wojsko_napastnika[$jname];
				}
			$obronca_straty[$jname] = round($wojsko_obroncy[$jname] * $stosunek_straty['wszystko']);
			$nap_os_straty += $cl_units->get_bhprice($jname) * $napastnik_straty[$jname];
			$obr_os_straty += $cl_units->get_bhprice($jname) * $obronca_straty[$jname];
			} else {
			$napastnik_straty[$jname] = $wojsko_napastnika[$jname];
			$obronca_straty[$jname] = round($wojsko_obroncy[$jname] * $stosunek_straty['wszystko']);
			$nap_os_straty += $cl_units->get_bhprice($jname) * $napastnik_straty[$jname];
			$obr_os_straty += $cl_units->get_bhprice($jname) * $obronca_straty[$jname];
			}
		}
	}

if ($wygral === "napastnik") {
	$_szlachta_pozostala = $wojsko_napastnika['unit_snob'] - $napastnik_straty['unit_snob'];
	if ($_szlachta_pozostala > 0) {
		$pop_minus = true;
		} else {
		$pop_minus = false;
		}
	} else {
	$pop_minus = false;
	}

if (($mor_level != $nowy_mur_level) || ($cel_katapolt_level != $nowy_ktpc_level)) {
	$czy_punkty_minus = true;
	$stracone_punkty += $cl_builds->get_points('wall',$mor_level) - $cl_builds->get_points('wall',$nowy_mur_level);
	if ($cel_budynek_nazwa !== null) {
		$stracone_punkty += $cl_builds->get_points($cel_budynek_nazwa,$cel_katapolt_level) - $cl_builds->get_points($cel_budynek_nazwa,$nowy_ktpc_level);
		}
	} else {
	$czy_punkty_minus = false;
	}

if ($suma_j_att == $wojsko_napastnika['unit_spy']) {
	$tylko_szpiegowanie = true;
	} else {
	$tylko_szpiegowanie = false;
	}

$output_array = array(
	'jednostki_att_straty' => $napastnik_straty,
	'jednsotki_def_straty' => $obronca_straty,
	'wygral' => $wygral,
	'mur_nowy_lvl' => $nowy_mur_level,
	'mur_stary_lvl' => $mor_level,
	'ktpc_nowy_lvl' => $nowy_ktpc_level,
	'ktpc_stary_lvl' => $cel_katapolt_level,
	'att_osadnicy_straty' => $nap_os_straty,
	'def_osadnicy_straty' => $obr_os_straty,
	'strata_punktow' => $stracone_punkty,
	'czy_punkty_minus' => $czy_punkty_minus,
	'zbicie_poparcia' => $pop_minus,
	'szpiegowanie' => $szpiegowanie,
	'tylko_szpiegowanie' => $tylko_szpiegowanie,
	'maks_lup' => $maks_lup,
	'stosunek_deff' => $stosunek_straty['wszystko']
	);

return $output_array;
}

 

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...