Szerző Téma: Dini utolsó pozi mentése és betöltése  (Megtekintve 985 alkalommal)

BarnyBoy

  • Vendég
Dini utolsó pozi mentése és betöltése
« Dátum: 2015. szeptember 02. - 19:42:31 »
0 Show voters
Sziasztok!
Úgy szeretném megoldani, hogy ha egy játékos kilép, akkor elmentse a helyét, és amikor visszalép oda dobja vissza!

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
Dini utolsó pozi mentése és betöltése
« Válasz #1 Dátum: 2015. szeptember 02. - 23:10:45 »
+1 Show voters
MySQL nem lenne jobb?

BarnyBoy

  • Vendég
Dini utolsó pozi mentése és betöltése
« Válasz #2 Dátum: 2015. szeptember 03. - 18:31:30 »
0 Show voters
Fogalmam sincs, hogy hogyan kell használni. :(
Amúgy miért jobb?

Dini utolsó pozi mentése és betöltése
« Válasz #3 Dátum: 2015. szeptember 03. - 18:52:28 »
+1 Show voters
Egyszer
Kétszer
Ezeknél van újabb verzió is már, a Google a barátod. :)

Dini utolsó pozi mentése és betöltése
« Válasz #4 Dátum: 2015. szeptember 03. - 22:46:55 »
+1 Show voters
Szia!
Gondolom már megvan, de én azért neked megírtam dinibe is ;)
-Létre kell hoznod a scriptfiles nevű mappába egy users mappád más dolgod nincs.
-A lényeg a kódban van:
 

#include <a_samp>
#include <dini>
new egyszer = 1; //Ha az érték 0 akkor minden egyes spawnolásnál oda rakja, ha 1 akkor csak csatlakozás után követő spawnolásnál
new File[128];
new spawn[MAX_PLAYERS];
public OnPlayerDisconnect(playerid)
{
    format(File, sizeof(File), \"users/%s.ini\", pName(playerid));
    if(!dini_Exists(File)) { dini_Create(File); }
new Float:x,Float:y,Float:z, interior;
GetPlayerPos(playerid,x,y,z); interior = GetPlayerInterior(playerid);
dini_IntSet(File,\"sx\",floatround(x));
dini_IntSet(File,\"sy\",floatround(y));
dini_IntSet(File,\"sz\",floatround(z));
dini_IntSet(File,\"sint\",interior);
dini_IntSet(File,\"swld\",GetPlayerVirtualWorld(playerid));
return 1;
}
public OnFilterScriptInit()
{
    for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
    {
        spawn = 0;
    }
return 1;
}
public OnPlayerConnect(playerid)
{
    spawn[playerid]=0;
    return 1;
}
public OnPlayerSpawn(playerid)
{
if(egyszer == 0 || (spawn[playerid] == 0 && egyszer == 1))
{
       format(File, sizeof(File), \"users/%s.ini\", pName(playerid));
if(dini_Int(File,\"sx\") != 0)
{
    SetPlayerPos(playerid,float(dini_Int(File,\"sx\")),float(dini_Int(File,\"sy\")),float(dini_Int(File,\"sz\")));
      SetPlayerInterior(playerid,(dini_Int(File,\"sint\"))); SetPlayerVirtualWorld(playerid, (dini_Int(File,\"swld\")));
}
spawn[playerid]=1;
}
return 1;
}
stock pName(playerid)
{
  new name[MAX_PLAYER_NAME];
  GetPlayerName(playerid, name, sizeof(name));
  return name;
}

Nem elérhető huhboy

  • 894
  • huhboy
    • Profil megtekintése
Dini utolsó pozi mentése és betöltése
« Válasz #5 Dátum: 2015. szeptember 03. - 23:57:10 »
0 Show voters
nem azért, de a dini-ben is van float mentés...felesleges a floatround.
szimplán dini_FloatSet
plusz a spawn-nál nem lesz pontos, mivel az int csak egész számokkal dolgozik (bár ez nem biztos.)..ott is dini_Float....
az meg, hogy minden játékosnak minden spawn-nál lekérdezze a fájlból az adatokat, az egy felesleges luxus, ami laggosítani fog...
 és a GetPlayerPoolSize is felesleges, mivel valszeg nem menetközben fogja betölteni, hogy mentsen, hanem a szerver indulásakor, amikor még nincs játékos...
 

#include <a_samp>
#include <dini>
new fs[MAX_PLAYERS], Float:sX[MAX_PLAYERS], Float:sY[MAX_PLAYERS], Float:sZ[MAX_PLAYERS], Float:sAngle[MAX_PLAYERS], vw[MAX_PLAYERS], int[MAX_PLAYERS];
new pFile[64];
public OnPlayerSpawn(playerid)
{
switch(fs[playerid])
{
case 1:
{
   SetPlayerPos(playerid, sX[playerid], sY[playerid], sZ[playerid]), SetPlayerFacingAngle(playerid, sAngle[playerid]);//csak akkor spawnolja a mentett pozícióra, mikor te akarod.
   SetPlayerVirtualWorld(playerid, vw[playerid]), SetPlayerInterior(playerid, int[playerid]);
}
}
fs[playerid] = 0;//ez csak azért, ha pl van máshol SetPlayerPos, ami valszeg van, ne rakja át a játékost megint erre a pontra.
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
fs[playerid] = 1; //halál után a mentett helyre spawnol
return 1;
}
public OnPlayerConnect(playerid)
{
LoadData(playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new Float:X, Float:Y, Float:Z, Float:Angle;
GetPlayerPos(playerid, X, Y, Z), GetPlayerFacingAngle(playerid, Angle);
    format(pFile, sizeof(pFile), \"/users/%s.ini\", pName(playerid));
    dini_FloatSet(pFile, \"spawnx\", X);
    dini_FloatSet(pFile, \"spawny\", Y);
    dini_FloatSet(pFile, \"spawnz\", Z);
    dini_FloatSet(pFile, \"spawnangle\", Angle);
    dini_IntSet(pFile, \"vw\", GetPlayerVirtualWorld(playerid));
    dini_IntSet(pFile, \"int\", GetPlayerInterior(playerid));
    printf(\"%s pozicióadatai sikeresen mentődtek!\", pName(playerid));
    return 1;
}
stock LoadData(playerid)
{
    format(pFile, sizeof(pFile), \"/users/%s.ini\", pName(playerid));
    if(dini_Exists(pFile))
    {
        sX[playerid] = dini_Float(pFile, \"spawnx\");
        sY[playerid] = dini_Float(pFile, \"spawny\");
        sZ[playerid] = dini_Float(pFile, \"spawnz\");
        sAngle[playerid] = dini_Float(pFile, \"spawnangle\");
        int[playerid] = dini_Int(pFile, \"int\");
        vw[playerid] = dini_Int(pFile, \"vw\");
}else
{
    dini_Create(pFile);
}
return 1;
}
   
stock pName(playerid)
{
new name[32];
GetPlayerName(playerid, name, sizeof(name));
return name;
}
« Utoljára szerkesztve: 2015. szeptember 04. - 00:54:41 írta JustaCube »

Dini utolsó pozi mentése és betöltése
« Válasz #6 Dátum: 2015. szeptember 04. - 16:32:07 »
0 Show voters
Idézetet írta: JustaCube date=1441317430\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"57615\" data-ipsquote-contentclass=\"forums_Topic
GetPlayerPoolSize is felesleges, mivel valszeg nem menetközben fogja betölteni, hogy mentsen, hanem a szerver indulásakor, amikor még nincs játékos...
Tisztelettel, de ez az állítás szerintem nem állja meg a helyét, mivel tesztelés céljából bármikor bárki használhatja.
A többi jogos és valóban nem laggoltatja annyira. ()
 
nem azért, de a dini-ben is van float mentés...felesleges a floatround. [/quote]
Igen tudok róla, csak egy scriptemből vettem ki és nem figyeltem oda :shurg: Csak szerettem volna a kérdésre választ adni.
További szép napot! / Jó hétvégét! ;)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal