Szerző Téma: Mit jelent "pazarlóan" megírni egy játékmódot?  (Megtekintve 1544 alkalommal)

Nem elérhető AnthonyGates

  • 546
  • AnthonyGates
    • Profil megtekintése
Mit jelent "pazarlóan" megírni egy játékmódot?
« Dátum: 2015. május 26. - 20:06:42 »
0 Show voters
Íme a második ilyen kérdésem.
Mit jelent, hogyan lehet elkerülni? Milyen hasznos módszereket ismertek?
« Utoljára szerkesztve: 2015. május 26. - 20:07:33 írta ƒlaﻛh »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #1 Dátum: 2015. május 27. - 08:16:46 »
+2 Show voters
itt az erőforrás pazarlásra gondolsz? vagy az igénytelenségre, hogy \"jó lesz az úgy\" hozzáállás miatt akkora bugok és át nem gondolt dolgok vannak a kódban ami már szégyen?
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető AnthonyGates

  • 546
  • AnthonyGates
    • Profil megtekintése
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #2 Dátum: 2015. május 27. - 11:59:22 »
0 Show voters
Inkább  az erőforrás, viszont így, hogy meg lett említve, érdekelne a magyar mentalitású \"jóvanazúgy\" módi is, bár szerintem ez az lesz, hogy nem figyelik, hogy az user mindíg támadni akar, vagy nagyon hátul állt, mikor az eszéért állt sorba.
« Utoljára szerkesztve: 2015. május 27. - 12:04:08 írta ! a n t h o n y »

Nem elérhető CANNONN

  • 2139
    • Profil megtekintése
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #3 Dátum: 2015. május 27. - 13:30:13 »
+2 Show voters
Szerintem egy mód belülről
- legyen átlátható, de nézzen is ki úgy mintha kód lenne
- ne tartalmazzon túl sok időzítőt ciklust, lekérést
- ne pazaroljon a tárolókkal
Szerintem egy mód kívülről
- legyen színes, de ne túlságosan
- legyen játékosbarát ( gombok, rövid, változatos parancsok )
- ne írjon felesleges üzeneteket
- ne tartalmazzon túl zsúfolt képi elemeket
Pazarolni akkor szoktunk, ha egy kódot túl komplikáltan írunk meg annak ellenére, hogy pár sorban is megírhatnánk.
Persze nem mindig jobb, ha valami rövidebb. Szerintem a lényeg, hogy az ellenőrzések, ciklusok a megfelelő sorrendben történjenek és az utóbbiak ne fussanak feleslegesen!
Próbáljunk minél kevesebb tárolót létrehozni az adatok számára és minél kevesebbszer lekérni belőlük / értéket adni azoknak.
pl.: le szeretnénk kérni, hogy valaki a bejáratnál van-e
Hagynám a folyamatos lekéréseket a fenébe... Leraknék egy checkpointot minden belépőponthoz és csak akkor kérném le, hogy hol tartózkodik, ha belement a checkpointba.
Ennek más módja, ha gomb megnyomás alatt kérjük ezt le. Viszont akkor én alkalmaznék ellene spam védelmet is!
Ez az én saját véleményem, talán ha még eszembe jut bármi, leírom azt is! :)
Kíváncsi vagyok mások véleményeire és tapasztalataira is! Pörögjön a téma! :P

Nem elérhető AnthonyGates

  • 546
  • AnthonyGates
    • Profil megtekintése
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #4 Dátum: 2015. május 27. - 13:38:51 »
0 Show voters
Az ilyen itt van,ott van dolgokra DynamicArea-t használok.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #5 Dátum: 2015. május 27. - 13:45:26 »
+6 Show voters
erőforrásnál:
- 256 cellás tömbök
Chat max 128 karaktert jelenít meg, szóval nagyrészt felesleges!
De pl amikor 8-10 karaktert raknak bele oda is 256 cellát hoznak létre, mert úgy szokták meg.
pl:
 
format(string,sizeof(string),\"%s kinyitotta a kocsiját. (Jármű: %d)\",name,vehid);

 
\" kinyitotta a kocsiját. (Jármű: )\" = 33
name = 20 (max hosszal számolva!)
vid = 4 (2000-es limit mellett!)
szöveg végi \\0 = 1
szóval: 33+20+4+1=58
 
new string[256];
//helyett:
new string[58];

 
Annyi cellát hoznék létre amennyire tényleg szükség van.
- 30-50-100 slotos szerveren 1000x futó ciklusok (MAX_PLAYERS)
Elég lenne egy 30 slotos szerveren 0-29-ig futni, de a legjobb az lenne ha mondjuk 10 játékos van fent (pl: 0-9 ID akkor 9-ig futna, ha 0-13 között vannak az ID-k akkor 13-ig, szóval a legnagyobb ID-jú játékosig)
Újra kell definiálni a MAX_PLAYERS-t SLOT számra és a mód/script indulásnál ellenőrizni, hogy a slot nagyobb e mint az új érték...
És itt megemlíteném még a MAX_VEHICLES és a többi sokáig futó ciklust...házaknál, üzleteknél...
Ezeknél is el lehetne tárolni az utolsó ID-t...
Én pl amibe utoljára belekezdtem mód abban már az első és az utolsó ID + az első \"lyukas\" ID is el volt tárolva, hogy sebességet nyerjek...persze memóriát foglalok, de a processzort kímélem...
- Több azonos ciklus egymás alatt, nem végig gondolt kód
Arra gondolok, hogy 3x egymás alatt végig megy az összes játékoson...GFRP-ben találkoztam olyan kóddal, hogy 3-4x volt egymás alatt az összes játékoson végig haladó ciklus
Egy ciklusba kellene rakni
- Sok időzítő
Ez egyértelmű szerintem, ami sokszor kiváltja, hogy pl OnPlayerConnect alatt indul időzítő a játékosnak, DE SEHOL nincs KillTimer...tehát minden loginnál SetTimer, fut a szerver leállásáig...
Itt vagy KillTimer-el kell leállítani az időzítőt, vagy nem kell annyit indítani!
- Több if egymás alatt return nélkül
Parancsnál ha valaki ezt rosszul használja akkor végig ellenőrzi az összes parancsot minden parancs beírásánál
 
if(...)
{
// kód, végén nincs return!
}
if(...)
{
// kód, végén nincs return!
}
if(...)
{
// kód, végén nincs return!
}

 
Van amikor erre van szükség! Csak sokszor mondjuk dialog id-kat látok így.
Itt else if-et ajánlom, vagy a return használatát
- Többször lekérdezett adat
Mondjuk van egy CountPlayerHouses függvény ami végig megy az összes házon és összeszámolja a játékos házainak számát
 
for(new i = 0; i < CountPlayerHouses(playerid); i++)

 
Legyen mondjuk 500 ház és legyen a játékosnak 3 háza: 1500x fut le a kód
Ciklus előtt kérdezzük le:
 
new count = CountPlayerHouses(playerid);
for(new i = 0; i < count; i++)

 
Ez még fokozható, ha végig megy 100 játékoson és mellette átlagban lefut 500x a CountPlayerHouses
 
- Felesleges kódok

 
Tegnap egy példában olyannal találkoztam, hogy GetPlayerName-el lekérdezte a játékos nevét egy tömbbe aztán a következő sorban format-al felülírta, de nem használta a saját értékét a formázás során, szóval feleslegesen kérte le a nevet.
Ezeket mellőzni
- SQL queryk
Bonyolult SQL query-k amiket egyszerűbben is meglehetne oldani.
Többször lekérdezni az adatokat, akár egy táblából le lehetne kérdezni egy query-ben azt 4 helyen kérdezi le külön szedve.
Query-k optimalizálása ajánlott
Hirtelen ezek jutottak eszembe...
\"jó lesz az úgy\" hozzáállás nem magyar mentalitású! a hanyag, vagy épp másra koncentráló programozók is vétenek ilyeneket...például egy német scripter ismerősöm csinált egy HQ-t és a parancsot úgy csinálta meg, hogy mindenki tudta nyitni a kaput, nem csak a tulajok...azért így, mert nem akart 20mp rászánni arra, hogy beírja feltételnek, hogy a adminok és a tulajok tudják nyitni...
Régen GFRP-ben volt a \"Date Hack\", amikor regisztrációnál \"99/99/999999999\" szöveggel hazalehetett vágni az egész szervert. Ma már nem hiszem, hogy 1%-nál több szerveren jelen lenne ez a bug. Ez talán nem hanyagságból, hanem hozzá nem értésből, vagy nem számításból következett be. Sajnos a GFRP tele van szeméttel. Én személy szerint sok rossz szokást vettem át onnan, amiknek nagy részét szerencsére már kisöpörtem az agyamból...tanulni jó volt szép volt, de egy bizonyos szint után elég csúnya az a kód :)
Még a német scripter példájához hasonlókat is találtam már és én magam is vétettem hasonló hibákat. Ez azonnal nem mindig akkora probléma, viszont később nagy gondot okozhat...
Sokan (én is szokszor :D) az új fejlesztésekre hajtanak és nem javítják a bugokat.
 
Scripter: óóóó de jó lesz ez az új ház rendszer
Játékos: de bugos a jármű rendszer, eltűnnek kocsik
Scripter: majd az is javítva lesz
- 1 év múlva -
Scripter: óóóó de jó lesz ez az új sebzés rendszer
Játékos: de bugos a jármű rendszer, eltűnnek kocsik
Scripter: majd az is javítva lesz
...
[/quote]
A másik legnagyobb probléma amivel szembesültem már többször is (és a másik oldalával is ami szintén negatív kicsit!) amikor valaki kezdő, vagy csak nem tud megoldani egy problémát és ül a problémán vagy nem érdekli a dolog és nem is fejleszt, mert megtorpan (másik oldal amikor mindent kérdez). Sokan nem mernek kérdezni, mert \"az annyira gáz, hogy nem tudom megoldani\"...
Vagy valakinek nagy ötlete van, sokkal nagyobb ötlet mint amit megtud valósítani és nem kérdez, hanem csinál egy képességeihez mérten sokkal gyengébb kódot, mert elveszi a kedvét, hogy nem tudja olyan szinten kidolgozni...
Ajánlom figyelembe mindenkinek az aláírásomban található linkeket, nekem segítettek :) Amikor scripteltem nap mint nap használtam a wiki-t :)
Google a barátod,
Wiki a barátnőd,
Youtube a szeretőd :D
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető divkn

  • 3259
    • Profil megtekintése
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #6 Dátum: 2015. május 31. - 14:16:21 »
0 Show voters
Kiegészítésként még hozzátenném hogy ha csak egy karakterláncot próbálsz formázni egy másik karakterlánccal, akkor elég 1 darab változó is.
Példa:
 

new str[50];
GetPlayerName(playerid,str,sizeof(str));
format(str,sizeof(str),\"> %s csatlakozott a szerverre.\",str);
SendClientMessageToAll(-1,str);
// Kimenet:
// > Applejack csatlakozott a szerverre.

 
Igen, az str tárolni fogja a 0-tól 20 celláig a játékos nevét, de a mire átformázza a karakterláncot, addigra a név is szerepelni fog a kért karakterláncban és tér vissza vele.

Nem elérhető AnthonyGates

  • 546
  • AnthonyGates
    • Profil megtekintése
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #7 Dátum: 2015. június 01. - 14:50:00 »
0 Show voters
Hát de nem jó! mert nálam azt írja ki hogy
> AnthonyG csatlakozott a szerverre.

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #8 Dátum: 2015. június 02. - 22:42:02 »
0 Show voters
Kovacs_Richard lene egy kérdésem ami régóta érdekel.
Mi a különbség ez:
 
new count = CountPlayerHouses(playerid);
for(new i = 0; i < count; i++)

 
és ez között:
 
for(new i = 0; i < CountPlayerHouses(playerid); i++)

 
?
Sose értettem. páran így csinálják ezt, én nem. Én mindig a 2. verzión szoktam csinálni a dolgokat.. szóval? :)

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #9 Dátum: 2015. június 02. - 22:48:36 »
0 Show voters
Nem mindegy? valaki így tanulta meg és aki már nem játszik évek óta azok nincs már, hogy honnan tudják, csak ha olvasnak leírásokat, megint. Én is így használom mert lusta vagyok átnézni megint azokat a dolgokat amiket pár évvel ezelőtt tanultam. Most 2 sortól nem lesz 1000 ping a szerveren...

Nem elérhető divkn

  • 3259
    • Profil megtekintése
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #10 Dátum: 2015. június 03. - 05:33:10 »
0 Show voters
Idézetet írta: ƒlaﻛh date=1433277722\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"54503\" data-ipsquote-contentclass=\"forums_Topic
...
 
Mert úgy a CountPlayerHouses stock funkció csak egyszer fog lehívódni.
Így meg is tudod nézni.
 
public OnGameModeInit()
{   
new count = CountPlayerHouses();
for (new i = 0; i <= count; i++)
{
    // do nothing
}
print(\" \");
for (new i = 0; i <= CountPlayerHouses(); i++)
{
    // do nothing
}
return;
}
stock CountPlayerHouses ()
{
print(\"lehívódott\");
return 5;
}

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #11 Dátum: 2015. június 03. - 08:08:40 »
+2 Show voters
Idézetet írta: ƒlaﻛh date=1433277722\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"54503\" data-ipsquote-contentclass=\"forums_Topic
Kovacs_Richard lene egy kérdésem ami régóta érdekel.
Mi a különbség ez:
 
new count = CountPlayerHouses(playerid);
for(new i = 0; i < count; i++)

 
és ez között:
 
for(new i = 0; i < CountPlayerHouses(playerid); i++)

 
?
Sose értettem. páran így csinálják ezt, én nem. Én mindig a 2. verzión szoktam csinálni a dolgokat.. szóval? :)
 
Régen én is így használtam, aztán rájöttem, hogy feleslegesen terhelem a szervert.
írtam egy egyszerű példa scriptet:
Egy MoneyGrub ház rendszernél amikor kilép a játékos eladja az üzleteit és házait, ezt illusztráltam:



#include <a_samp>
// Max ház mennyisége
#define MAX_HOUSES   (2000)
enum hdata
{
Float:Pos[3],
Owner
}
new HouseData[MAX_HOUSES][hdata];
forward GetPlayerHouses(playerid);
//OnPlayerDisconnect(playerid,reason)
public OnFilterScriptInit()
{
// Teszt adatok feltöltése
HouseData[3][Owner] = 1;
HouseData[8][Owner] = 1;
HouseData[34][Owner] = 1;
HouseData[83][Owner] = 1;
//
print(\"OnPlayerDisconnect\");
print(\"V1:\");
//
#define playerid 1
//
for(new i = 0; i < GetPlayerHouses(playerid); i++)
{
    HouseData[Owner] = -1;
}
//
print(\"V2:\");
new h = GetPlayerHouses(playerid);
for(new i = 0; i < h; i++)
{
    HouseData[Owner] = -1;
}
//
#undef playerid
return 1;
}
public GetPlayerHouses(playerid)
{
print(\"GetPlayerHouses\");
new h = 0;
for(new i = 0; i < MAX_HOUSES; i++)
{
    //print(\"Ellenőrzés\");
if(HouseData[Owner] == playerid)
{
    h++;
}
}
return h;
}

 
 
Ha akarod vedd ki a commentet innen:
 
//print(\"Ellenőrzés\");

 
és nézd meg hányszor fut le az ellenőrzés...
és ez még nem is olyan nagy dolog mert itt csak egy intet ellenőriztünk, de ahol 3-4 dolgot ellenőriz a kód és egyre több ciklus indul ott sokkal számottevőbb a különbség...
 

Nem mindegy? valaki így tanulta meg és aki már nem játszik évek óta azok nincs már, hogy honnan tudják, csak ha olvasnak leírásokat, megint. Én is így használom mert lusta vagyok átnézni megint azokat a dolgokat amiket pár évvel ezelőtt tanultam. Most 2 sortól nem lesz 1000 ping a szerveren...
 
[/quote]
Ez nem a pinget növeli...
Én 14 évesen kezdtem el SA-MP-vel foglalkozni, nem ma volt :D régen én is meg voltam elégedve a terhelőbb megoldással...3 szakmát leraktam az évek alatt + 2 munkahelyen elég sokat tanultam/tapasztaltam...én úgy vagyok vele, hogy AKAROK fejlődni és nem állok a saját fejlődésem útjába! volt idő amikor én is elzárkóztam a nagy változásoktól, mert régi berögződéseket felül írni meg újra megszokni dolgokat macerás...de ez a szakma arról szól, hogy fejlődni kell napról napra!
amikor bejött a főnök, hogy értek e a google maps-hez, azt mondtam, hogy \"még soha nem volt vele dolgom, de mi lenne a feladat?\", következő kérdése az volt, hogy \"megtudnék e oldani valamit vele\" (és konkrétan elmondta mit szeretne)...másnapra utána néztem és ma már működő weboldal lett belőle...ha akkor azt mondtam volna, hogy \"nem értek hozzá és nem is akarom megtanulni\" szerintem nem nézte volna jó szemmel :D
főleg, hogy már a második állami cégnél dolgozom...és ugye itt a politika meg az üzleti élet miatt kicsit máshogy mennek a dolgok...ott próbálnak keresztbe tenni egymásnak ahol tudnak a politikusok, ezt megszokhattuk...jelenlegi pozíciómat nem akarom pontosan leírni, de elég fontos szerepem van jelenleg mint webfejlesztő...elég nagy károkat tudnék okozni ha véletlen mellé lőnék...szóval kb minden nap tanulok valami újat...nem kell nagy dolog legyen, de valamit minden nap...
A HRP mód elég régi GFRP alapokon nyugszik...amikor én kezdtem akkor még világszinten volt 7-8 szerver GFRP móddal...az eredeti készítők is raktak bele sok butaságot + amit én az évek alatt még belepakoltam mint kezdő scripter :D azért nem publikálom, mert ahhoz már nem adnám a nevem...az új módot amit 0-ról írtam teljesen más szinten, más megoldásokkal az kb a jelenlegi szintem ahhoz merném adni a nevemet, de lehet évek múlva már ahhoz sem...és a jelenlegi új irány amerre indultam már nem az SA-MP, egy teljesen más játék...de ezt mind az tette lehetővé, hogy fejlődtem! nem akarok megragadni egy szinten és életem végéig abból élni...ez a szakma szerintem nem erről szól...persze ha valaki megteheti és neki megfelel nyugodtan :) tehát ha neked jó az, hogy ennyire terheled a szervert akkor terheld...szinte észre sem veszed a különbséget! viszont emlékezz erre a megoldásra akkor amikor lassú lesz egy kódod és szeretnél rajta gyorsítani! én nem azt mondom, hogy kötelező mindenkinek azt csinálni amit én vagy más scripter/programozó/fejlesztő/laikus/akárki kitalál! én azt tanácsolom, hogy ne a saját fejlődésed útjába! de ez a te döntésed, tégy úgy ahogy jónak látod :) nem vagyok senkid, hogy megmondjam mit csinálj...én leírtam én mit hogy látok, te eldöntöd hasznosítod e vagy sem, rajtad áll :)
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #12 Dátum: 2015. június 04. - 13:36:03 »
0 Show voters
Érdekes mert én is abban a korban kezdtem el pawnozni majdnem mint Kovacs_Richard
Régen én is írtam sok baromságot és érdekes hogy én is eljutottam arra hogy nem see módhoz kell ragaszkodni (fejleszteni akartam magam) és el is kezdtem egy új .pwn fájlat... viszont átlépni mysql 3.1.1 ről r39-3 ra egy nagy lépés volt... viszont megérte... viszont kb 1 éve csinálgatom a pwn fájlat és ha véletlen látok egy olyan részt amit régen írtam akkor le esik az álam hogy ezt meg ki írta szöveggel...  fejlődtem... és jól megy... 28000+ vagyok... de nem foglalkozok túl sokat csak ha rám jön...
Ötleteim hogy a témához kapcsolódjak amiket nem mondtak még...
Tapasztalat...  az elején aki kezdő az úgyse stringeket fogja számolni... úgy fogja megírni hogy hogy menjen.... majd később fogja adni a dolgokat..
Pluginok: nem kell felesleges pluginok....  van néhány ami kell de mondjuk kódoló plugin.... minek????
Md5 2x vagy 3x os kódolással.. mutass 1 embert aki vissza fejti...
Amit én használok: mysql r39-3, streamer,sscanf
Akkor filterscriptek... (1 van nekem, objectek) nem kell , fölösleges szerintem... most mi olyan benne amit A: nem lehet megírni (ház rendszer?? Biznisz?? Anticheat??), B: nem lehet belemásolni...
Nekem ezek a tippjeim...

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Mit jelent "pazarlóan" megírni egy játékmódot?
« Válasz #13 Dátum: 2015. június 06. - 20:42:52 »
0 Show voters
[mod]Szerintem ez ki lett kis kőrben beszélve. Témát zárom! Ha ki szeretnéd nyittatni akkor írj PÜ-t.[/mod]

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal