Szerző Téma: Új pénznemmel kapcsolatos kérés/kérdés  (Megtekintve 2065 alkalommal)

Új pénznemmel kapcsolatos kérés/kérdés
« Dátum: 2012. Május 07. - 16:51:09 »
0 Show voters
Üdv!
Elkezdtem a szerveremhez egy újabb rendszert írni, egy úgynevezett \"új pénznem\" scriptet, amire Én azt hittem, hogy nagyon gyorsan és könnyedén megtudom oldani, de így idõközben kiderült, hogy nem is olyan könnyû ezt megcsinálni, mint amire Én számítottam. :D Így hát, hozzátok kell hogy forduljak, mivel gõzöm sincs, hogy csinálhatnék meg két dolgot, aki tud segíteni nekem, annak Én nagyon megköszönném.
Szóval, ahogy mondtam elkezdtem ezt a kis scriptet, én inkább egy rendszernek hívom majd a jövõben, mivel ez a kis script nagyon sok feladatot fog ellátni a szerveren, és nagyon sokszor szóba fog jönni. Szépen lassan eljutottam odáig, hogy dollárral, feltudják váltani a Playerek a pénzüket, erre az új pénznemre, hívjuk úgyhogy EliteMoney(nem ez lesz a valódi neve). Nos, szépen meg is volnék idáig, de egy újabb gondba keveredtem, és az az, hogy csak átállítja a dollárt, EM-re, tehát ha mondjuk veszek 2 darab EM-et, azt szépen kiírja textdrawként, de ha azután vennék mondjuk 1 darab EM-et, akkor már nem azt írja, hogy 3, hanem 1, vagyis csak átállítja.
Ez lenne az elsõ problémám, és egyben a kérdésem is, hogy, hogy lehetne megoldani azt(gondolom stock-kal), hogy ne beállítsa, hanem hozzáadja a meglévõkhöz.
A következõ nagyobb problémám, az EM felhasználása. Eddig úgy gondoltam, hogy szépen megírom a parancsot, könnyedén lekérdezem, hogy mennyi EM-je van, és levonom azt. Igen, csak nem ilyen egyszerû a dolog. A dollárnál könnyedén le lehet kérdezni mennyi dollárja van a playernek, és majd levonja, igen, DE egy teljesen új pénznemmel, ez már nem olyan könnyû, egyszóval lövésem sincs, hogyan tudnám lekérdezni, hogy mennyi EM-je van, és azt még le is vonni, ha pedig nincsen neki annyi, akkor esetleg hibaüzenetet kiírni.
Megpróbáltam érthetõen leírni a kérdéseimet, problémáimat.
Nos, ha tudna valaki segíteni, annak nagyon örülnék, és nagyon megköszönném, illetve adnék annak 1 darab pluszt is. :)
« Utoljára szerkesztve: 2012. Május 08. - 20:09:01 írta Harsanyi Alex »

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #1 Dátum: 2012. Május 07. - 22:13:33 »
0 Show voters
Egy kérdés..
 
stock CheckMoney(playerid)
{
    SetTimerEx(\"CheckMoney\", 2000, true, \"i\", playerid);
    return 1;
}

 
Ezmiez?
1. Timer-t callback-re állíts és ne stock-ra..
forward CheckMoney(playerid); public CheckMoney(playerid) { }

 
2. Minek indítod el mindig a timert ha már egyszer folyamatosra állítottad?
SetTimerEx(\"CheckMoney\", 2000, false, \"i\", playerid);

 
Ha nem átállítani akarsz akkor:
 
változó = érték

 
HELYETT
 
változó += érték

 
-t írj!
A lekérdezés egyszerûen fájlba mentés és olvasás.. :D Én dini-t ajánlom mert nem olyan lassú és nem nehéz kezelni + csak egy include kell hozzá, semmi több.

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #2 Dátum: 2012. Május 07. - 22:31:30 »
0 Show voters
Igen, azóta javítgattam és törölgettem a felesleges sorokat, körülbelül pont azokat, amiket megemlítettél. De azért köszönöm, hogy le írtad ezeket is. :)
A Dini, Én is a dinit használom csomó fájlba mentéshez, már egy tucat van ebbõl körülbelül :D . Viszont így õszintén szólva, nem tudom, hogy mit mentsek fájlba, mivel eddig csak egy \"számlálótextdraw\" van megcsinálva, és nem több. Ha letudnád nekem írni azt a pár sort, vagy egyszerûen csak leírni, hogy mit mentsek, annak nagyon örülnék, és dobnám a pluszt. :D

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #3 Dátum: 2012. Május 08. - 09:39:19 »
+1 Show voters
Ezt építsd be a scriptbe:
 
#include <a_samp>
#include <dini>
new eMoneys[MAX_PLAYERS];
new bool:Spawned[MAX_PLAYERS];
#define eFile \"eMoney/%s.ini\"
stock LoadeMoney(playerid)
{
new file[100];
format(file,100,eFile,pName(playerid));
if(!dini_Exists(file))
{
    CreateeMoney(playerid);
}
else
{
    eMoneys[playerid] = dini_Int(file,\"eMoney\");
}
return 1;
}
stock CreateeMoney(playerid)
{
new file[100];
format(file,100,eFile,pName(playerid));
if(!dini_Exists(file))
{
       dini_Create(file);
       dini_IntSet(file,\"eMoney\",0);
}
return 1;
}
stock SaveeMoney(playerid)
{
    new file[100];
format(file,100,eFile,pName(playerid));
if(!dini_Exists(file))
{
    CreateeMoney(playerid);
}
else
{
    dini_IntSet(file,\"eMoney\",0);
}
return 1;
}
stock pName(playerid)
{
new name[24];
GetPlayerName(playerid,name,24);
return name;
}
public OnPlayerConnect(playerid)
{
Spawned[playerid] = false;
eMoneys[playerid] = 0;
return 1;
}
public OnPlayerDisconnect(playerid)
{
SaveeMoney(playerid);
return 1;
}
public OnPlayerSpawn(playerid)
{
if(Spawned[playerid] == false) LoadeMoney(playerid);
return 1;
}

 
És az eMoney[playerid] változót fogod módosítani ha történik valami.

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #4 Dátum: 2012. Május 08. - 17:06:59 »
0 Show voters
Ohh, nagyon köszönöm a válaszod, tényleg kösz szépen. :) A Pluszt dobtam :)
És illetve, ezt majd hogyan használhatom föl majd a gyakorlatban, vagyis tudnál írni egy példát, ha van még erõd rám? :D Például a fölváltásnál, hogy mely sorokat írjuk fel oda(elég 1 helyre is, csak), illetve ha például egy EM-es parancs van, ott hogyan kell. Elég, csak egy példát is írnod(ha persze akarsz segíteni), mert azután már érteni fogom, hogy mi-hogy van. Ha ezt még leírnád nekem, akkor örök hálám. ;)
« Utoljára szerkesztve: 2012. Május 08. - 17:22:27 írta Harsanyi Alex »

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #5 Dátum: 2012. Május 08. - 17:32:53 »
0 Show voters
Idézetet írta: Harsanyi Alex date=1336489619\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"21152\" data-ipsquote-contentclass=\"forums_Topic
Ohh, nagyon köszönöm a válaszod, tényleg kösz szépen. :) A Pluszt dobtam :)
 
Szívesen, de annyit még hozzáfûznék h nem a Plusz-ért segítek. :D
Éééés...
Az üzidben nem látok ilyet, de mikor idézni akartam ezt találtam:
 

És illetve, ezt majd hogyan használhatom föl majd a gyakorlatban, vagyis tudnál írni egy példát, ha van még erõd rám? :D Például a fölváltásnál, hogy mely sorokat írjuk fel oda(elég 1 helyre is, csak), illetve ha például egy EM-es parancs van, ott hogyan kell. Elég, csak egy példát is írnod(ha persze akarsz segíteni), mert azután már érteni fogom, hogy mi-hogy van. Ha ezt még leírnád nekem, akkor örök hálám. ;)
 
[/quote]
Ezt nem teljesen értem...
Ha menteni akarod az eMoney-t akkor:
 
SaveeMoney(playerid);

 
Ha betölteni:
 
LoadeMoney(playerid);

 
És ha le akarod kérdezni hogy mennyi eMoney van jelenleg a játékosnál, pl:
 
new str_[64];
format(str_,64,\"Jelenleg %d Emoney-ed van.\",eMoneys[playerid]);
SendClientMessage(playerid,0xFFFF00FF,str_);

 
Textdrawnál is az eMoneys[playerid] dolgozz:
OnFilterScriptInit vagy OnGameModeInit alá írd ezt:
 
SetTimer(\"UpdateEmoney\",1000,1);

 
És:
 
forward UpdateEmoney();
public UpdateEmoney()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i))continue;
new string[128];
format(string, sizeof(string), \"EMoney: %d EM\", eMoneys);
TextDrawSetString(Ft, string);
}
return 1;
}

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #6 Dátum: 2012. Május 08. - 17:36:24 »
0 Show voters
Ja, lehet hogy értem, hát megpróbálom evvel megcsinálni, amit szeretnék, ha valami problémám akad, akkor leírom ide, esetleg szerkesztem a hozzászólást.
Nos, nagyon köszönöm az eddigi segítségedet, sokat segítettél nekem, köszönöm szépen. :)
Egyébként a CreateeMoney nem mûködik, nem készíti el a fájlt, és nem ment semmit, minden belépésnél 0-ról kezd a player.
 

stock CreateeMoney(playerid)
{
new file[100];
format(file,100,eFile,pName(playerid));
if(!dini_Exists(file))
{
                 dini_Create(file);
                 dini_IntSet(file,\"eMoney\",0);
}
return 1;
}
« Utoljára szerkesztve: 2012. Május 08. - 18:28:06 írta Harsanyi Alex »

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #7 Dátum: 2012. Május 08. - 22:12:01 »
0 Show voters
Menteni SaveeMoney -el kell, betölteni pedig LoadeMoney -el.

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #8 Dátum: 2012. Május 08. - 22:32:48 »
0 Show voters
Na szóval, megtaláltam az egyik hibát, ami az egyik hiba volt, azt javítottam. Nos a következõ nagyobb hiba, amit észrevettem. Úgy van jelenleg, hogy ha egy X játékos megvesz 9EM-et, aztán kilép, mindent rendesen elment, aztán ha visszajön az X ember, akkor abból az állásból folytathatja, de itt jön egy nagyobb hiba, amit a tesztelés folyamán észrevettem, és az az, hogyha felmegyek egy teljesen más névvel(ami után regisztrálnom kell), akkor az az Y játékos, az X játékos által összegyûjtött EM-rõl indul, tehát ha az X játékos vett 9 EM-et, akkor az Y játékos ha belép, akkor nem az Õ összege jelenik meg, hanem az X játékosé.
Illetve a Scriptfiles mappába nem készíti el a fájlt, csak elmenti.
« Utoljára szerkesztve: 2012. Május 08. - 23:05:47 írta Harsanyi Alex »

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #9 Dátum: 2012. Május 09. - 11:41:54 »
0 Show voters
OnPlayerDisconnect:
 
SaveeMoney(playerid);
eMoneys[playerid] = 0;

 
OnPlayerConnect:
 
eMoneys[playerid] = 0;
LoadeMoney(playerid);

 
Így elvileg jó kell h legyen..

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #10 Dátum: 2012. Május 09. - 14:21:20 »
0 Show voters
Igen mûködne ez tökéletesen, DE még mindig nem hoz létre fájlt a felhasználó nevével, a Scriptfiles mappába, így semmit nem ment, és semmit nem tud betölteni, csak addig jó, amíg ki nem lépünk, aztán ha újra belépünk, akkor a 0 EM-mel kezdünk. Õszintén szólva, én sem tudom mi lehet itt a baj, elméletben mindennek tökéletesen kellene mûködnie, és fájlt is létre kéne hoznia.
Szerk1.: Nos, csak abban az esetben hoz létre fájlt, ha kitörlök valamit:
 
#define eFile \"eMoney/%s.ini\"

 --> Ezt írtad
 
#define eFile \"%s.ini\"

 --> És, csak ebben a formában hoz létre fájlt, viszont ekkor, csak létrehozza, és nem ment el semmit, pedig ezenkívül minden úgy van, ahogy leírtad nekem.
« Utoljára szerkesztve: 2012. Május 09. - 15:07:58 írta Harsanyi Alex »

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #11 Dátum: 2012. Május 09. - 19:01:36 »
0 Show voters
A scriptfiles mappába rakj egy eMoney mappát.

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #12 Dátum: 2012. Május 10. - 17:42:32 »
0 Show voters
Na igen, ezt én elnéztem, tényleg létre kellet volna hozni egy fájlt, de most nem ezen volt az igazi hangsúly, hanem az a gond, hogy még mindig nem menti el a pénzt a fájlba, egyszerûen egész végig a(z) 0 szerepel, és nem változik(csak, ha Én írom át).
Õszintén szólva, nem tudom mi lehet ennek a hibának a forrása, ha még nem unod, és ha akarsz segíteni, akkor átküldeném neked, script formájában, és Te talán jobban észre tudnád venni a hibát, mint Én, persze ezt nem kérem, csak ha van még erõd rám, nagyon megköszönném. :)

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #13 Dátum: 2012. Május 07. - 22:13:33 »
0 Show voters
Egy kérdés..
 
stock CheckMoney(playerid)
{
    SetTimerEx(\"CheckMoney\", 2000, true, \"i\", playerid);
    return 1;
}

 
Ezmiez?
1. Timer-t callback-re állíts és ne stock-ra..
forward CheckMoney(playerid); public CheckMoney(playerid) { }

 
2. Minek indítod el mindig a timert ha már egyszer folyamatosra állítottad?
SetTimerEx(\"CheckMoney\", 2000, false, \"i\", playerid);

 
Ha nem átállítani akarsz akkor:
 
változó = érték

 
HELYETT
 
változó += érték

 
-t írj!
A lekérdezés egyszerûen fájlba mentés és olvasás.. :D Én dini-t ajánlom mert nem olyan lassú és nem nehéz kezelni + csak egy include kell hozzá, semmi több.

Új pénznemmel kapcsolatos kérés/kérdés
« Válasz #14 Dátum: 2012. Május 07. - 22:31:30 »
0 Show voters
Igen, azóta javítgattam és törölgettem a felesleges sorokat, körülbelül pont azokat, amiket megemlítettél. De azért köszönöm, hogy le írtad ezeket is. :)
A Dini, Én is a dinit használom csomó fájlba mentéshez, már egy tucat van ebbõl körülbelül :D . Viszont így õszintén szólva, nem tudom, hogy mit mentsek fájlba, mivel eddig csak egy \"számlálótextdraw\" van megcsinálva, és nem több. Ha letudnád nekem írni azt a pár sort, vagy egyszerûen csak leírni, hogy mit mentsek, annak nagyon örülnék, és dobnám a pluszt. :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal