Započeo Nadroj
•28. Sep. 2013.• Zaključano[POMOC]Save last position
426
pregleda
5
postova
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
660
Postovi:
110
Teme:
Pridružio se:Nov. 2012
28. Sep. 2013.
skripta: moja
opis problema:
naravio sam kad se diskonektuje sta da uradi i kad se konektuje ali tamo kad treba load files tu nzm sta da stavim
evo vam disconect da bi znali malo bolje o cemu se radi
opis problema:
naravio sam kad se diskonektuje sta da uradi i kad se konektuje ali tamo kad treba load files tu nzm sta da stavim
evo vam disconect da bi znali malo bolje o cemu se radi
public OnPlayerDisconnect(playerid, reason)
{
new
Float:x,
Float:y,
Float:z;
GetPlayerPos(playerid, x, y, z);
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
INI_WriteInt(File,"Admin",PlayerInfo);
INI_WriteInt(File,"Kills",PlayerInfo);
INI_WriteInt(File,"Deaths",PlayerInfo);
INI_WriteFloat(File,"X", x);
INI_WriteFloat(File,"Y", y);
INI_WriteFloat(File,"Z", z);
INI_Close(File);
return 1;
}Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
505
Postovi:
82
Teme:
Pridružio se:Sep. 2013
28. Sep. 2013.
Evo nekako sam preveo:
uvođenje
Vidio sam mnogo ljudi ima problema sa Å¡tednje , utovar i postavljanju igraÄa poziciju . Ovaj tutorial će vas nauÄiti kako možete uÅ¡tedjeti igraÄ poziciju u ini datoteci , uÄitavanje i postavljanje kad je ikra ( povratak na posljednju poziciju na kojoj ste bili kad ste odspojili ) .
Å to vam je potrebno
y_ini -najbrži i najuÄinkovitiji naÄin za pisanje / Äitanje iz datoteke koje Y_Less
Preuzimanje
Preuzimanje YSI poslužitelja ukljuÄuje .
Kopirajte / Izrežite " YSI " mapu na svoj ​​" .. pawno \ ukljuÄuju " katalog .
pokretanje
Da su y_ini na vrhu naše skripte .
pijun Code :
# ukljuÄiti
# UkljuÄiti pojedine smjernice Umeće sadržaj odreÄ‘ene datoteke u trenutnoj poziciji u trenutnoj datoteci . ViÅ¡e smjernice mogu se naći ovdje . U naÅ¡em sluÄaju ona će se uÄitati sve kodove na " .. pawno \ \ ukljuÄuju YSI \ y_ini.inc " u scenarij , a to je ono Å¡to nam treba kako bismo mogli uÄitati y_ini znaÄajke .
Idemo proglasi neke varijable negdje na vrhu naše skripte :
pijun Code :
novi
Float : PosX [ MAX_PLAYERS ] ,
Float : cvijet [ MAX_PLAYERS ] ,
Float : PosZ [ MAX_PLAYERS ] ,
Float : Kut [ MAX_PLAYERS ] ,
Interijer [ MAX_PLAYERS ] ,
VirtualWorld [ MAX_PLAYERS ]
;
" Novi" kljuÄna rijeÄ novu varijablu . Mi smo koristili unaprijed tag ime pod nazivom " Float ", koji će omogućiti pomiÄnim zarezom podrÅ¡ku za naÅ¡e varijabli . Mi proglasio Å¡est polja . Niz jepromjenjiva u kojem možete pohraniti viÅ¡e komada podataka odjednom i pristupiti im dinamiÄno . Svaka varijabla ima niz stanica ( MAX_PLAYERS ) . Prvi će se održatiX koordinata igraÄa položaju ,drugi će se održatiY koordinata pozicije igraÄa ,treći će držite Z koordinate igraÄa položaju ,Äetvrti će se održati Angle koordinate igraÄa ,peti će se održati interijera ID igraÄa , aposljednja će se održati u virtualni svijet ID igraÄa . Idemo napraviti jednostavni dionica funkciju koja će vratiti direktorij gdjeigraÄ file ( koji će sadržavati koordinate položaja ) bit će spaÅ¡en .
pijun Code :
dioniÄko user_ini_file ( playerid )
{
novi
string [ 128 ] ,
korisniÄko_ime [ MAX_PLAYER_NAME ]
;
GetPlayerName ( playerid , korisniÄko_ime , MAX_PLAYER_NAME ) ;
format ( string , sizeof ( string ) , " % s.ini " , korisniÄko_ime ) ;
/ * Scriptfiles katalog * /
povratak
string ;
}
DioniÄko funkcija jefunkcija kojapijun parser mora ukljuÄiti u program kada se koristi i da to jednostavno može " maknuti " iz programa ( bez upozorenja ) , kada se ne koristi . Da proglasiti dionica funkciju , prefiks funkcijsku ime s kljuÄnom rijeÄi skladiÅ¡tu . Javne funkcije i autohtoni funkcije ne može biti proglaÅ¡en ' stock' .
Mi izjavljujemo niz zove string 128 stanica velike i joÅ¡ jednom zove korisniÄko_ime MAX_PLAYER_NAME stanice velika ( Å¡to znaÄi 24 ( maksimalno ime igraÄa dužina u SA : MP ) ) . Mi smo dobili playerid ime GetPlayerName koristeći funkciju i pohraniti imena igraÄa u varijablu korisniÄko_ime , možemo oblikovati put i pohraniti ga u varijablu string , na kraju smo se vratili uzicu . Budući dase put spominje kao " % s.ini " ,korisnik će datoteka biti spremljena u " .. scriptfiles " direktorij .
Idemo napraviti jednostavni javnu funkciju za uÄitavanje korisniÄkih podataka iz spisa :
pijun Code :
prema naprijed @ load_user_position ( playerid , ime [ ] , value [ ] ) ;
@ load_user_position ( playerid , ime [ ] , value [ ] )
{
INI_Float ( " PositionX " , PosX [ playerid ] ) ;
INI_Float ( " PositionY " , cvijet [ playerid ] ) ;
INI_Float ( " PositionZ " , PosZ [ playerid ] ) ;
INI_Float ( " Angle " , Kut [ playerid ] ) ;
INI_Int ( " unutarnjih " , Interijer [ playerid ] ) ;
INI_Int ( " VirtualWorld " , VirtualWorld [ playerid ] ) ;
povratak ( 1 ) ;
}
Javne funkcije mogu biti prefiksom strane ili javna @ ,@ znakova , kada se koristi , postaje dio naziva funkcije . INI_Float sprema proÅ¡ao vrijednost kao float ako je ime utakmice , INI_Int -podaci proslijeÄ‘eni na utovar povratni kao string , to će ga pretvoriti u cijeli broj . Mi ćemo spasiti igraÄ položaj , interijer i virtualnom svijetu kada je rastaviti pa neka je pomaknite prema dolje do OnPlayerDisconnect por .
pijun Code :
javni OnPlayerDisconnect ( playerid , razlog )
{
GetPlayerPos ( playerid , PosX [ playerid ] , cvijet [ playerid ] , PosZ [ playerid ] ) ;
GetPlayerFacingAngle ( playerid , Kut [ playerid ] ) ;
Novi INI : File = INI_Open ( user_ini_file ( playerid ) ) ;
INI_SetTag ( datoteka , " pozicija" ) ;
INI_WriteFloat ( datoteka , " PositionX " , PosX [ playerid ] ) ;
INI_WriteFloat ( datoteka , " PositionY " , cvijet [ playerid ] ) ;
INI_WriteFloat ( datoteka , " PositionZ " , PosZ [ playerid ] ) ;
INI_WriteFloat ( datoteka , " Angle " , Kut [ playerid ] ) ;
INI_WriteInt ( datoteka , " unutarnjih " , GetPlayerInterior ( playerid ) ) ;
INI_WriteInt ( datoteka , " VirtualWorld " , GetPlayerVirtualWorld ( playerid ) ) ;
INI_Close ( File ) ;
povratak ( 1 ) ;
}
OnPlayerDisconnect povratni poziv se zove kadigraÄ prekida od poslužitelja , playerid jeid od igraÄa koji su napustili , a razlog id od razloga zaÅ¡to su napustili .
Mi koristimo GetPlayerPos funkciju dobiti trenutnu poziciju igraÄa i spremite u varijabli " PosX , buket cvijeća i PosZ " . Mi koristimo GetPlayerFacingAngle funkciju dobiti kut smjeruigraÄ okrenut i pohraniti ga u varijablu " Angle " . Otvaramo / stvoriti korisniÄko datoteku koristeći INI_Open i naÅ¡e dionice kao parametar . PiÅ¡emo na korisniÄkom " PositionX " odjeljakvrijednost pohranjena u varijablu PosX , piÅ¡emo na korisnika " PositionY " odjeljak vrijednost spremljenu u varijablu cvijet , na " PositionZ " odjeljakvrijednost pohranjena u varijablu " i " PosZ na "Angle " odjeljakvrijednost pohranjena u varijablu kuta , na " unutarnjih " odjeljakvrijednosti vraćene od strane GetPlayerInterior funkcije , na " VirtualWorld " diovrijednosti koju vraća GetPlayerVirtualWorld funkciji . Nakon Å¡to su vrijednosti je pisani smo zatvorili korisniÄki datoteku koristeći INI_Close , možemo vratiti pravu vrijednost . Moramo uÄitati korisniÄki poziciju iz spisa kad spaja pa neka je pomicanje na OnPlayerConnect por .
pijun Code :
javni OnPlayerConnect ( playerid )
{
PosX [ playerid ] = 0;
Cvijet [ playerid ] = 0;
PosZ [ playerid ] = 0;
Kut [ playerid ] = 0 ;
Interijer [ playerid ] = 0 ;
VirtualWorld [ playerid ] = 0;
INI_ParseFile ( user_ini_file ( playerid ) , " load_user_ % s " , bextra = istina , pomoćni = playerid . . ) ;
povratak ( 1 ) ;
}
OnPlayerConnect povratni poziv se zove kadigraÄ spoji na server , playerid jeID od igraÄa koji je spajao . Mi resetiranje ureÄ‘aja varijable prvi , e koristiti INI_ParseFile da izdvoji svoje ini datoteku ( uÄitavanje svoje podatke ) , kad se mrijesti trebamo postaviti svoj ​​položaj , interijer i virtualni svijet pa neka je pomaknite prema dolje do OnPlayerSpawn povratni poziv .
pijun Code :
javni OnPlayerSpawn ( playerid )
{
if ( PosX [ playerid ] ! = 0 && cvijet [ playerid ] ! = 0 && PosZ [ playerid ] ! = 0 && Kut [ playerid ] ! = 0 )
{
SetPlayerPos ( playerid , PosX [ playerid ] , cvijet [ playerid ] , PosZ [ playerid ] ) ;
SetPlayerFacingAngle ( playerid , Kut [ playerid ] ) ;
SetPlayerInterior ( playerid , Interijer [ playerid ] ) ;
SetPlayerVirtualWorld ( playerid , VirtualWorld [ playerid ] ) ;
SendClientMessage ( playerid , -1 , " Dobrodošli na zadnjem mjestu " ) ;
}
povratak ( 1 ) ;
}
OnPlayerSpawn povratni poziv se zove kadigraÄ mrijesti , playerid jeID od igraÄa koji izrodile .
Kada jeprvi igraÄ spoji na server , njegov PosX , buket cvijeća , PosZ i kut varijable će biti 0 . Operator " ! = " ZnaÄi " nije jednako lijeva na desno " . Mi smo provjerili naÅ¡e varijable nije jednaka 0 , ako je tako možemo postaviti igraÄ položaj koristeći SetPlayerPos funkciju , postavili smo svoj ​​kut pomoću SetPlayerFacingAngle funkciju , postavili smo svoju unutraÅ¡njost koristeći SetPlayerInterior funkciju , postavili smo svoj ​​virtualni svijet koristeći SetPlayerVirtualWorld funkciju , a mi ga poslati jednostavna poruka pomoću SendClientMessage funkciju .
To je sve , tvoj scenarij bi trebao izgledati ovako :
pijun Code :
# ukljuÄiti
# ukljuÄiti
novi
Float : PosX [ MAX_PLAYERS ] ,
Float : cvijet [ MAX_PLAYERS ] ,
Float : PosZ [ MAX_PLAYERS ] ,
Float : Kut [ MAX_PLAYERS ] ,
Interijer [ MAX_PLAYERS ] ,
VirtualWorld [ MAX_PLAYERS ]
;
dioniÄko user_ini_file ( playerid )
{
novi
string [ 128 ] ,
korisniÄko_ime [ MAX_PLAYER_NAME ]
;
GetPlayerName ( playerid , korisniÄko_ime , MAX_PLAYER_NAME ) ;
format ( string , sizeof ( string ) , " % s.ini " , korisniÄko_ime ) ;
/ * Scriptfiles katalog * /
povratak
string ;
}
prema naprijed @ load_user_position ( playerid , ime [ ] , value [ ] ) ;
@ load_user_position ( playerid , ime [ ] , value [ ] )
{
INI_Float ( " PositionX " , PosX [ playerid ] ) ;
INI_Float ( " PositionY " , cvijet [ playerid ] ) ;
INI_Float ( " PositionZ " , PosZ [ playerid ] ) ;
INI_Float ( " Angle " , Kut [ playerid ] ) ;
INI_Int ( " unutarnjih " , Interijer [ playerid ] ) ;
INI_Int ( " VirtualWorld " , VirtualWorld [ playerid ] ) ;
povratak ( 1 ) ;
}
javni OnPlayerDisconnect ( playerid , razlog )
{
GetPlayerPos ( playerid , PosX [ playerid ] , cvijet [ playerid ] , PosZ [ playerid ] ) ;
GetPlayerFacingAngle ( playerid , Kut [ playerid ] ) ;
Novi INI : File = INI_Open ( user_ini_file ( playerid ) ) ;
INI_SetTag ( datoteka , " pozicija" ) ;
INI_WriteFloat ( datoteka , " PositionX " , PosX [ playerid ] ) ;
INI_WriteFloat ( datoteka , " PositionY " , cvijet [ playerid ] ) ;
INI_WriteFloat ( datoteka , " PositionZ " , PosZ [ playerid ] ) ;
INI_WriteFloat ( datoteka , " Angle " , Kut [ playerid ] ) ;
INI_WriteInt ( datoteka , " unutarnjih " , GetPlayerInterior ( playerid ) ) ;
INI_WriteInt ( datoteka , " VirtualWorld " , GetPlayerVirtualWorld ( playerid ) ) ;
INI_Close ( File ) ;
povratak ( 1 ) ;
}
javni OnPlayerConnect ( playerid )
{
PosX [ playerid ] = 0;
Cvijet [ playerid ] = 0;
PosZ [ playerid ] = 0;
Kut [ playerid ] = 0 ;
Interijer [ playerid ] = 0 ;
VirtualWorld [ playerid ] = 0;
INI_ParseFile ( user_ini_file ( playerid ) , " load_user_ % s " , bextra = istina , pomoćni = playerid . . ) ;
povratak ( 1 ) ;
}
javni OnPlayerSpawn ( playerid )
{
if ( PosX [ playerid ] ! = 0 && cvijet [ playerid ] ! = 0 && PosZ [ playerid ] ! = 0 )
{
SetPlayerPos ( playerid , PosX [ playerid ] , cvijet [ playerid ] , PosZ [ playerid ] ) ;
SetPlayerFacingAngle ( playerid , Kut [ playerid ] ) ;
SetPlayerInterior ( playerid , Interijer [ playerid ] ) ;
SetPlayerVirtualWorld ( playerid , VirtualWorld [ playerid ] ) ;
SendClientMessage ( playerid , -1 , " Dobrodošli na zadnjem mjestu " ) ;
}
povratak ( 1 ) ;
}
File ini korisnik će izgledati ovako :
Å ifra :
[ Položaj ]
PositionX = 171.252197
PositionY = -72,037948
PositionZ = 2.210306
Angle = 150.401428
Interijer = 3
VirtualWorld = 0
uvođenje
Vidio sam mnogo ljudi ima problema sa Å¡tednje , utovar i postavljanju igraÄa poziciju . Ovaj tutorial će vas nauÄiti kako možete uÅ¡tedjeti igraÄ poziciju u ini datoteci , uÄitavanje i postavljanje kad je ikra ( povratak na posljednju poziciju na kojoj ste bili kad ste odspojili ) .
Å to vam je potrebno
y_ini -najbrži i najuÄinkovitiji naÄin za pisanje / Äitanje iz datoteke koje Y_Less
Preuzimanje
Preuzimanje YSI poslužitelja ukljuÄuje .
Kopirajte / Izrežite " YSI " mapu na svoj ​​" .. pawno \ ukljuÄuju " katalog .
pokretanje
Da su y_ini na vrhu naše skripte .
pijun Code :
# ukljuÄiti
# UkljuÄiti pojedine smjernice Umeće sadržaj odreÄ‘ene datoteke u trenutnoj poziciji u trenutnoj datoteci . ViÅ¡e smjernice mogu se naći ovdje . U naÅ¡em sluÄaju ona će se uÄitati sve kodove na " .. pawno \ \ ukljuÄuju YSI \ y_ini.inc " u scenarij , a to je ono Å¡to nam treba kako bismo mogli uÄitati y_ini znaÄajke .
Idemo proglasi neke varijable negdje na vrhu naše skripte :
pijun Code :
novi
Float : PosX [ MAX_PLAYERS ] ,
Float : cvijet [ MAX_PLAYERS ] ,
Float : PosZ [ MAX_PLAYERS ] ,
Float : Kut [ MAX_PLAYERS ] ,
Interijer [ MAX_PLAYERS ] ,
VirtualWorld [ MAX_PLAYERS ]
;
" Novi" kljuÄna rijeÄ novu varijablu . Mi smo koristili unaprijed tag ime pod nazivom " Float ", koji će omogućiti pomiÄnim zarezom podrÅ¡ku za naÅ¡e varijabli . Mi proglasio Å¡est polja . Niz jepromjenjiva u kojem možete pohraniti viÅ¡e komada podataka odjednom i pristupiti im dinamiÄno . Svaka varijabla ima niz stanica ( MAX_PLAYERS ) . Prvi će se održatiX koordinata igraÄa položaju ,drugi će se održatiY koordinata pozicije igraÄa ,treći će držite Z koordinate igraÄa položaju ,Äetvrti će se održati Angle koordinate igraÄa ,peti će se održati interijera ID igraÄa , aposljednja će se održati u virtualni svijet ID igraÄa . Idemo napraviti jednostavni dionica funkciju koja će vratiti direktorij gdjeigraÄ file ( koji će sadržavati koordinate položaja ) bit će spaÅ¡en .
pijun Code :
dioniÄko user_ini_file ( playerid )
{
novi
string [ 128 ] ,
korisniÄko_ime [ MAX_PLAYER_NAME ]
;
GetPlayerName ( playerid , korisniÄko_ime , MAX_PLAYER_NAME ) ;
format ( string , sizeof ( string ) , " % s.ini " , korisniÄko_ime ) ;
/ * Scriptfiles katalog * /
povratak
string ;
}
DioniÄko funkcija jefunkcija kojapijun parser mora ukljuÄiti u program kada se koristi i da to jednostavno može " maknuti " iz programa ( bez upozorenja ) , kada se ne koristi . Da proglasiti dionica funkciju , prefiks funkcijsku ime s kljuÄnom rijeÄi skladiÅ¡tu . Javne funkcije i autohtoni funkcije ne može biti proglaÅ¡en ' stock' .
Mi izjavljujemo niz zove string 128 stanica velike i joÅ¡ jednom zove korisniÄko_ime MAX_PLAYER_NAME stanice velika ( Å¡to znaÄi 24 ( maksimalno ime igraÄa dužina u SA : MP ) ) . Mi smo dobili playerid ime GetPlayerName koristeći funkciju i pohraniti imena igraÄa u varijablu korisniÄko_ime , možemo oblikovati put i pohraniti ga u varijablu string , na kraju smo se vratili uzicu . Budući dase put spominje kao " % s.ini " ,korisnik će datoteka biti spremljena u " .. scriptfiles " direktorij .
Idemo napraviti jednostavni javnu funkciju za uÄitavanje korisniÄkih podataka iz spisa :
pijun Code :
prema naprijed @ load_user_position ( playerid , ime [ ] , value [ ] ) ;
@ load_user_position ( playerid , ime [ ] , value [ ] )
{
INI_Float ( " PositionX " , PosX [ playerid ] ) ;
INI_Float ( " PositionY " , cvijet [ playerid ] ) ;
INI_Float ( " PositionZ " , PosZ [ playerid ] ) ;
INI_Float ( " Angle " , Kut [ playerid ] ) ;
INI_Int ( " unutarnjih " , Interijer [ playerid ] ) ;
INI_Int ( " VirtualWorld " , VirtualWorld [ playerid ] ) ;
povratak ( 1 ) ;
}
Javne funkcije mogu biti prefiksom strane ili javna @ ,@ znakova , kada se koristi , postaje dio naziva funkcije . INI_Float sprema proÅ¡ao vrijednost kao float ako je ime utakmice , INI_Int -podaci proslijeÄ‘eni na utovar povratni kao string , to će ga pretvoriti u cijeli broj . Mi ćemo spasiti igraÄ položaj , interijer i virtualnom svijetu kada je rastaviti pa neka je pomaknite prema dolje do OnPlayerDisconnect por .
pijun Code :
javni OnPlayerDisconnect ( playerid , razlog )
{
GetPlayerPos ( playerid , PosX [ playerid ] , cvijet [ playerid ] , PosZ [ playerid ] ) ;
GetPlayerFacingAngle ( playerid , Kut [ playerid ] ) ;
Novi INI : File = INI_Open ( user_ini_file ( playerid ) ) ;
INI_SetTag ( datoteka , " pozicija" ) ;
INI_WriteFloat ( datoteka , " PositionX " , PosX [ playerid ] ) ;
INI_WriteFloat ( datoteka , " PositionY " , cvijet [ playerid ] ) ;
INI_WriteFloat ( datoteka , " PositionZ " , PosZ [ playerid ] ) ;
INI_WriteFloat ( datoteka , " Angle " , Kut [ playerid ] ) ;
INI_WriteInt ( datoteka , " unutarnjih " , GetPlayerInterior ( playerid ) ) ;
INI_WriteInt ( datoteka , " VirtualWorld " , GetPlayerVirtualWorld ( playerid ) ) ;
INI_Close ( File ) ;
povratak ( 1 ) ;
}
OnPlayerDisconnect povratni poziv se zove kadigraÄ prekida od poslužitelja , playerid jeid od igraÄa koji su napustili , a razlog id od razloga zaÅ¡to su napustili .
Mi koristimo GetPlayerPos funkciju dobiti trenutnu poziciju igraÄa i spremite u varijabli " PosX , buket cvijeća i PosZ " . Mi koristimo GetPlayerFacingAngle funkciju dobiti kut smjeruigraÄ okrenut i pohraniti ga u varijablu " Angle " . Otvaramo / stvoriti korisniÄko datoteku koristeći INI_Open i naÅ¡e dionice kao parametar . PiÅ¡emo na korisniÄkom " PositionX " odjeljakvrijednost pohranjena u varijablu PosX , piÅ¡emo na korisnika " PositionY " odjeljak vrijednost spremljenu u varijablu cvijet , na " PositionZ " odjeljakvrijednost pohranjena u varijablu " i " PosZ na "Angle " odjeljakvrijednost pohranjena u varijablu kuta , na " unutarnjih " odjeljakvrijednosti vraćene od strane GetPlayerInterior funkcije , na " VirtualWorld " diovrijednosti koju vraća GetPlayerVirtualWorld funkciji . Nakon Å¡to su vrijednosti je pisani smo zatvorili korisniÄki datoteku koristeći INI_Close , možemo vratiti pravu vrijednost . Moramo uÄitati korisniÄki poziciju iz spisa kad spaja pa neka je pomicanje na OnPlayerConnect por .
pijun Code :
javni OnPlayerConnect ( playerid )
{
PosX [ playerid ] = 0;
Cvijet [ playerid ] = 0;
PosZ [ playerid ] = 0;
Kut [ playerid ] = 0 ;
Interijer [ playerid ] = 0 ;
VirtualWorld [ playerid ] = 0;
INI_ParseFile ( user_ini_file ( playerid ) , " load_user_ % s " , bextra = istina , pomoćni = playerid . . ) ;
povratak ( 1 ) ;
}
OnPlayerConnect povratni poziv se zove kadigraÄ spoji na server , playerid jeID od igraÄa koji je spajao . Mi resetiranje ureÄ‘aja varijable prvi , e koristiti INI_ParseFile da izdvoji svoje ini datoteku ( uÄitavanje svoje podatke ) , kad se mrijesti trebamo postaviti svoj ​​položaj , interijer i virtualni svijet pa neka je pomaknite prema dolje do OnPlayerSpawn povratni poziv .
pijun Code :
javni OnPlayerSpawn ( playerid )
{
if ( PosX [ playerid ] ! = 0 && cvijet [ playerid ] ! = 0 && PosZ [ playerid ] ! = 0 && Kut [ playerid ] ! = 0 )
{
SetPlayerPos ( playerid , PosX [ playerid ] , cvijet [ playerid ] , PosZ [ playerid ] ) ;
SetPlayerFacingAngle ( playerid , Kut [ playerid ] ) ;
SetPlayerInterior ( playerid , Interijer [ playerid ] ) ;
SetPlayerVirtualWorld ( playerid , VirtualWorld [ playerid ] ) ;
SendClientMessage ( playerid , -1 , " Dobrodošli na zadnjem mjestu " ) ;
}
povratak ( 1 ) ;
}
OnPlayerSpawn povratni poziv se zove kadigraÄ mrijesti , playerid jeID od igraÄa koji izrodile .
Kada jeprvi igraÄ spoji na server , njegov PosX , buket cvijeća , PosZ i kut varijable će biti 0 . Operator " ! = " ZnaÄi " nije jednako lijeva na desno " . Mi smo provjerili naÅ¡e varijable nije jednaka 0 , ako je tako možemo postaviti igraÄ položaj koristeći SetPlayerPos funkciju , postavili smo svoj ​​kut pomoću SetPlayerFacingAngle funkciju , postavili smo svoju unutraÅ¡njost koristeći SetPlayerInterior funkciju , postavili smo svoj ​​virtualni svijet koristeći SetPlayerVirtualWorld funkciju , a mi ga poslati jednostavna poruka pomoću SendClientMessage funkciju .
To je sve , tvoj scenarij bi trebao izgledati ovako :
pijun Code :
# ukljuÄiti
# ukljuÄiti
novi
Float : PosX [ MAX_PLAYERS ] ,
Float : cvijet [ MAX_PLAYERS ] ,
Float : PosZ [ MAX_PLAYERS ] ,
Float : Kut [ MAX_PLAYERS ] ,
Interijer [ MAX_PLAYERS ] ,
VirtualWorld [ MAX_PLAYERS ]
;
dioniÄko user_ini_file ( playerid )
{
novi
string [ 128 ] ,
korisniÄko_ime [ MAX_PLAYER_NAME ]
;
GetPlayerName ( playerid , korisniÄko_ime , MAX_PLAYER_NAME ) ;
format ( string , sizeof ( string ) , " % s.ini " , korisniÄko_ime ) ;
/ * Scriptfiles katalog * /
povratak
string ;
}
prema naprijed @ load_user_position ( playerid , ime [ ] , value [ ] ) ;
@ load_user_position ( playerid , ime [ ] , value [ ] )
{
INI_Float ( " PositionX " , PosX [ playerid ] ) ;
INI_Float ( " PositionY " , cvijet [ playerid ] ) ;
INI_Float ( " PositionZ " , PosZ [ playerid ] ) ;
INI_Float ( " Angle " , Kut [ playerid ] ) ;
INI_Int ( " unutarnjih " , Interijer [ playerid ] ) ;
INI_Int ( " VirtualWorld " , VirtualWorld [ playerid ] ) ;
povratak ( 1 ) ;
}
javni OnPlayerDisconnect ( playerid , razlog )
{
GetPlayerPos ( playerid , PosX [ playerid ] , cvijet [ playerid ] , PosZ [ playerid ] ) ;
GetPlayerFacingAngle ( playerid , Kut [ playerid ] ) ;
Novi INI : File = INI_Open ( user_ini_file ( playerid ) ) ;
INI_SetTag ( datoteka , " pozicija" ) ;
INI_WriteFloat ( datoteka , " PositionX " , PosX [ playerid ] ) ;
INI_WriteFloat ( datoteka , " PositionY " , cvijet [ playerid ] ) ;
INI_WriteFloat ( datoteka , " PositionZ " , PosZ [ playerid ] ) ;
INI_WriteFloat ( datoteka , " Angle " , Kut [ playerid ] ) ;
INI_WriteInt ( datoteka , " unutarnjih " , GetPlayerInterior ( playerid ) ) ;
INI_WriteInt ( datoteka , " VirtualWorld " , GetPlayerVirtualWorld ( playerid ) ) ;
INI_Close ( File ) ;
povratak ( 1 ) ;
}
javni OnPlayerConnect ( playerid )
{
PosX [ playerid ] = 0;
Cvijet [ playerid ] = 0;
PosZ [ playerid ] = 0;
Kut [ playerid ] = 0 ;
Interijer [ playerid ] = 0 ;
VirtualWorld [ playerid ] = 0;
INI_ParseFile ( user_ini_file ( playerid ) , " load_user_ % s " , bextra = istina , pomoćni = playerid . . ) ;
povratak ( 1 ) ;
}
javni OnPlayerSpawn ( playerid )
{
if ( PosX [ playerid ] ! = 0 && cvijet [ playerid ] ! = 0 && PosZ [ playerid ] ! = 0 )
{
SetPlayerPos ( playerid , PosX [ playerid ] , cvijet [ playerid ] , PosZ [ playerid ] ) ;
SetPlayerFacingAngle ( playerid , Kut [ playerid ] ) ;
SetPlayerInterior ( playerid , Interijer [ playerid ] ) ;
SetPlayerVirtualWorld ( playerid , VirtualWorld [ playerid ] ) ;
SendClientMessage ( playerid , -1 , " Dobrodošli na zadnjem mjestu " ) ;
}
povratak ( 1 ) ;
}
File ini korisnik će izgledati ovako :
Å ifra :
[ Položaj ]
PositionX = 171.252197
PositionY = -72,037948
PositionZ = 2.210306
Angle = 150.401428
Interijer = 3
VirtualWorld = 0
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
660
Postovi:
110
Teme:
Pridružio se:Nov. 2012
28. Sep. 2013.
ali ovo je drugacije od onoga sto ja imam.
//Credits to Y_Less, Dracoblue and Kush.
#include
#include
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
#define DIALOG_SUCCESS_1 3
#define DIALOG_SUCCESS_2 4
#define PATH "/Users/%s.ini"
#define COL_WHITE "{FFFFFF}"
#define COL_RED "{F81414}"
#define COL_GREEN "{00FF22}"
#define COL_LIGHTBLUE "{00CED1}"
enum pInfo
{
pPass,
pCash,
pAdmin,
pKills,
pDeaths,
pX,
pY,
pZ
}
new PlayerInfo;
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_Int("Password",PlayerInfo);
INI_Int("Cash",PlayerInfo);
INI_Int("Admin",PlayerInfo);
INI_Int("Kills",PlayerInfo);
INI_Int("Deaths",PlayerInfo);
INI_Float("X",PlayerInfo);
INI_Float("Y",PlayerInfo);
INI_Float("Z",PlayerInfo);
return 1;
}
stock UserPath(playerid)
{
new string,playername;
GetPlayerName(playerid,playername,sizeof(playername));
format(string,sizeof(string),PATH,playername);
return string;
}
/*Credits to Dracoblue*/
stock udb_hash(buf[]) {
new length=strlen(buf);
new s1 = 1;
new s2 = 0;
new n;
for (n=0; n {
s1 = (s1 + buf) % 65521;
s2 = (s2 + s1) % 65521;
}
return (s2 << 16) + s1;
}
main()
{
print("\n----------------------------------");
print(" Blank Gamemode by your name here");
print("----------------------------------\n");
}
public OnGameModeInit()
{
SetGameModeText("Golden Bomb v1.0.0");
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
return 1;
}
public OnPlayerConnect(playerid)
{
if(fexist(UserPath(playerid)))
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"Ukucajte sifru da se ulogujete.","Login","Quit");
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Registrovanje...",""COL_WHITE"Ukucajte sifru da se registrujete.","Register","Quit");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new
Float:x,
Float:y,
Float:z;
GetPlayerPos(playerid, x, y, z);
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
INI_WriteInt(File,"Admin",PlayerInfo);
INI_WriteInt(File,"Kills",PlayerInfo);
INI_WriteInt(File,"Deaths",PlayerInfo);
INI_WriteFloat(File,"X", x);
INI_WriteFloat(File,"Y", y);
INI_WriteFloat(File,"Z", z);
INI_Close(File);
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
PlayerInfo++;
PlayerInfo++;
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
return 1;
}
return 0;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}
public OnRconCommand(cmd[])
{
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
return 1;
}
public OnObjectMoved(objectid)
{
return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
public OnPlayerExitedMenu(playerid)
{
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
public OnPlayerUpdate(playerid)
{
return 1;
}
public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}
public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch( dialogid )
{
case DIALOG_REGISTER:
{
if (!response) return Kick(playerid);
if(response)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE"Registering...",""COL_RED"You have entered an invalid password.\n"COL_WHITE"Type your password below to register a new account.","Register","Quit");
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Password",udb_hash(inputtext));
INI_WriteInt(File,"Cash",0);
INI_WriteInt(File,"Admin",0);
INI_WriteInt(File,"Kills",0);
INI_WriteInt(File,"Deaths",0);
INI_Close(File);
SetSpawnInfo(playerid, 0, 0, 1721.8395, -1629.8204, 20.2139, 269.15, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
ShowPlayerDialog(playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX,""COL_WHITE"Uspesno!",""COL_GREEN"Sledi tutorial!","Ok","");
}
}
case DIALOG_LOGIN:
{
if ( !response ) return Kick ( playerid );
if( response )
{
if(udb_hash(inputtext) == PlayerInfo)
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
GivePlayerMoney(playerid, PlayerInfo);
ShowPlayerDialog(playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX,""COL_WHITE"Uspesno!",""COL_GREEN"Uspesno ste se ulogovali!","Ok","");
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"Pogresna sifra.\n"COL_WHITE"Ukucajte sifru da se ulogujete.","Login","Quit");
}
return 1;
}
}
}
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava