Source Rhenn
for (int pi=0; pi<PlayerM.size(); pi++)
{
PlayerM[pi].UpdatePoz();//(1.9.3)
for (int i=0; i<Boty.size(); i++)//--------[A*A_STAR]----------
{
PlayerM[pi].blisko=false;
PlayerM[pi].atak=false;
PlayerM[pi].wrocilem=true;
//gdy enemy jest blisko playera i nie jest daleko od swojej bazy to....
if(PlayerM[pi].pozX+5>xA[i]&&PlayerM[pi].pozX-5<xA[i]&&PlayerM[pi].pozY+5>yA[i]&&
PlayerM[pi].pozY-5<yA[i]&&PlayerM[pi].pozX<xAGlob[i]+15&&PlayerM[pi].pozX>xAGlob[i]-15&&
PlayerM[pi].pozY<yAGlob[i]+15&&PlayerM[pi].pozY>yAGlob[i]-15&&PlayerM[pi].lok==LOKAL)
{
if(Boty[i].Rezerwacja=="")//Gdy ten enemy nie jest zarezerwowany to zarezerwuj
Boty[i].Rezerwacja=PlayerM[pi].name;
if((Boty[i].Rezerwacja==PlayerM[pi].name)&&(!Boty[i].Respawn))//gdy jest mój to atakuj
{
PlayerM[pi].atak=true;//poinformuj,że go atakuje
PlayerM[pi].blisko=true;//poinformuj,że jest blisko ciebie
if(xAOld[i]!=xA[i]||yAOld[i]!=yA[i])//do optymalizacji(aby SI niewykonywało się tak samo)
{
route=pathFind(xA[i],yA[i],PlayerM[pi].pozX,PlayerM[pi].pozY,MapSize,MapSize);//Wykonaj algorytm-A*
int jjj;//doA*
char ccc;//doA*
if(route.length()>0)
{
ccc=route.at(0);
jjj=atoi(&ccc);
}
//Boty[i].wrog.move(dx[jjj],dy[jjj]);//Enemy wykonuje ruch podążając za graczem.
Boty[i].Wrog.x+=dx[jjj];
Boty[i].Wrog.y+=dy[jjj];
jjjOld[i]=jjj;//do optymalizacji
xAOld[i]=(int)(Boty[i].Wrog.x+16)/32;//do optymalizacji
yAOld[i]=(int)(Boty[i].Wrog.y+16)/32;//do optymalizacji
}else
{
Boty[i].Wrog.x+=dx[jjjOld[i]];//do optymalizacji
Boty[i].Wrog.y+=dy[jjjOld[i]];//do optymalizacji
}
}
}
if((Boty[i].Rezerwacja==PlayerM[pi].name)&&(!Boty[i].Respawn))//gdy jest mój to..
{
if(!PlayerM[pi].blisko)//Enemy wraca na swoją pozycje!
{
PlayerM[pi].atak=false;//poinformuj,że cie już nie atakuje
if(xAOld[i]!=xA[i]||yAOld[i]!=yA[i])//do optymalizacji(aby SI nie wykonywało się tak samo)
{
route=pathFind(xA[i],yA[i],xAGlob[i],yAGlob[i],MapSize,MapSize);//Enemywraca-A*(szuka drogi do bazy)
int jjj;//doA*
string ccc;//doA*
if(route.length()>0)//Gdy jeszcze enemy wraca do swojej bazy to..
{
PlayerM[pi].wrocilem=false;//poinformuj,że jeszcze niedotarł do bazy
ccc=route.at(0);
jjj=atoi(ccc.c_str());//(1.9.3)
Boty[i].Wrog.x+=dx[jjj];
Boty[i].Wrog.y+=dy[jjj];
jjjOld[i]=jjj;//do optymalizacji
xAOld[i]=(int)(Boty[i].Wrog.x+16)/32;//do optymalizacji
yAOld[i]=(int)(Boty[i].Wrog.y+16)/32;//do optymalizacji
for(intpii=0;pii<PlayerM.size();pii++)
{
if(pii==pi)continue;//jeśli to nie jesteś ty to..
if(PlayerM[pii].pozX+5>xA[i]&&PlayerM[pii].pozX-5<xA[i]&&PlayerM[pii].pozY+5>yA[i]&&PlayerM[pii].pozY-5<yA[i])
Boty[i].Rezerwacja="";//zwolnij rezerwacje jeśli napotkasz podrodze innego playera
}
}else
{
PlayerM[pi].wrocilem=true;//[else]poinformuj,że enemy wrócił
Boty[i].Rezerwacja="";//zwolnij rezerwacje(bo juz cie nie goni)
Boty[i].Hp=Boty[i].HpMax;//v1.9.1
}
}else
{
PlayerM[pi].wrocilem=false;
Boty[i].Wrog.x+=dx[jjjOld[i]];//do optymalizacji
Boty[i].Wrog.y+=dy[jjjOld[i]];//do optymalizacji
}
}//Enemy wraca na swoją pozycje!
//if(prev[i]!=Boty[i].wrog.getPosition())///Gdy pozycja enemy sie zmieniła[WYŚLIJPACKET!!!]
if(prev[i].x!=Boty[i].Wrog.x||prev[i].y!=Boty[i].Wrog.y)
{
if(PlayerM[pi].wrocilem==false||PlayerM[pi].atak==true)//wyslij poz.gdy goni playera lub wraca.
{
sf::PacketEnE;
shortint what=5;//5 to enemy
string jakiE=Boty[i].name;
sf::Vector2fpozEnE(0,0);
//pozEnE.x=Boty[i].wrog.getPosition().x;//e1.enemy.getPosition().x;//poz enemy
//pozEnE.y=Boty[i].wrog.getPosition().y;
pozEnE.x=Boty[i].Wrog.x;//poz enemy
pozEnE.y=Boty[i].Wrog.y;
EnE<<what<<pozEnE.x<<pozEnE.y<<jakiE<<Boty[i].Hp;
socket.send(EnE);
EnE.clear();
if(Boty[i].Hp<0)
{
Boty[i].Hp=Boty[i].HpMax;
Boty[i].Respawn=true;//zarezerwuj
//Boty[i].wrog.setPosition(sf::Vector2f(xAGlob[i]*32,yAGlob[i]*32));
Boty[i].Wrog.x=xAGlob[i]*32;
Boty[i].Wrog.y=yAGlob[i]*32;
}
}
}
}//dalszarezerwacja(odwracamdowyslijpakiet)
}//for(inti=0;i<Boty.size();i++)
}//for(intpi=0;pi<PlayerM.size();pi++)
Komentarze: