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

[Mini-tut]2 systemy walk : Tourowy(standard) i System walk taki jak w plemionach.


Rekomendowane odpowiedzi

Opublikowano

Każdy ,kto ma jakieś walki w grze wie ,że problemem jest napisać system walk bez problemów. Ja dziś zaprezentuję 2 systemy walk :

- Taki jak w plemionach

- Tourowy (Player Vs. Player)

A oto kody :

System walki plemion :

 

 

Uwzględniłem tu kilka dodatkowych rzeczy ,ale bez bonusu nocnego bo robię to pod swoją grę :

<?php
require_once("../../_AppStart.php");//Połączenie do serwera SQl i inne
mysql_select_db("kongo96lbn_wov");

$atak = @mysql_fetch_array(mysql_query("SELECT * FROM s1__ruchy WHERE Do=".$_GET['village']." AND Typ='Atak' ORDER BY czas_zostal ASC LIMIT 1"));
$obrona = @mysql_fetch_array(mysql_query("SELECT * FROM s1__wojsko WHERE Id=".$atak['Do']));
$typie = mysql_num_rows(mysql_query("SELECT * FROM s1__ruchy WHERE Do=".$_GET['village']." AND Typ='Atak' ORDER BY czas_zostal ASC LIMIT 1"));
$at_v = @mysql_fetch_array(mysql_query("SELECT * FROM s1 WHERE Id=".$atak['Od']));
$ob_v = @mysql_fetch_array(mysql_query("SELECT * FROM s1 WHERE Id=".$atak['Do']));
if($typie > 0){
$types_at = 0;
if($atak['Pikinierzy_ile'] > 0) {
$Pikinierzy_at = $atak['Pikinierzy_ile'] * 40 ;
$types_at = $types_at + 1;
}
if($atak['Miecznicy_ile'] > 0) {
$Miecznicy_at = $atak['Miecznicy_ile'] * 60 ;
$types_at = $types_at + 1;
}
if($atak['Wojownicy_ile'] > 0) {
$Wojownicy_at = $atak['Wojownicy_ile'] * 300 ;
$types_at = $types_at + 1;
}
if($atak['Luczynicy_ile'] > 0) {
$Lucznicy_at = $atak['Lucznicy_ile'] * 100 ;
$types_at = $types_at + 1;
}
if($atak['Zwiadowcy_ile'] > 0) {
$Zwiadowcy_at = $atak['Zwiadowcy_ile'] * 0 ;
}
if($atak['Kawaleria_ile'] > 0) {
$Kawaleria_at = $atak['Kawaleria_ile'] * 600 ;
$types_at = $types_at + 1;
}
if($atak['Tarany_ile'] > 0) {
$Tarany_at = $atak['Tarany_ile'] * 0 ;
$types_at = $types_at + 1;
}
if($atak['Katapulty_ile'] > 0) {
$Katapulty_at = $atak['Katapulty_ile'] * 0 ;

}
if($atak['Szlachcic_ile'] > 0 ) {
$Szlachcic_at = $atak['Szlachcic_ile'] * 1000;
}


//Dobra. Punkty dla obrońcy :
//Trzeba pamiętać o ogólnym zsumowaniu i ilosci na jaka ma dzielic potem :P
$types_ob = 0;
if($obrona['Pikinierzy'] > 0) {
$Pikinierzy_ob = $obrona['Pikinierzy'] * 200;
$types_ob = $types_ob + 1;
}
if($obrona['Miecznicy'] > 0) {
$Miecznicy_ob = $obrona['Miecznicy'] * 300;
$types_ob = $types_ob + 1;
}
if($obrona['Wojownicy'] > 0) {
$Wojownicy_ob = $obrona['Wojownicy'] * 40;
$types_ob = $types_ob + 1;
}
if($obrona['Lucznicy'] > 0) {
$Lucznicy_ob = $obrona['Lucznicy'] * 500;
$types_ob = $types_ob + 1;
}
if($obrona['Zwiadowcy'] > 0) {
$Zwiadowcy_ob = $obrona['Zwiadowcy'];
$zwiad = true;
}
if($obrona['Kawaleria'] > 0) {
$Kawaleria_ob = $obrona['Kawaleria'] * 200;
$types_ob = $types_ob + 1;
}
if($obrona['Tarany'] > 0) {
$Tarany_ob = $obrona['Tarany'] * 0;
$tarany = true;
}
if($obrona['Katapulty'] > 0) {
$Katapulty_ob = $obrona['Katapulty'] * 800;
$types_ob = $types_ob + 1;
}
if($obrona['Szlachcic'] > 0) {
$Szlachcic_ob = $obrona['Szlachcic'] * 500;
$types_ob = $types_ob + 1;
}
//Test na bonus nocny (+ 50 % do obrony czyli pkt.)
$allpoints_ob = $Pikinierzy_ob + $Miecznicy_ob + $Wojownicy_ob + $Lucznicy_ob + $Kawaleria_ob + $Szlachcic_ob + $Katapulty_ob;
$r_point = $allpoints_ob;
$czas = date("G");
if($czas < 8) {
$allpoints_ob = $allpoints_ob + ($allpoints_ob * 0.50);
}
//To był bonus. Jeszcze tylko boga i mur :
if($ob_v['Wiara'] == 'Chrzescijanstwo') {
//+ 10 %obrony :
$allpoints_ob = $allpoints_ob + ($r_point * 0.10);
}
$allpoints_at = $Pikinierzy_at + $Miecznicy_at + $Wojownicy_at + $Lucznicy_at + $Kawaleria_at + $Szlachcic_at;

if($at_v['Wiara'] == 'Aszura') {
$allpoints_at = $allpoints_at * 1.15;
}

if($types_ob > 0) {
if($allpoints_ob > $allpoints_at) {
$allpoints_ob_new = $allpoints_ob - $allpoints_at;
//Dobra. Teraz trzeba dać jednostki ;p. (Ile zostanie)
$desc_by_jednostka = $allpoints_ob_new / $types_at ;

$Pikinierzy_ob = $Pikinierzy_ob - $desc_by_jednostka;
$Miecznicy_ob = $Miecznicy_ob - $desc_by_jednostka;
$Wojownicy_ob = $Wojownicy_ob - $desc_by_jednostka;
$Lucznicy_ob = $Lucznicy_ob - $desc_by_jednostka;
$Kawaleria_ob = $Kawaleria_ob - $desc_by_jednostka;
$Katapulty_ob = $Katapulty_ob - $desc_by_jednostka;

$Pikinierzy_ob = $Pikinierzy_ob / 200;
$Miecznicy_ob = $Miecznicy_ob / 300;
$Wojownicy_ob = $Wojownicy_ob / 40;
$Lucznicy_ob = $Lucznicy_ob / 500;
$Kawaleria_ob = $Kawaleria_ob / 200;
$Katapulty_ob = $Katapulty_ob / 800;

$Pikinierzy_ob = number_format($Pikinierzy_ob, 0);
$Miecznicy_ob = number_format($Miecznicy_ob, 0);
$Wojownicy_ob = number_format($Wojownicy_ob, 0);
$Lucznicy_ob = number_format($Lucznicy_ob, 0);
$Kawaleria_ob = number_format($Kawaleria_ob, 0);
$Katapulty_ob = number_format($Katapulty_ob, 0);
//Okej Jest all ;]. Cuk yea.
//Może small updates ?? Czyli : Update w s1__wojsko i Usunięcie z s1__ruchy nie ?
mysql_query("UPDATE s1__wojsko SET Pikinierzy=$Pikinierzy_ob, Miecznicy=$Miecznicy_ob, Wojownicy=$Wojownicy_ob, Lucznicy=$Lucznicy_ob, Kawaleria=$Kawaleria_ob, Katapulty=$Katapulty_ob WHERE Id=".$atak['Do']);
//Dobra otrzymał to swoje wojsko 
//Teraz papa ataku !
mysql_query("DELETE FROM s1__ruchy WHERE Id=".$atak['Id']);
}


//No dobrze. A teraz Jak wygrywa atakujący to jest taki rozpierdol ,że... no duży :P
if($allpoints_ob < $allpoints_at) {

$allpoints_at_new = $allpoints_at - $allpoints_ob;
//Dobra. Teraz trzeba dać jednostki ;p. (Ile zostanie)

$desc_by_jednostka = $allpoints_at_new / $types_ob ;

$Pikinierzy_at = $Pikinierzy_at - $desc_by_jednostka;
$Miecznicy_at = $Miecznicy_at - $desc_by_jednostka;
$Wojownicy_at = $Wojownicy_at - $desc_by_jednostka;
$Lucznicy_at = $Lucznicy_at - $desc_by_jednostka;
$Kawaleria_at = $Kawaleria_at - $desc_by_jednostka;
$Katapulty_at = $Katapulty_at - $desc_by_jednostka;

$Pikinierzy_at = $Pikinierzy_at / 200;
$Miecznicy_at = $Miecznicy_at / 300;
$Wojownicy_at = $Wojownicy_at / 40;
$Lucznicy_at = $Lucznicy_at / 500;
$Kawaleria_at = $Kawaleria_at / 200;
$Katapulty_at = $Katapulty_at / 800;

$Pikinierzy_at = number_format($Pikinierzy_at, 0);
$Miecznicy_at = number_format($Miecznicy_at, 0);
$Wojownicy_at = number_format($Wojownicy_at, 0);
$Lucznicy_at = number_format($Lucznicy_at, 0);
$Kawaleria_at = number_format($Kawaleria_at, 0);

//Okej Jest all ;]. Cuk yea.

//mysql_query("UPDATE s1__wojsko SET Pikinierzy=$Pikinierzy_at, Miecznicy=$Miecznicy_at, Wojownicy=$Wojownicy_at, Lucznicy=$Lucznicy_at, Kawaleria=$Kawaleria_at WHERE Id=".$atak['Od']);
//Skoro wygrał to papa wojsko !
mysql_query("UPDATE s1__wojsko SET Pikinierzy=0, Miecznicy=0, Wojownicy=0, Lucznicy=0, Kawaleria=0, Zwiadowcy=0, Katapulty=0, Tarany=0, Szlachcic=0 WHERE Id=".$atak['Do']);
$wojsko = mysql_fetch_array(mysql_query("SELECT * FROM s1 WHERE Id=".$atak['Od']));
$time= time() + $atak['Przybycie'];
mysql_query("UPDATE s1__ruchy SET czas_zostal=$time WHERE Id=".$atak['Id']);
//Trzeba zauważyć ,że jeden taran = 1 poziom muru
if($Tarany > 0) {
$pobierz_mur = mysql_fetch_array(mysql_query("SELECT * FROM s1__buldings WHERE Village_ID=".$atak['Do']." AND Bulding_ID=9"));
if($pobierz_mur) {
$poziom = $pobierz_mur['Level'] - $Tarany;
if($poziom <= 0) {
mysql_query("DELETE FROM s1__buldings WHERE Id=".$pobierz_mur['Id']);
} else {
myslq_query("UPDATE s1__buldings SET Level=$poziom WHERE Id=".$pobierz_mur['Id']);
}
}
}

}
//I teraz cos co będzie zawsze cudem ale możliwym :
if($allpoints_ob == $allpoints_at) {
mysql_query("UPDATE s1__wojsko SET Pikinierzy=0, Miecznicy=0, Wojownicy=0, Lucznicy=0, Kawaleria=0, Zwiadowcy=0, Katapulty=0, Tarany=0, Szlachcic=0 WHERE Id=".$atak['Do']);
mysql_query("DELETE FROM s1__ruchy WHERE Id=".$atak['Id']);
}

}
//Trzeba napisać warunek jesli niema woja . Ale o tym niepomyslalem od razu
if($types_ob == 0) {
$time = time() + $atak['Przybycie'];
mysql_query("UPDATE s1__ruchy SET Typ='Powrot' WHERE Id=".$atak['Do']);
}
}
//Już się pobiliscie ?  No to może do "raportówni"
//Ale ale !
//A co jesli wysłał obrone ?
//Ehh i znowu w hu pisania
if($typie == 0) {
$wsparcie = @mysql_fetch_array(mysql_query("SELECT * FROM s1__ruchy WHERE Typ='Pomoc' ORDER BY Przybycie ASC LIMIT 1"));
$potrzeba = @mysql_fetch_array(mysql_query("SELECT * FROM s1__wojsko WHERE Id=".$wsparcie['Do']));
//Teraz ile to wojska wnusiu nałapałes ?  :
$Pikinierzy = $wsparcie['Pikinierzy_ile'] + $potrzeba['Pikinierzy'];
$Miecznicy = $wsparcie['Miecznicy_ile'] + $potrzeba['Miecznicy'];
$Wojownicy = $wsparcie['Wojownicy_ile'] + $potrzeba['Wojownicy'];
$Lucznicy = $wsparcie['Lucznicy_ile'] + $potrzeba['Lucznicy'];
$Kawaleria = $wsparcie['Kawaleria_ile'] + $potrzeba['Kawaleria'];
$Zwiadowcy = $wsparcie['Zwiadowcy_ile'] + $potrzeba['Zwiadowcy'];
$Tarany = $wsparcie['Tarany_ile'] + $potrzeba['Tarany'];
$Katapulty = $wsparcie['Katapulty_ile'] + $potrzeba['Katapulty'];
$Szlachcic = $wsparcie['Szlachcic_ile'] + $potrzeba['Szlachcic'];
//No no ! Ładnie. A teraz dodaj do kurwy nędzy i zrób postój w wiosce !echo $Pikinierzy;
mysql_query("UPDATE s1__wojsko SET Pikinierzy=$Pikinierzy, Miecznicy=$Miecznicy, Wojownicy=$Wojownicy, Lucznicy=$Lucznicy, Kawaleria=$Kawaleria, Zwiadowcy=$Zwiadowcy, Katapulty=$Katapulty, Tarany=$Tarany, Szlachcic=$Szlachcic WHERE Id=".$_GET['village']);
mysql_query("UPDATE s1__ruchy SET IN_Village='True' WHERE Id=".$wsparcie['Id']);
}
header("Location: http://worldofvillages.tk/s1/game.php?village=".$_GET['village']."&screen=wioska");
exit;
?>

 

 

A oto tourowy :

 

 

Z uwzględnieniem skilli !

$db->Query = mysql_fetch_array(mysql_query

<?php
if((empty($_GET['mob'])) && (!empty($_GET['player'])) ) {
//Czyli walka z mobkiem.
//Pobierzmy O mobie all :
$mob = mysql_query("SELECT * FROM s1__chars WHERE Id=".$_GET['player']);
//Dobrze teraz troszkie dziwne będzie ,ale opiszę
$skills_op = $db->Query("SELECT COUNT(*) FROM s1__Skills WHERE Owner=".$_GET['player']);
$skills_op = $skills_op - 1;
$skills_at = $db->Query("SELECT COUNT(*) FROM s1__Skills WHERE Owner=".$char['Id']);
$skills_at = $skills_at - 1;
//Ma ilosci skilli. Ok
if(mysql_num_rows($mob) > 0) {
$mob = mysql_fetch_array($mob);
//Pamiętamy ,że $char to o graczu 
$hp_op = $mob['Hp'];
$hp_player = $char['Hp'];

for($i =1; $i <10000; $i++) {
//Walka. Losowo - albo mob albo player 
if($i == 1){

$pierwszenstwo = rand(1, 2);
//Za 1 razem nie ?? :P
if($pierwszenstwo == 1) {
$start = $mob;
} else {
$start = $char;
}

}
//Dobra mamy kto 1 zaczyna.
//Uwzględnijmy umiejetnosc jako 1
if (rand(1, 2) == 1) {
//Dobra ma skilla :
if($start['Id'] == $char['Id']) {	//Czyli gracz zaczyna z skilla
if($skills_at > 0) {
$los = rand(0, $skills_at);
//Niech pobierze skilla z tabeli. A potem z głównej
$q = $db->Query("SELECT * FROM s1__Skills WHERE Owner=".$char['Id']." LIMIT $los ,1");
//Pobiera z głównej tabeli :
$Skill = $db->Query("SELECT * FROM General__Skills WHERE Id=".$q['Skill_ID']);
//Okej tera różne opcje :

if($Skill['Type'] == 'Demage' OR $Skill['Type'] == 'Special') {
//Jest to typ ataku normalnego :P
$attack = rand($Skill['Demage_min'], $Skill['Demage_max']);
if($Skill['Demage_min'] <= 0 && $Skill['Demage_max'] <= 0) {
$normal_attack = false;
}
}
if($Skill['Type'] == 'HP' OR $Skill['Type'] == 'Special') {
$Start['Hp'] = $Start['Hp'] + $Skill['HP_up'];
}
if($Skill['Type'] == 'Critical' OR $Skill['Type'] == 'Special') {
$Start['Critical_attack'] = $Start['Critical_attack'] + $Skill['Critical_attack_up'];
}
if($Skill['Type'] == 'Deffend' OR $Skill['Type'] == 'Special') {
$Start['Deffend'] = $Start['Deffend'] + $Skill['Deffend'];
}
if($Skill['Type'] == 'Attack_up' OR $Skill['Type'] == 'Special') {
$Start['Attack_min'] = $Start['Attack_min'] + $Skill['Attack_up'];
$Start['Attack_max'] = $Start['Attack_max'] + $Skill['Attack_up'];
}
//Powtórzenie tego co wyżej 

if($Skill['Type'] == 'Demage' OR $Skill['Type'] == 'Special') {
//Jest to typ ataku normalnego :P
$attack = rand($Skill['Demage_min'], $Skill['Demage_max']);
if($Skill['Demage_min'] <= 0 && $Skill['Demage_max'] <= 0) {
$normal_attack = false;
}
}
if($Skill['Type'] == 'HP' OR $Skill['Type'] == 'Special') {
$char['Hp'] = $char['Hp'] + $Skill['HP_up'];
}
if($Skill['Type'] == 'Critical' OR $Skill['Type'] == 'Special') {
$char['Critical_attack'] = $char['Critical_attack'] + $Skill['Critical_attack_up'];
}
if($Skill['Type'] == 'Deffend' OR $Skill['Type'] == 'Special') {
$char['Deffend'] = $char['Deffend'] + $Skill['Deffend'];
}
if($Skill['Type'] == 'Attack_up' OR $Skill['Type'] == 'Special') {
$char['Attack_min'] = $char['Attack_min'] + $Skill['Attack_up'];
$char['Attack_max'] = $char['Attack_max'] + $Skill['Attack_up'];

}
}
} else {
//Opek ;p
if($skills_op > 0) {
$los = rand(0, $skills_op);
//Niech pobierze skilla z tabeli. A potem z głównej
$q = $db->Query("SELECT * FROM s1__Skills WHERE Owner=".$mob['Id']." LIMIT $los ,1");
//Pobiera z głównej tabeli :
$Skill = $db->Query("SELECT * FROM General__Skills WHERE Id=".$q['Skill_ID']);
//Okej tera różne opcje :

if($Skill['Type'] == 'Demage' OR $Skill['Type'] == 'Special') {
//Jest to typ ataku normalnego :P
$attack = rand($Skill['Demage_min'], $Skill['Demage_max']);
if($Skill['Demage_min'] <= 0 && $Skill['Demage_max'] <= 0) {
$normal_attack = false;
}
}
if($Skill['Type'] == 'HP' OR $Skill['Type'] == 'Special') {
$Start['Hp'] = $Start['Hp'] + $Skill['HP_up'];
}
if($Skill['Type'] == 'Critical' OR $Skill['Type'] == 'Special') {
$Start['Critical_attack'] = $Start['Critical_attack'] + $Skill['Critical_attack_up'];
}
if($Skill['Type'] == 'Deffend' OR $Skill['Type'] == 'Special') {
$Start['Deffend'] = $Start['Deffend'] + $Skill['Deffend'];
}
if($Skill['Type'] == 'Attack_up' OR $Skill['Type'] == 'Special') {
$Start['Attack_min'] = $Start['Attack_min'] + $Skill['Attack_up'];
$Start['Attack_max'] = $Start['Attack_max'] + $Skill['Attack_up'];
}
//Powtórzenie tego co wyżej 

if($Skill['Type'] == 'Demage' OR $Skill['Type'] == 'Special') {
//Jest to typ ataku normalnego :P
$attack = rand($Skill['Demage_min'], $Skill['Demage_max']);
if($Skill['Demage_min'] <= 0 && $Skill['Demage_max'] <= 0) {
$normal_attack = false;
}
}
if($Skill['Type'] == 'HP' OR $Skill['Type'] == 'Special') {
$mob['Hp'] = $mob['Hp'] + $Skill['HP_up'];
}
if($Skill['Type'] == 'Critical' OR $Skill['Type'] == 'Special') {
$mob['Critical_attack'] = $mob['Critical_attack'] + $Skill['Critical_attack_up'];
}
if($Skill['Type'] == 'Deffend' OR $Skill['Type'] == 'Special') {
$mob['Deffend'] = $mob['Deffend'] + $Skill['Deffend'];
}
if($Skill['Type'] == 'Attack_up' OR $Skill['Type'] == 'Special') {
$mob['Attack_min'] = $mob['Attack_min'] + $Skill['Attack_up'];
$mob['Attack_max'] = $mob['Attack_max'] + $Skill['Attack_up'];
  }
 }
}
}
//Jesli jednak nie uderzy skillem. (szansa to 50% !)
if($normal_attack) {
$attack = rand($start['Attack_min'], $start['Attack_max']);
}
//Dobra. A teraz czy walnie krytyka :
$start['Critical_attack'] = number_format($start['Critical_attack'], 0);
$critical = rand($start['Critical_attack'], 100);
if($critical <= $start['Critical_attack']) {
$attack = $attack * 2;
}
//Mamy ile mu hitnie. Teraz niech zabierze 
if($pierwszenstwo == 1) {
$hp_op = $hp_op - $attack;
} else {
$hp_player = $hp_player - $attack;
}
//Złapało. Teraz tekst jaki przy okazji się pojawi :
//Ale urwał  ! Teraz zamiana ról ! 
if($pierwszenstwo == 1) {
$start = $char;
$pierwszenstwo = 2;
} else {
$start = $mob;
$pierwszenstwo = 1;
}

//Dobra. Jak już ktos kogos ubił :P :
if(($hp_op <= 0) OR ($hp_player <=0)) {
$game_over = true;
if($hp_op > 0) {
$win = false;
}
if($hp_player > 0) {
$win = true;
}
break;
   }
//Napiszmy o rezultatach
 }
if($game_over) {
echo'HP przeciwnika :'.$hp_op.'<br />
HP Twoje : '.$hp_player.'<br />';
}
  }
}
?>

 

 

 

PS : Wiecie ,że na MPC jest ograniczona ilość emotikon ? :D

Specjalista
Opublikowano

Fajnie pomyślane, lecz myślę że tutaj łatwiej byłoby to napisać obiektowo ;)

Znaczy sam nie potrafię jeszcze jakoś obiektowo, ale obiektowo byłoby bardziej optymalnie :)

 

Widać że masz chęci, dzielisz się wiedzą ;)

Załóż jakiegoś bloga, będziesz mógł publikować swoje treści i etc , nabędziesz stałych cztelników ;)

Z czasem dobre to będzie jako załącznik do podania o prace ;pp

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...