Eiti į turinį

Archyvuojama

Ši tema nuo šiol archyvuojama ir jos nebegalima komentuoti.

Petras_Antrasis

Drive-By H bugas

Rekomenduoti pranešimai

Dar nei vieno serverio nemačiau kur nebūtų šito bugo: jei su būdamas su ginklu pradedi daryt drive-by iš keleivio vietos (paspaudi H), neeina sugrįžt atgal į mašiną, gi yra fixas seniausiai:

new gDriveByWeapon[MAX_PLAYERS];
new bool:gDriveBy[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
  	//Jeigu žaidėjas atsijungtų sugrįžimo į mašiną animacijos eigoje, gDriveBy[playerid] liktų true, ir tada
  	//Pirmas bandymas padaryt drive-by būtų bugovas xd
  	gDriveBy[playerid] = false;
	return 1; 
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	if ((newkeys & KEY_CROUCH) && !(oldkeys & KEY_CROUCH) && GetPlayerState(playerid) == PLAYER_STATE_PASSENGER && 
        GetPlayerCameraMode(playerid) == 55 && gDriveBy[playerid] == false)
	{
      	//Jeigu žaidėjas paspaudžia H, yra mašinos keleivis, jam galioja keleivio drive-by kameros rėžimas(54).
      	//Norint, kad sugrįžimo į mašiną animacija įvyktų vieną kartą, ir kad negalėtų žaidėjas startint timerio (DriveBy funkcijai) daug kartų
      	//Reikia kažkaip patikrinti ar sugrįžimas į mašiną jau prasidėjęs, tam naudojamas gDriveBy[playerid] kintamasis
      	//(gDriveBy[playerid] nustatomas į true HideDriveByWeapon funkcijoje)
    	HideDriveByWeapon(playerid);
	}
	return 1;
}

static stock HideDriveByWeapon(playerid)
{
  	//Dėl man nežinomų priežaščių reikia nustatyti pasirinktą žaidėjo ginklą kaip kumštį
  	//Ir po 500ms, sugrįžimo į mašiną animacijai pasibaigus, sugrąžinti ankščiau pasirinktą ginklą į rankas
	gDriveByWeapon[playerid] = GetPlayerWeapon(playerid),
	gDriveBy[playerid] = true,
	SetPlayerArmedWeapon(playerid, 0),
 	ApplyAnimation(playerid, "PED", "CAR_GETIN_RHS", 4.1, 0, 0, 0, 0, 1, 1),
	SetTimerEx("DriveBy", 500, 0, "i", playerid);
}

forward DriveBy(playerid);
public DriveBy(playerid)
{
  	//Sugrįžimo į mašiną pabaiga, atgal paimamas ginklas
  	//Jeigu žaidėjas per animacijos eigą išliptų iš mašinos, jis pasikeistų ginklą, ir čia mes jį pakeistume atgal būtų nekažką xD
  	//Tad reik patikrint ar žaidėjas keleivis
	if (GetPlayerState(playerid) == PLAYER_STATE_PASSENGER)
	{
		SetPlayerArmedWeapon(playerid, gDriveByWeapon[playerid]);
	}
  	gDriveBy = false;
	return 1;
}

//Ištraukta iš: https://github.com/Open-GTO/sa-mp-fixes (fixes.inc)

 

Arba gali būt, kad padarytas kitas mygtukas atšaukt drive-by... Bet tokio neradau... Jei toks yra tai aš debilas :D

 

Šitą fixą ištraukiau iš include'o, kur ištaisyta labai daug sa-mp'o bugų: https://github.com/Open-GTO/sa-mp-fixes. Šiek tiek perrašiau, kad nebūtų scriptas priklausomas nuo to include'o (ir ištyrinėjau :D), pats naudoju visą include failą, tad šito kodo netestinau, yra labai mažas šansas, kad kažką iš ten praleidau (naudojau ctrl+f), sekmės Bumeriui ir kitiems naudojant :D

 

Nuoroda į komentarą
Dalintis kitose svetainėse

Jo pastebėjau kai padarė atnaujinimą, kad galima pro langą šaudyt su 9mm pistoletu ir negali grįžt į mašina. Dar 1 fignia, kad jei netyčia saugioj zonoj šauni, būni šaudymo pro langą pozicijoj ir automatiškai slepia ginklą, tai reikia persėst ir vėl išsitraukt pistoletą.

Nuoroda į komentarą
Dalintis kitose svetainėse

Svečias
Šios temos nebegalima komentuoti.


  • Paskutiniai lankytojai   0 nariai(-ių)

    • Šio puslapio nežiūri nė vienas registruotas narys.
×
×
  • Sukurti naują...