[Pomoc] Kada je igrac offline ili online

Započeo gasmon, Februar 25, 2017, 02:20:35 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Skripta koju koristim: San Marino
Detaljan opis problema: Uz malo guglovanja, napravio sam komandu za restartovanje svih firmi na serveru, i leppo radi. Sve firme se prodaju i stave na buy automatski. Problem je taj sto komanda ne setuje igracima firmu na -1 (kada je na -1 igrac nema firmu) vec kad se konektuju na server i kucaju /kupifirmu njima i dalje pise da imaju firmu. Moje pitanje je kako da svakom igracu setujem firmu na -1 kada restartujem sve firme?
Dio skripte: Komanda za restartovanje firme
[pawn]CMD:afirme( playerid, params[] )
{
   if( !AdminDuty[ playerid ] ) return SendErrorMessage( playerid, "Da bi koristili ovu komandu morate biti ASM na duznosti" );
    if( !IsPlayerAdmin( playerid ) ) return SendErrorMessage( playerid, "Moras biti rcon admin." );
      
   for(new i = 0; i < MAX_BUSSINES; i++)
    {
      if(BussinesInfo[ bOwned ] == 1){
      BussinesInfo[ bOwned ] = 0;
       strmid( BussinesInfo[ i ][ bOwner], "Drzava", 0, strlen( "Drzava" ), 32);
       SaveBussines(i);
      Bussines_Refresh( i );
       BussinesInfo[ bNeaktivnost ] = 0;
      }
    }
   SendClientMessage(playerid, COLOR_DARKRED, "[Global Restart] Sve firme su uspesno prodate!");
    return 1;
}[/pawn]
Neke slike/video za lakse dobivanje pomoci(neobavezno): /

Napravis proveru ovako u onplayerconnect pre global restarta ili napravis nesto kao ovo
for(new i; bOwned:i < bOwned; i++)
    {
        gPlayerInfo[playerid][bOwned:i] = -1;
    }
Poslednja Izmena: Februar 25, 2017, 12:21:09 POSLE PODNE od Mr.Laky

Ne brate gledaj sta meni treba, kad kucam /afirme tj komandu za restart,
da prodje loop kroz sve firme i proda ih, ali i da prodje loop kroz sve igrace iz ini fajlova i setuje im Firmu na id -1
sto bi znacilo da nemaju firmu

Pokusacu da ti objasnim sta si ti tu uradio nadam se da ces sam razumeti i naci resenje.

Ti si napravio komandu /afirme u toj komandi imas 2 provere da li je igrac na ASM duznosti i da li je rcon admin, to je uradu. Sada sta dalje ako prodje te dve provere, dakle imas 2 loopa, prvi loop je

[pawn]for(new p = 0; p < MAX_PLAYERS; p++)[/pawn]

Sada u varijabli p imamo neki ID igraca naravno to se ponovi onoliko puta koliko je definisano pod MAX_PLAYERS. Dakle tu imamo neki ID igraca, idemo dalje. Imamo drugi loop to je za firme to je ovo

[pawn]for(new f = 0; f < MAX_BUSSINES; f++)[/pawn]

Dakle sada u varijabli p imamo neki ID igraca i u varjabli f imamo neki ID firme. Sada imas proveru

[pawn]if (BussinesInfo[f][bOwned] == 1)[/pawn]

Dakle proverio si da li firma ima vlasnika ok ako ima idemo dalje. Sada u tu varijablu ubacujes broj 0

[pawn]BussinesInfo[f][bOwned] = 0;[/pawn]

Takodje u varijablu PlayerInfo[ neki id igraca][ xFirmaID ] ubacujes -1 to je uradu znaci nema firmu.

Sada sta si dalje uradio u varijablu u koju si stavio broj 0 gore iznad upisujes text "Drzava", sada iz kog razloga si gore ubacio gore 0 ako si tu ubacio text "Drzava" i da li ti je to uopste string varijabla. Sledece sto si uradio jeste da si u isto varijablu upisao ime igraca ali nisi ubacio ID FIRME nego ID IGRACA, dakle da li si razumeo sta si ti zapravo uradio u ovoj komandi ?

Au.. hvala ti puno na objasnjenju. Naravno, sad sam razumeo,
ali na zalost sad nemam ideju kako da napravim ono sto mi treba, mozes li da mi pomognes?
Reci koji ti deo koda treba, tacnije komanda i poslacu ti.
Ako nemas vremena, molio bih te barem da mi ovako isto objasnis kako da napravim tu komandu jer se nadam da cu isto da shvatim.

Moras da mu udjes u fajl i da mu postavis Firmu na 0, pogledaj kako funkcionise funkcija SavePlayer isto tako udjes u fajl ubacis samo Firmu igraca -1.

Koristi

Za otvaranje igracevog fajla.
[pawn]new INI:File = INI_Open( ime fajla );[/pawn]

Za upisivanje da igrac nema firmu, pod navodnike stavi kako je upisano u fajlu id firme koju igrac poseduje
[pawn]INI_WriteInt( File, "Firma ili kako vec je upisano", -1 );[/pawn]

Za izlaz iz fajla.
[pawn]INI_Close( File );[/pawn]

Ako nestno nije jasno reci.
Poslednja Izmena: Februar 25, 2017, 19:48:41 POSLE PODNE od #Rakic

Citat: #Rakic poslato Februar 25, 2017, 19:46:51 POSLE PODNE
Moras da mu udjes u fajl i da mu postavis Firmu na 0, pogledaj kako funkcionise funkcija SavePlayer isto tako udjes u fajl ubacis samo Firmu igraca -1.

Koristi

Za otvaranje igracevog fajla.
[pawn]new INI:File = INI_Open( ime fajla );[/pawn]

Za upisivanje da igrac nema firmu, pod navodnike stavi kako je upisano u fajlu id firme koju igrac poseduje
[pawn]INI_WriteInt( File, "Firma ili kako vec je upisano", -1 );[/pawn]

Za izlaz iz fajla.
[pawn]INI_Close( File );[/pawn]

Ako nestno nije jasno reci.

Kako mislis da on loop-a kroz sve fajlove kada su to fajlovi tima Ime_Prezime.ini i svaki se razlikuje.
Ovo ti se mnogo lakse moze sa Notepad++

Citat: ☢ χÏ...ηdÑ"я_ ☢ poslato Februar 25, 2017, 20:05:31 POSLE PODNE
Citat: #Rakic poslato Februar 25, 2017, 19:46:51 POSLE PODNE
Moras da mu udjes u fajl i da mu postavis Firmu na 0, pogledaj kako funkcionise funkcija SavePlayer isto tako udjes u fajl ubacis samo Firmu igraca -1.

Koristi

Za otvaranje igracevog fajla.
[pawn]new INI:File = INI_Open( ime fajla );[/pawn]

Za upisivanje da igrac nema firmu, pod navodnike stavi kako je upisano u fajlu id firme koju igrac poseduje
[pawn]INI_WriteInt( File, "Firma ili kako vec je upisano", -1 );[/pawn]

Za izlaz iz fajla.
[pawn]INI_Close( File );[/pawn]

Ako nestno nije jasno reci.

Kako mislis da on loop-a kroz sve fajlove kada su to fajlovi tima Ime_Prezime.ini i svaki se razlikuje.
Ovo ti se mnogo lakse moze sa Notepad++
Znaci moguce je? Kako?  :-X

Nisam neki profesionalac sto se tice regexa.
Ali mislim da bi ovako moglo da radi:
1. Otvoris u Notepad++ npr 500 korisnika
2. Ides Search>Replace (ctrl+h)
3. Moras imati ukljucen Regular Expression
4.
Find what: firma = [0-9]+
Replace with: firma = -1 (ili koji ti je vec default id firme)

5. Kliknes Replace All in All Opened Documents
6. Flie>Save All (ctrl+shift+s)
7. File>Close All

To ti je to :D

edit1:
Takodje ako imas nesto kod firme gdje cuva ownerovo ime mozes to iskoristiti


CMD:afirme( playerid, params[] )
{
if( !AdminDuty[ playerid ] ) return SendErrorMessage( playerid, "Da bi koristili ovu komandu morate biti ASM na duznosti" );
    if( !IsPlayerAdmin( playerid ) ) return SendErrorMessage( playerid, "Moras biti rcon admin." );

new fileString[100];
for(new i = 0; i < MAX_BUSSINES; i++)
    {
if(BussinesInfo[i][ bOwned ] == 1) {
format(fileString, sizeof fileString, "Users/%s.ini", BussinesInfo[ i ][ bOwner]);
if (fexist(fileString)) {
new INI:File = INI_Open(BussinesInfo[ i ][ bOwner]);
INI_WriteInt(File, "firma", -1);
INI_Close(File);
}

BussinesInfo[i][ bOwned ] = 0;
strmid( BussinesInfo[ i ][ bOwner], "Drzava", 0, strlen( "Drzava" ), 32);
SaveBussines(i);
Bussines_Refresh( i );
BussinesInfo[i][ bNeaktivnost ] = 0;
}
    }
SendClientMessage(playerid, COLOR_DARKRED, "[Global Restart] Sve firme su uspesno prodate!");
    return 1;
}
Poslednja Izmena: Februar 25, 2017, 22:30:23 POSLE PODNE od ☢ χυηdєя_ ☢

Dao si mi dobru ideju, ali ovo nista ne radi igracima.
Evo sta meni treba:
- Komanda proveri koliko ima korisnika u Users/%s.ini
- Otvori ini fajl od svakog korisnika
- Nadje red gde pise FirmaID =
- Napise broj -1 iza jednako, znaci FirmaID = -1
- Sacuva ini fajl

Pokusao sam ovo sto si mi napisao, i nesto svoje ali nista ne pomaze.
Da li imas ideju kako bi to mogao da napravim?

Nemoguce je loopovati kroz nesto za sta nemas osnov kao npr broj
tipa
%d.ini (to je veoma lako jednostavno promjenljiva 'i' ce ti oznacavati broj a proci ces kroz svaki sa for/while petljom)
Za slova to ne ide tako.
Takodje moja velika greska je sto sam napisao
new INI:File = INI_Open(BussinesInfo[ i ][ bOwner]);
a treba
new INI:File = INI_Open(fileString);

To bi trebalo savrseno da radi ako bOwner cuva kao Ime_Prezime igraca

Resio sam problem na malo drugaciji nacin.
Udjem na server, kucam /afirm i prodam sve firme tj stavim ih na buy.
Igraci koji su na serveru setujem im odma firmu na -1
A igrac koji kasnije udje na server, funkcija mu proveri u Ime_Prezime.ini da li ima firmu,
ako ima, onda istu tu firmu u Firma_ID.ini proveri da li se nalazi ime komentovanog igraca,
ako se nalazi onda returna ako se ne nalazi setuje igracu -1 kao firmu i igrac vise nije vlasnik nijedne firme.