StreetGuy 1 Odesláno: 23. Květen, 2017 Share Odesláno: 23. Květen, 2017 Popis problému: Zdravím, mám taký problém. Robím si race system, a skončil som u poradia. Robím také klasické poradie, že keď hráči jazdia, aby vedeli kto je pred nimi, poprípade za nimi, Všetko sa mi doteraz darilo, ale zastavil som sa u toho poradia, Mám zadefinované pre každého hráča, koľko CP prešiel v RaceCount[playerid] Neviem spraviť script, ktorý by zoradil hráčov od najviac prejdených CP, a ak by mali 2+ rovnaký CP., zistilo by to poradie podľa vzdialenosti od CP. Vedeli by ste mi niekto poradiť ako to spraviť, poprípade poslať nejaký príklad ? Chyby/varování kompilátoru a při běhu: -- Kód: -- Dodatečné poznámky: -- Link to comment Share on other sites More sharing options...
0 Scydo 397 Odesláno: 23. Květen, 2017 Share Odesláno: 23. Květen, 2017 Neviem spraviť script, ktorý by zoradil hráčov od najviac prejdených CP, for (...) { if (RaceCount[playerid] > RaceCount[i]) { /* Je ve předu před všemi */ } } a ak by mali 2+ rovnaký CP., zistilo by to poradie podľa vzdialenosti od CP. if (GetPlayerDistanceFromPoint(playerid, CheckpointX[cpid], CheckpointY[cpid], CheckpointZ[cpid]) < 100.0) { /* Pokud je méně než 100 metrů od checkpointu */ }A pak ty vzdálenosti u obou porovnáš... Bez kódu ti sotva může někdo poradit(jestli jsi něco skutečně udělal tedy...) Link to comment Share on other sites More sharing options...
0 StreetGuy 1 Odesláno: 23. Květen, 2017 Author Share Odesláno: 23. Květen, 2017 Ono problem je, že ja som tam nemal playerid ... nakoniec mám cyklus v cykluse teda if(i>j) Link to comment Share on other sites More sharing options...
0 StreetGuy 1 Odesláno: 25. Květen, 2017 Author Share Odesláno: 25. Květen, 2017 (upraveno) Preco mi nespusti cyklus v cykli ? Edited 25. Květen, 2017 by StreetGuy Link to comment Share on other sites More sharing options...
0 Globální moderátor HighPrint 177 Odesláno: 25. Květen, 2017 Globální moderátor Share Odesláno: 25. Květen, 2017 Kód? Link to comment Share on other sites More sharing options...
0 StreetGuy 1 Odesláno: 25. Květen, 2017 Author Share Odesláno: 25. Květen, 2017 (upraveno) forward Poradie(); public Poradie() { new str[50]; RTsec ++; for(new i;i<MAX_PLAYERS;i++) { if(!IsPlayerConnected(i)) continue; if(!inRace[i]) continue; RacePoradie[i] = 1; //Time if(RTsec == 60) { RTsec=0; RTmin++; } if(RTmin>=10) format(str,sizeof(str),"Cas: %i",RTmin); else if(RTmin<=9) format(str,sizeof(str),"Cas: 0%i",RTmin); if(RTsec>=10) format(str,sizeof(str),"%s:%i",str,RTsec); else if(RTsec<=9) format(str,sizeof(str),"%s:0%i",str,RTsec); PlayerTextDrawSetString(i,RaceTime[i],str); PlayerTextDrawShow(i,RaceTime[i]); //CP format(str,sizeof(str),"CP: %i/%i",CpCount[i],MaxCp); PlayerTextDrawSetString(i,RaceCP[i],str); PlayerTextDrawShow(i,RaceCP[i]); //Poradie for(new j;j<100;j++) { if(j==100) { new specstr[50]; if(RacePoradie[i] == 1) { format(specstr,sizeof(specstr),"1:%s(%i)",GetName(i),i); PlayerTextDrawSetString(j,Race[0][j],specstr); PlayerTextDrawShow(j,Race[0][j]); } else if(RacePoradie[i] == 2) { format(specstr,sizeof(specstr),"2:%s(%i)",GetName(i),i); PlayerTextDrawSetString(j,Race[0][j],specstr); PlayerTextDrawShow(j,Race[0][j]); } } if(!IsPlayerConnected(j)) continue; else if(!inRace[j]) continue; if(CpCount[i] < CpCount[j]) { RacePoradie[i]++; } else if(CpCount[i] == CpCount[j]) { new Float:disti = GetPlayerDistanceFromPoint(i,CP[CpCount[i]][cX], CP[CpCount[i]][cY], CP[CpCount[i]][cZ]); new Float:distj = GetPlayerDistanceFromPoint(j,CP[CpCount[j]][cX], CP[CpCount[j]][cY], CP[CpCount[j]][cZ]); if(disti < distj) RacePoradie[i]+=1; else continue; } } } return 1; } Edited 25. Květen, 2017 by StreetGuy Link to comment Share on other sites More sharing options...
0 Globální moderátor HighPrint 177 Odesláno: 25. Květen, 2017 Globální moderátor Share Odesláno: 25. Květen, 2017 if(j==100) - tahle podmínka se totiž nevykoná nikdy... Někdo kdo programoval 3 roky by to mohl vědět Also tvůj algoritmus porovnává hráče sám se sebou. Taky se pak dá zrychlit (složitost ovšem zůstává ale stejná) tím, že jakmile nějaký hráč má menší tedy CpCount > CpCount[j], tak vyskočíš z vnitřního cyklu PS: Jinak celá tenhle "věc", úplně špatně a neefektivní – co když bude 70s? Co s těma 10s? To je jako vyresetuješ? if(RTsec == 60) { RTsec=0; RTmin++; } if(RTmin>=10) format(str,sizeof(str),"Cas: %i",RTmin); else if(RTmin<=9) format(str,sizeof(str),"Cas: 0%i",RTmin); if(RTsec>=10) format(str,sizeof(str),"%s:%i",str,RTsec); else if(RTsec<=9) format(str,sizeof(str),"%s:0%i",str,RTsec); PlayerTextDrawSetString(i,RaceTime[i],str); přepsat na: format(str,sizeof(str),"Cas: %02d:%02d",RTsec/60,RTsec%60); PlayerTextDrawSetString(i,RaceTime[i],str); Link to comment Share on other sites More sharing options...
0 StreetGuy 1 Odesláno: 26. Květen, 2017 Author Share Odesláno: 26. Květen, 2017 (upraveno) forward Poradie(); public Poradie() { new str[50]; RTsec ++; for(new i;i<MAX_PLAYERS;i++) { if(!IsPlayerConnected(i)) continue; if(!inRace[i]) continue; RacePoradie[i] = 1; RacePoradie[0] = 1; format(str,sizeof(str),"Cas: %02d:%02d",RTsec/60,RTsec%60); PlayerTextDrawSetString(i,RaceTime[i],str); PlayerTextDrawShow(i,RaceTime[i]); //CP format(str,sizeof(str),"CP: %i/%i",CpCount[i],MaxCp); PlayerTextDrawSetString(i,RaceCP[i],str); PlayerTextDrawShow(i,RaceCP[i]); //Poradie for(new j;j<=100;j++) { if(j==100) { new specstr[50]; if(RacePoradie[i] == 1) { format(specstr,sizeof(specstr),"1:%s(%i)",GetName(i),i); PlayerTextDrawSetString(j,Race[0][j],specstr); PlayerTextDrawShow(j,Race[0][j]); } else if(RacePoradie[i] == 2) { format(specstr,sizeof(specstr),"2:%s(%i)",GetName(i),i); PlayerTextDrawSetString(j,Race[0][j],specstr); PlayerTextDrawShow(j,Race[0][j]); } } if(!IsPlayerConnected(j)) continue; if(!inRace[j]) continue; if(i==j) continue; if(CpCount[i] < CpCount[j]) { RacePoradie[i]++; } else if(CpCount[i] == CpCount[j]) { new Float:disti = GetPlayerDistanceFromPoint(i,CP[CpCount[i]][cX], CP[CpCount[i]][cY], CP[CpCount[i]][cZ]); new Float:distj = GetPlayerDistanceFromPoint(j,CP[CpCount[j]][cX], CP[CpCount[j]][cY], CP[CpCount[j]][cZ]); if(disti < distj) RacePoradie[i]+=1; else continue; } } } return 1; } Opraveny kód + stále to nefunguje, to poradie, ale dik za ten time Edited 26. Květen, 2017 by StreetGuy Link to comment Share on other sites More sharing options...
Dotaz
StreetGuy 1
Popis problému:
Zdravím,
mám taký problém. Robím si race system, a skončil som u poradia.
Robím také klasické poradie, že keď hráči jazdia, aby vedeli kto je pred nimi, poprípade za nimi,
Všetko sa mi doteraz darilo, ale zastavil som sa u toho poradia,
Mám zadefinované pre každého hráča, koľko CP prešiel v RaceCount[playerid]
Neviem spraviť script, ktorý by zoradil hráčov od najviac prejdených CP, a ak by mali 2+ rovnaký CP., zistilo by to poradie podľa vzdialenosti od CP.
Vedeli by ste mi niekto poradiť ako to spraviť, poprípade poslať nejaký príklad ?
Chyby/varování kompilátoru a při běhu:
--
Kód:
Dodatečné poznámky:
--
Link to comment
Share on other sites
7 odpovědí na tuto otázku
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now