Szerző Téma: [SZERKESZTVE]Elsõ Játékmódom v1.0  (Megtekintve 5339 alkalommal)

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
[SZERKESZTVE]Elsõ Játékmódom v1.0
« Válasz #30 Dátum: 2015. április 27. - 08:29:37 »
+2 Show voters
Szia!
Ahogy kérted leírom az észrevételeimet :)
A Belépés számláló szerintem nem jó így :)
A betöltés után növeld :)
 
public OnPlayerConnect(playerid)
{
new tag[MAX_PLAYER_NAME];
new kiad[42];
GetPlayerName(playerid,tag,sizeof(tag));
format(kiad,sizeof(kiad),\"Feljött a szerverre %s.\",tag);
SendClientMessageToAll(RED,kiad);
PlayerInfo[playerid][belepesek]++; // Növeled
      format(kiad,sizeof(kiad),\"%s.ini\",tag);
SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0 );
SpawnPlayer(playerid);
if(dini_Exists(kiad))
     {
   PlayerInfo[playerid][szint] = dini_Int(kiad,\"Szint\");
   PlayerInfo[playerid][Oles] = dini_Int(kiad,\"Ölés\");
   PlayerInfo[playerid][Halal] = dini_Int(kiad,\"Halál\");
   PlayerInfo[playerid][belepesek] = dini_Int(kiad,\"Belépések\"); // Felül írod a növelt értéket
   PlayerInfo[playerid][Penz] = dini_Int(kiad,\"Pénz\");
     }
return 1;
}

 
Itt s% van %s helyett: (65. sor, OnPlayerDisconnect alatt)
 
format(kiad,sizeof(kiad),\"Lelépett a szerverrõl s%\",tag);

 
1. kilépésnél csak létrehozza a fájlt és nem menti az adatokat...
 
if(dini_Exists(kiad))
{
    dini_IntSet(kiad,\"Szint\", PlayerInfo[playerid][szint]);
    dini_IntSet(kiad,\"Ölés\", PlayerInfo[playerid][Oles]);
    dini_IntSet(kiad,\"Halál\", PlayerInfo[playerid][Halal]);
    dini_IntSet(kiad,\"Belépések\", PlayerInfo[playerid][belepesek]);
    dini_IntSet(kiad,\"Pénz\", PlayerInfo[playerid][Penz]);
}
else
{
    dini_Create(kiad);
}

 
így próbáld meg: :)
 
// HA nem létezik a fájl AKKOR létrehozza
if(!dini_Exists(kiad)) { dini_Create(kiad); }
dini_IntSet(kiad,\"Szint\", PlayerInfo[playerid][szint]);
dini_IntSet(kiad,\"Ölés\", PlayerInfo[playerid][Oles]);
dini_IntSet(kiad,\"Halál\", PlayerInfo[playerid][Halal]);
dini_IntSet(kiad,\"Belépések\", PlayerInfo[playerid][belepesek]);
dini_IntSet(kiad,\"Pénz\", PlayerInfo[playerid][Penz]);

 
OnPlayerDeath alatt több dolgot is véltem feldefezni:
- kiad tömbbe 42 karakter fér 2 db 20 karakteres név + \" megölte \" + szöveg végi \\0 = 20 + 20 + 9 + 1 = 50, szóval lemarad 8 karakter a végéről :)
- játékos nevét tároló tömböknél MAX_PLAYER_NAME-et ajánlom, de ha nem azt írod akkor is 21-et írj, 20 karakter + szöveg végi \\0 = 21 :)
- s% van %s helyett
- nem ellenőrzöd, hogy a gyilkos játékos e: (ebből több gond származik)
http://wiki.sa-mp.com/wiki/OnPlayerDeath
\"You MUST check whether \'killerid\' is valid (not INVALID_PLAYER_ID) before using it in an array (or really anywhere), as it will cause the OnPlayerDeath script to crash (not the entire script). This is because INVALID_PLAYER_ID is defined as 65535, and if an array only has \'MAX_PLAYERS\' elements, e.g. 500, you\'re trying to access an index that is above 499, which is out of bounds.\"
- a halott kap ölést és a gyilkos halált a statba
 
new elo[20];
new halott[20];
new kiad[42];
format(kiad,sizeof(kiad),\"s% megölte %s\",elo,halott);
PlayerInfo[playerid][Oles]++;
PlayerInfo[killerid][Halal]++;

 
stringnek nem elég 42 cella ismét :) itt a 128 belefér, mert 128 lehet a maximális parancs hossz és az egy sorban megjeleníthető szöveg is...
OnPlayerCommandPerformed:
 
new string[42];
format(string,sizeof(string),\"Nem létezik ez a parancs!(%s)\",cmdtext);
SendClientMessage(playerid,RED,string);

 
Minden if-nél bent van az ellenőrzés, pedig elég lenne 1x is ha az összes if elé beraknád
 
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,\"Nem ülsz autóban.\");

 
OnDialogResponse:
 
if(dialogid == DIALOG_KOCSI)
{
    if(response)
    {
        //if-ek

 
Nem kell mindenhova return 1; elég a dialog id ellenőrzés végére
 
if(dialogid == DIALOG_KOCSI)
{
    if(response)
    {
        // ...
    }
    return 1;
}

 
Itt a 2 if helyett lehet if és else: :) (!response helyett else)
 
if(dialogid == DIALOG_FELNI)
{
    if(response)
    // ...
    if(!response)
    // ...
}

 
helyett:
 
if(dialogid == DIALOG_FELNI)
{
    if(response)
    // ...
    else
    // ...
}

 
Ha egy szinttel feljebb kérdezed le a FELNIKNÉL a kocsit akkor nem kell minden if ágba beírnod :)
 
new kocsi = GetPlayerVehicleID(playerid);

 
így:
 
if(response)
{
    new kocsi = GetPlayerVehicleID(playerid);
    if(...)
    // ...

 
A sok egymás alatti if, if, if, if, if helyett lehetne if, else if, else if, else if, else if VAGY switch :)
http://wiki.sa-mp.com/wiki/Control_Structures#else_if
http://wiki.sa-mp.com/wiki/Control_Structures#switch_2
 
new god[MAX_PLAYER_NAME];

 
helyett:
 
new god[MAX_PLAYERS];

 
Ez a parancs mindig a 0.0 0.0 0.0 pozícióra fog teleportálni:
Túl korán kéred le a pozíciót
 
CMD:goto(playerid,params[])
{
new Float:X,Float:Y,Float:Z;
new nevem;
GetPlayerPos(nevem,X,Y,Z);
if(sscanf(params,\"u\",nevem)) return SendClientMessage(playerid,RED,\"Használat:/goto <playerid/Névrészlet>\");
if(!IsPlayerConnected(nevem)) return SendClientMessage(playerid,-1,\"Nincs ilyen játékos.\");
SetPlayerPos(playerid,X,Y,Z);
return 1;
}

 
\"Átváltottad a skined erre:.\" + 3 szám + szöveg végi \\0 = 27+3+1 = 31
 
new kiad[42];

 
Az új sa-mp-vel jöttek új skinek, ezt majd módosítsd megfelelően :) ha új verziót használsz
 
if(skin > 299 || skin < 0) return SendClientMessage(playerid,RED,\"Rossz Skin ID!\");

 
Itt enged perc-nek 60-at beírni, pedig 0-59-ig kellene :)
 
if(perc > 60 || perc < 0) return SendClientMessage(playerid,-1,\"Nincs ilyen perc.\");

 
ido parancs alatt:
nem elég a tömb cella, de itt most rád hagyom a matekot :P
 
new kiad[42];
format(kiad,sizeof(kiad),\"Átváltoztattad az idõd erre:%d óra és %d perc\",ora,perc);

 
A veh parancs alatt nincs ellenőrizve a szín és a jármű id, tehát akármilyen számot beírhatnak és ez gondot okozhat :)
Statikus szövegnél nem kell formázni :)
 
new kiad[42];
format(kiad,sizeof(kiad),\"Lekértél egy jármûvet!\");
SendClientMessage(playerid,-1,kiad);

 
helyett:
 
SendClientMessage(playerid,-1,\"Lekértél egy jármûvet!\");

 
A fegyverad parancsnál nincs ellenőrizve a fegyver id és a töltény szám akármilyen számot beírhatnak...
Eddig jól haladsz, további sok sikert :)
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal