Pro pion - un portal despre scrierile de pioni

fixes.inc - remediați bug-urile SA-MP


descriere
Remedierea erorilor SA-MP scrise de comunitate.

introducere
SA-MP este un program de testare scris de o mică echipă în timpul dvs. liber, poate că există erori (ca în orice software). Unele dintre ele au fost cunoscute de mult timp, dar au o prioritate scăzută datorită efectelor lor minore, altele pur și simplu nu se fixează mult timp. Pentru multe dintre aceste erori, există soluții care pot fi implementate cu ajutorul Amortizorului (și acest lucru poate fi mai simplu decât implementarea acestora în codul sursă SA-MP). Scopul acestui script este de a combina cât mai multe patch-uri posibil într-o singură bibliotecă, ușor de folosit pentru toată lumea.

utilizarea
Pentru a utiliza acest script, activați-l doar după conectarea funcțiilor standard SA-MP, dar înainte de alte biblioteci:

#include
// Orice suprascrie de constante standard ar trebui să fie aici
// # undef MAX_PLAYERS
// # definește MAX_PLAYERS 10
#include
#include

Pentru a dezactiva orice remediere rapidă din orice motiv, procedați în felul următor:

#define FIX_ 0

De exemplu, pentru a dezactiva toate fișierele fix.inc, dacă verificați întotdeauna descriptorul fișierului, procedați în felul următor:

#include
#define FIX_file_inc 0
#include
#include

Toate denumirile de corectare au cuvinte separate, iar toate acestea, cu descrierea lor, sunt enumerate mai jos.

Dacă există un singur script care rulează pe serverul dvs. (adică nu există niciun filtru de script), puteți utiliza următoarea setare pentru a îmbunătăți codul fixes.inc:

#include
#define FIXES_Single 1
#include
#include

setări
Există mai multe setări pentru îmbunătățirea performanței acestui script. Etichetați aceste caractere ca "1" înainte de a conecta fixes.inc (eliminați-le sau le setați la 0 pentru a le dezactiva):
  • FIXES_Single - Aveți doar un script de lucru (fără scripturi de filtrare), simplifică codul.
  • FIXES_SilentKick - Când un jucător lovește pentru modurile / transporturile interzise, ​​nu le trimite un mesaj.
  • FIXES_Debug - Mai multe informații în consola server.

Unele remedii sunt dezactivate în mod prestabilit, însă le puteți activa:

#define FIX_GetPlayerDialog 1 // Adăugați o nouă funcție, acest scop nu este scopul acestui script.
#define FIX_random 1 // Nu cred că numerele negative care nu funcționează reprezintă o eroare.
#define FIX_file_inc 1 // Aceasta include toate corecțiile "fwhatever" (corecții pentru fișiere).
#define FIX_HideMenuForPlayer_2 1 // Ascunde un anumit meniu, nu doar unul curent.


plus
Fișierul este bine documentat, cu o listă de corecții de erori în partea de sus. Dacă știți despre alte erori sau dacă aveți soluții, ar fi bine dacă le-ați postat în acest thread (în funcție de structura folosită). Această bibliotecă trebuie, de asemenea, să fie testată temeinic pentru a găsi erori în remedierile.

Mai multe biblioteci sunt prezentate aici, menite să corecteze alte probleme grave:

  • Fixes2 - Y_Less stabilește "SetTimer", "SetTimerEx" și altele.
  • SQLitei - Slice corectează și îmbunătățește multe funcții SQLite
  • Fixarea temporizatorului - Fixarea plantei pentru a face setările "SetTimer" și "SetTimerEx" mai exacte.

Acest software de testare scris de o echipă mică în timpul lor liber, poate există erori (ca în orice software). Acest software are scopul de a repara erorile, nu le numesc, dar pot exista și erori.

Cauza cea mai probabilă de erori este dezactivarea unor remedii. Unele soluții sunt interdependente și TREBUIE să funcționeze chiar și atunci când patch-urile asociate sunt dezactivate, nu fiecare combinație a fost testată. Există literalmente miliarde de combinații posibile - dacă găsiți una care nu compilează sau nu funcționează, vă rugăm să ne spuneți.

În ceea ce privește traducerea
Cunoașterea normală a limbii engleze nu am, tradus în grabă, astfel încât textul să fie greșit. Puteți raporta aceste erori în acest thread.

descărcare
  • Cea mai recentă versiune pe care o puteți găsi întotdeauna pe GitHub.

Mesaj de la Glant

Și există vreo idee cum să remediem? Am încercat eu să scriu o cârjă, dar nu încă.
Iată ce am:
- funcția de interceptare GivePlayerWeapon, SetPlayerAremdWeapon, ResetPlayerWeapons, și se păstrează variabilele weaponid, iar în cazul în care la toate ResetPlayerWeapons reset.
- Interceptarea funcției GetPlayerWeapon și în ea pentru a returna o valoare din variabila

Mesaj de la Glant

Dar totul depinde de un singur lucru mic, așa cum am scris în Githabe, 3 tipuri de arme (Uzi, MP-5 și TEC-9) sunt în mâinile „automat“, atunci când urcarea în mașină. „Automat“, în ghilimele, pentru că nu este întotdeauna cazul, acest lucru se întâmplă foarte rar.

Este posibil să forțezi să schimbi arma pe mașină automată la aterizare întotdeauna, atunci problemele nu vor fi.
Nu uita de parașută, în măsura în care îmi amintesc, este îndepărtată la îmbarcarea la transport.

Fixați pe GetPlayerWeapon (va fi mai precis să spunem că este terminat, pentru că acum a fost doar fix pe SetPlayerArmedWeapon în mașină:

Pentru fixarea SetPlayerArmedWeapon în acest fukntsii interceptor weaponid înregistrate în variabilele numai în cazul în care jucătorul este transportul. Și când jucătorul părăsește, antiderapant -1. Aceeași valoare este setată în mod implicit atunci când conectați player-ul. La această acorde atenție peprehvatchik GetPlayerWeapon: în cazul în care costurile variabile -1, apoi a reveni funcția inițială, sau valoarea variabilei noastre.
Fixul meu aderă la același principiu și tocmai am adăugat:

stoc FIXES_GivePlayerWeapon (playerid, armament, munitie)
new vid = GetPlayerVehicleID;

dacă (vid)
// codul unei alte remedii

#if FIX_GetPlayerWeapon
#if FIXES_Single
FIXES_gsPlayerWeapon # 91; playerid # 93; = arma;
#else
SetPVarInt (playerul FIXES_pvarPlayerWeapon.Weaponid);
# endif
# endif
>
>


// Interceptor nou
#if definit _ALS_ResetPlayerWeapon
#error _ALS_ResetPlayerWeaponuri definite
# endif
nativ BAD_ResetPlayerWeapons (playerid) = ResetPlayerWeapons;

stoc FIXES_ResetPlayerWeapon (jucatorid)
<
dacă (IsPlayerInAnyVehicle (playerid))
<
#if FIXES_Single
FIXES_gsPlayerWeapon # 91; playerid # 93; = 0;
#else
SetPVarInt (playerul FIXES_pvarPlayerWeapon 0);
# endif
>

întoarcere ResetPlayerWeapons (playerid);
>
#define _ALS_ResetPlayerWeapons
#define ResetPlayerWeapons FIXES_ResetPlayerWeapons

public OnPlayerStateChange (jucător nou.
// codul unei alte remedii

// ====================
// BEGIN: GetPlayerWeapon
// ====================
#if FIX_GetPlayerWeapon
dacă (newstate == PLAYER_STATE_DRIVER)
arma nouă. muniție;
// Micro SMG / Uzi, MP5, TEC-9 sunt în al patrulea slot
GetPlayerWeaponData (arma jucătorului 4. Ammo);
dacă (arma)
SetPlayerArmedWeapon (playerid.Weapon);

#if definit FIXES_Single
FIXES_gsPlayerWeapon # 91; playerid # 93; = arma;
#else
SetPVarInt (playerul FIXES_pvarPlayerWeapon.Weaponid);
# endif
>
>
# endif
// ====================
// END: GetPlayerWeapon
// ====================
>


P.S Cu o parașută nu este nevoie să deranjez, deoarece este eliminat numai atunci când un jucător stă în mod deliberat în jos, iar în acest timp este stocat pumnul (id 0) în sine. Și când parașuta inconștient „rămâne în mâinile.“

Articole similare