Peršokti į turinį

[Tutorial] Nejudančios transporto priemonės ir anti mass car spawn


aurimasko

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3336 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki.
 
Manau, kad ne tik man žaidžiant bet kokiame serveryje atsiranda tokių idiotų, kurie paima ir išstumdo visas mašinas arba dar blogiau - nustumia tavo nuosavą mašiną į vandenį. Ir šiaip nelogiška, kad tiesiog bėgdamas į mašiną gali ją stumdyti.
 
Tad nusprendžiau parašyti scriptą, kuris neleistų judinti mašinų žaidėjams.
Tai padaryti yra du pagrindiniai būdai:

  • Jei mašina yra nustumta nuo paskutines pozicijos tuomet atstatome poziciją.
  • Jei žaidėjas bando stumti mašiną, tai sustabdome jo judėjimą.

Iš pradžių bandžiau daryti pirmuoju būdu, tačiau susidūriau su keliomis problemomis - SAMP'e neįmanoma nustatyti mašinos pasisukimo kampo, todėl jei mašina stovi ant kokio šlaito ar kalno, tai ją pastūmus jį atsistatys atgal, tačiau mašina sulys į objektus. Tai yra pagrindinė problema.
 
Tuomet sugalvojau antrą būdą, tai tiesiog nutraukti žaidėjo animacijas, jei jis stumdo mašiną. Tai galbūt šiek tiek darko estetinį vaizdą, nes žaidėjas lyg bando bėgti, bet vėl sustoja, tačiau labai gerai atlieka mūsų norimą funkciją. Vienintelis minusas tas, kad šiuo būdu dviračius, motociklus ir spėju kitas labai smulkias (rc cars, priekabos ir t.t.) transporto priemones galima šiek tiek stumdyti. Aišku, vairuojant kitą transportą, niekas nesikeičia - stumdyti galima viską.

Taip pat šis kodas atlieka ir Anti mass car spawn bei anti vehicle teleport to you funkcijas. Jei žaidėjas bando teleportuoti mašiną pas save, tuomet ją atstato į tą pačia poziciją, iš kuriuos ji buvo paimta.
 
Na, einame prie kodo dalies.
 
1. Susikuriam kintamuosius:

// Mašinų kintamieji
enum eVehicleInfo
{
	Float: fVehPos[3], // mašinos koordinates
	Float: fAngle, // mašinos Z pasisukimo kampas
	bool: bUnVehicleUpdateCheck, // kintamasis, kuriuo tikrinsime ar mašiną galima stumdyti (apie tai vėliau)
	bool: bVehicleUpdateCheck, // kintamasis, kuriuo tikrinsime ar galima atnaujinti mašinos pozicija (apie tai vėliau)
	bool: bUsed, // kintamasis, kuriuo tikrinsime ar mašina jau naudota.
	iLastDriverExitTime // paskutinio vairuotojo išlipimo laikas
}
new vInfo[MAX_VEHICLES+1][eVehicleInfo];

// Žaidėjo kintamieji
enum ePlayerInfo
{
	iCarEnterTime, // įlipimo į mašiną laikas
	iLastCarID, // paskutinės vairuotos mašinos ID
	bool: bCarMassSpawnCheater // ar užfiksuotas masinis mašinių teleportavimas
}
new pInfo[MAX_PLAYERS][ePlayerInfo];

Aš kintamuosius kuriu enum'e, nes taip man yra patogiau, tačiau galite sukurti kaip norite arba integruoti į jau esamus enum (playerDB, vehicleDB ir tt).

 

2. Kuriame ir redaguojame stockus, funkcijas:

// Stockas, skirtas gauti mašinos greiti pagal jo velocity.
stock Float: GetVehicleSpeed(vehicleid, Float: vel_x = -1.0, Float: vel_y = -1.0, Float: vel_z = -1.0)
{
	if(vel_x == -1.0)
		GetVehicleVelocity(vehicleid, vel_x, vel_y, vel_z);

	vel_x *= vel_x, vel_y *= vel_y, vel_z *= vel_z;
	return floatsqroot(vel_x + vel_y + vel_z) * 200.0;
}

// Stockas, kuris tikrina ar transporto priemonė nėra specifinė (apie tai vėliau)
stock isVehicleSpecific(vehicleid)
{
	if(!IsValidVehicle(vehicleid))
	    return 0;
	    
	switch(GetVehicleModel(vehicleid))
	{
	    case 449, 537, 538, 553, 569, 570, 577, 592, 608:
	        return 1;
	        
		default:
		    return 0;
	}
	return 0;
}

// stockas, kuris tikrina ar transporto priemonė nėra laivas.
stock isVehicleBoat(vehicleid)
{
	if(!IsValidVehicle(vehicleid))
	    return 0;

	switch(GetVehicleModel(vehicleid))
	{
		case 430, 446, 452, 453, 454, 472,473, 484,493, 595:
			return 1;
		default:
			return 0;
	}
	return 0;
}

// Perkuriame PutPlayerInVehicle funkciją, jog scriptas žinotų, jog žaidėjas įlipo į mašiną normaliu būdu (ne hack'ais).
stock _PutPlayerInVehicle(playerid, vehicleid, seatid)
{
	if(seatid == 0)
		pInfo[playerid][iCarEnterTime] += 221;

	return PutPlayerInVehicle(playerid, vehicleid, seatid);
}

#if defined _ALS_PutPlayerInVehicle
	#undef PutPlayerInVehicle
#else
	#define _ALS_PutPlayerInVehicle
#endif
#define PutPlayerInVehicle _PutPlayerInVehicle

// Perkuriame PutPlayerInVehicle funkciją, jog scriptas žinotų, jog žaidėjas paliko mašiną normaliu būdu (ne hack'ais).
stock _RemovePlayerFromVehicle(playerid, vehicleid)
{
	pInfo[playerid][iCarEnterTime] += 221;
	return RemovePlayerFromVehicle(playerid, vehicleid);
}

#if defined _ALS_RemovePlayerFromVehicle
	#undef RemovePlayerFromVehicle
#else
	#define _ALS_RemovePlayerFromVehicle
#endif
#define RemovePlayerFromVehicle _RemovePlayerFromVehicle

// Perkuriame CreateVehicle funkciją, kad galėtume surašyti koordinates ir kitą informaciją į kintamuosius.
forward _CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay);
public _CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay)
{
	new vehicleid = CreateVehicle(vehicletype, x, y, z, rotation, color1, color2, respawn_delay); // sukuriame transporto priemonę.

        vInfo[vehicleid][bUsed] = false; // nustatome, jog ji dar nebuvo naudota.
	vInfo[vehicleid][fVehPos][0] = x; // įrašome jos X koordinatę į kintamajį.
	vInfo[vehicleid][fVehPos][1] = y; // įrašome jos Y koordinatę į kintamajį.
	vInfo[vehicleid][fVehPos][2] = z; // įrašome jos Z koordinatę į kintamajį.
	vInfo[vehicleid][fAngle] = rotation; // įrašome jos Z pasisukimo kampą į kintamajį.
	vInfo[vehicleid][bUnVehicleUpdateCheck]= false; // nustatome, jog mašinos duomenų negalima atnaujinti, taip pat jos negalima stumdyti (apie tai vėliau)

	return vehicleid;
}
#if defined _ALS_CreateVehicle
	#undef CreateVehicle
#else
	#define _ALS_CreateVehicle
#endif
#define CreateVehicle _CreateVehicle

// Perkuriame AddStaticVehicle funkciją, kad galėtume surašyti koordinates ir kitą informaciją į kintamuosius.
forward _AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2);
public _AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2)
{
	new vehicleid = AddStaticVehicle(modelid, spawn_x, spawn_y, spawn_z, angle, color1, color2); // sukuriame transporto priemonę.

	vInfo[vehicleid][bUsed] = false; // nustatome, jog ji dar nebuvo naudota.
	vInfo[vehicleid][fVehPos][0] = spawn_x; // įrašome jos X koordinatę į kintamajį.
	vInfo[vehicleid][fVehPos][1] = spawn_y; // įrašome jos Y koordinatę į kintamajį.
	vInfo[vehicleid][fVehPos][2] = spawn_z; // įrašome jos Z koordinatę į kintamajį.
	vInfo[vehicleid][fAngle] = angle; // įrašome jos Z pasisukimo kampą į kintamajį.
	vInfo[vehicleid][bUnVehicleUpdateCheck]= false; // nustatome, jog mašinos duomenų negalima atnaujinti, taip pat jos negalima stumdyti (apie tai vėliau)

	return vehicleid;
}
#if defined _ALS_AddStaticVehicle
	#undef AddStaticVehicle
#else
	#define _ALS_AddStaticVehicle
#endif
#define AddStaticVehicle _AddStaticVehicle

// Perkuriame AddStaticVehicleEx funkciją, kad galėtume surašyti koordinates ir kitą informaciją į kintamuosius.
forward _AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2, respawn_delay);
public _AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2, respawn_delay)
{
	new vehicleid = AddStaticVehicleEx(modelid, spawn_x, spawn_y,spawn_z, angle, color1, color2, respawn_delay); // sukuriame transporto priemonę.

	vInfo[vehicleid][bUsed] = false; // nustatome, jog ji dar nebuvo naudota.
	vInfo[vehicleid][fVehPos][0] = spawn_x; // įrašome jos X koordinatę į kintamajį.
	vInfo[vehicleid][fVehPos][1] = spawn_y; // įrašome jos Y koordinatę į kintamajį.
	vInfo[vehicleid][fVehPos][2] = spawn_z; // įrašome jos Z koordinatę į kintamajį.
	vInfo[vehicleid][fAngle] = angle; // įrašome jos Z pasisukimo kampą į kintamajį.
	vInfo[vehicleid][bUnVehicleUpdateCheck]= false; // nustatome, jog mašinos duomenų negalima atnaujinti, taip pat jos negalima stumdyti (apie tai vėliau)

	return vehicleid;
}
#if defined _ALS_AddStaticVehicleEx
	#undef AddStaticVehicleEx
#else
	#define _ALS_AddStaticVehicleEx
#endif
#define AddStaticVehicleEx _AddStaticVehicleEx

// Redaguojam SetPlayerPos funkciją
stock SetPos(playerid, Float: posX, Float: posY, Float: posZ)
{
    if(IsPlayerInAnyVehicle(playerid)) // jei žaidėjas mašinoje.
        pInfo[playerid][iCarEnterTime] += 221; // nustatome, kad jis išlipo normaliu būdu.
        
    SetPlayerPos(playerid, posX, posY, posZ);
}
#if defined _ALS_SetPlayerPos
    #undef SetPlayerPos
#else
    #define _ALS_SetPlayerPos
#endif
#define SetPlayerPos SetPos

// Redaguojam SetVehiclePos funkcija.
stock SetVehPos(vehicleid, Float: posX, Float: posY, Float: posZ)
{
    // Nustatome kintamųjų reikšmes.
    vInfo[vehicleid][fPos][0] = posX;
    vInfo[vehicleid][fPos][1] = pos;
    vInfo[vehicleid][fPos][2] = posZ;
        
    SetVehiclePos(vehicleid, posX, posY, posZ);
}

#if defined _ALS_SetVehiclePos
    #undef SetVehiclePos
#else
    #define _ALS_SetVehiclePos
#endif
#define SetVehiclePos SetVehPos

// Redaguojam SetVehicleZAngle funkciją
stock SetVehZAngle(vehicleid, Float: angle)
{
   // Nustatom kintamojo reikšmę.
   vInfo[vehicleid][fAngle] = angle;
   SetVehicleZAngle(vehicleid, angle);
}

#if defined _ALS_SetVehicleZAngle
    #undef SetVehicleZAngle
#else
    #define _ALS_SetVehicleZAngle
#endif
#define SetVehicleZAngle SetVehZAngle

Visas šias funkcijas reiktų dėti failo pradžioje, prieš OnGameModeInit callback'ą.

 

 

3. Jei transporto priemonė sprogsta ir atsiranda iš naujo arba kitu būdu respawninasi, turime nustatyti, jog ji nėra naudota:

public OnVehicleSpawn(vehicleid) // kai transporto priemonė atsispawnina.
{
    vInfo[vehicleid][bUsed] = false; // nustatome, jog ji dar nenaudota.
    return 1;
}

4. Dabar mums reikia tam tikrus duomenis nustatyti, kai žaidėjas įlipa į transporto priemonę ir kai išlipa:

public OnPlayerStateChange(playerid, newstate, oldstate) // kai žaidėjo būsena pasikeičia.
{
        // Tikriname ar žaidėjas tapo vairuotoju.
	if(newstate == PLAYER_STATE_DRIVER)
	{
	       new vehicleid = GetPlayerVehicleID(playerid); // gauname jo mašinos ID.

		if(vehicleid)
		{
		    pInfo[playerid][bCarMassSpawnCheater] = false; // nustatome, jog jis nenaudoja mašinų teleportavimo hack'ų.

      		    pInfo[playerid][iLastCarID] = vehicleid; // nustatome paskutinę vairuotą transporto priemonę.
		    pInfo[playerid][iCarEnterTime] = GetTickCount(); // įrašome įlipimo į mašiną laiką.

		    vInfo[vehicleid][bUsed] = true; // nustatome, jog mašina yra panaudota/naudojama.
		    vInfo[vehicleid][bVehicleUpdateCheck] = false; // nustatome, kad mašinos pozicijos kintamieji bevažiuojant atnaujinami nebus.
		    vInfo[vehicleid][iLastDriverExitTime] = 0; // įrašomas paskutinio vairuotojo išlipimo laikas (kadangi jis viduje, tai 0).

                    // Iškviečiame taimer'į, kuriuo leisime naujinti mašinos pozicijos kintamuosius bevažiuojant (apie tai vėliau).
                    SetTimerEx("timerCanUpdateVehicle", 1500, 0, "d", vehicleid);
		}
	}
	else if(oldstate == PLAYER_STATE_DRIVER) // jei žaidėjas išlipo iš vairuotojo vietos.
	{
                // Tikrina ar žaidėjas išlipo tinkamai, be jokių hack'ų (apie šį tikrinimo būdą parašysiu pabaigoje).
		if(GetTickCount() - pInfo[playerid][iCarEnterTime] >= 220)
		    vInfo[pInfo[playerid][iLastCarID]][bUnVehicleUpdateCheck] = false; // jei taip, nustatome jog mašinos stumdyti neįmanoma ir jog nebūtų tikrinama ar ji pastumta (apie tai vėliau).
		else // jei žaidėjas išlipo netinkamai (per greitai).
		    pInfo[playerid][bCarMassSpawnCheater] = true; // nustatome, jog jis naudojo hack'ą.
	}
	return 1;
}

// Timer'is
forward timerCanUpdateVehicle(vehicleid);
public timerCanUpdateVehicle(vehicleid)
    vInfo[vehicleid][bVehicleUpdateCheck] = true; // nustatome, jog galima atnaujinti mašinos pozicijos kintamuosius bevažiuojant.


4. Taigi, žaidėjas įlipo į mašiną, pradėjo važiuoti. Bet jos pozicijos kintamieji tai nesikeičia. Todėl turime keisti juos su kiekvienu judėsiu. Kam buvo reikalingas tas timer'is ir kintamųjų atnaujinimo blokavimas?

Todėl, kad tam tikri mašinų teleportavimo hack'ai veikia taip, kad hack'eris įlipa į mašiną, nuteleportuoja ją kažkur, išlipa ir nusiteleportuoja į prieš tai buvusią vietą. Tai vyksta labai greitai, tačiau script'as tą fiksuoja. Todėl tam, kad mašinos pozicijos kintamieji nesusigadintų ją teleportuojant kažkur kitur, 1.5 sek. po žaidėjo įlipimo nėra atnaujinami mašinos pozicijos kintamieji.

public OnPlayerUpdate(playerid)
{
	if(IsPlayerInAnyVehicle(playerid)) // tikrinam ar žaidėjas mašinoj.
	{
	    new vehicleid = GetPlayerVehicleID(playerid); // gauname mašinos ID.
	    
	    if(GetPlayerVehicleSeat(playerid) == 0) // tikrinam ar žaidėjas mašinoje.
	    {
	        if(vInfo[vehicleid][bVehicleUpdateCheck]) // tikrinam ar galima atnaujinti duomenis.
	        {
	            GetVehiclePos(vehicleid, vInfo[vehicleid][fVehPos][0], vInfo[vehicleid][fVehPos][1], vInfo[vehicleid][fVehPos][2]); // atnaujinam pozicijos kintamuosius.
		    GetVehicleZAngle(vehicleid, vInfo[vehicleid][fAngle // atnaujinam Z pasukimo kampo kintamajį.
		}
	    }
	}
	return 1;
}

Kaip matote kintamųjų atnaujinimas vyksta tik tada, jei yra leidžiama.

 

5. Priėjome prie svarbiausios vietos - mašinos pastumimo fiksavimo ir anuliavimo.

Tam yra naudojamas OnUnoccupiedVehicleUpdate callback'as.

Šis callback'as iškviečiamas tuomet, kai kažkokia tuščia (be vairuotojo) transporto priemonė juda kito žaidėjo pagalba. Tai yra: žaidėjas stumia ją pėščias arba su mašina, žaidėjas yra arti tos mašinos, kai ji juda ir taip toliau.

 

Dabar paaiškinsiu ką reiškią bUnVehicleUpdateCheck kintamasis arba užrašas "nustatome, jog mašinos stumdyti neįmanoma". Tai nereiškia, kad jos ištikrųju neįmanoma pastumti, tai tiesiog nurodo, kad kol kintamasis bUnVehicleUpdateCheck yra false, tol jokie tikrinimai, ar mašina buvo pastumta nebus atliekami. Šis kintamasis turi reikšme "false" tada, kai:

  • Po mašinos sukūrimo/respawn'o ji krenta ore, ridenasi nuo kalvos ar kaip kitaip keičia savo numatytą poziciją.
  • Žaidėjui išlipus iš mašinos (normaliu būdu).

Jei bUnVehicleUpdateCheck yra false, tuomet yra atnaujinami mašinos pozicijos kintamieji į naują poziciją tol, kol mašinos greitis yra didesnis už 4,5 arba 2,0. Kodėl 4,5 ir 2,0 ? Todėl, kad pastebėjau, kad jei mašina sukurta naujai krenta iš kažkur (pvz sukurta ore arba ant ridenasi nuo kalno), tuomet paskutinis callback'o iškvietimas yra maždaug kai greitis yra apie 4.3 (skirtingoms transporto priemonėms skirtingas, pvz Infernus - 1.8, Bike - 4.4. Bet kad išvengti šiokių tokių nesklandumų, ėmiau 4.5).

Jei mašinos greitis yra mažesnis už 4,5 (jei mašina nenaudota) arba mažesnis už 2,0 (jei naudota), tuomet kintamasis bUnVehicleUpdateCheck nustatomas į true ir jau su sekančiu callback iškvietimu bus tikrinama ar mašina yra pastumta žaidėjo.

public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z)
{
   // Jei transporto priemonė yra laivas arba specifinė (apie jas vėliau), tuomet jokie tikrinimai nėra atliekami. Juk laivų stumdyti neįmanoma.    
   if(isVehicleBoat(vehicleid) || isVehicleSpecific(vehicleid))
	    return 1;

    // Sukuriame kintamajį, pagal kurį spręsime ar reikia atnaujinti mašinos kintamuosius ar ne.
    new bool: bUpdateVars = false;

	if(vInfo[vehicleid][bUnVehicleUpdateCheck]) // tikrinam, ar mašiną galima stumdyti
	{
		bUpdateVars = false; // nustatome, kad mašinos informacijos atnaujint nereikės.

                // Tikrinam ar žaidėjas už vairo, jei taip - true, jei ne - false
		new bool: bPlayerIsDriver = false;

		if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
		    bPlayerIsDriver = true;

                // Randame atstumą tarp mašinos ir jos paskutinės tikros buvimo vietos.
		new Float: fVehicleDistance;
		fVehicleDistance = GetVehicleDistanceFromPoint(vehicleid, vInfo[vehicleid][fVehPos][0], vInfo[vehicleid][fVehPos][1], vInfo[vehicleid][fVehPos][2]);
                /* Tikriname, ar žaidėjas buvo panaudojęs kažkokius masinio mašinų teleportavimo hack'us.
                Arba jis nėra už vairo ir distancija tarp mašinos ir jos tikros buvimo vietos yra didesnė už 25.0 (tik su hack'ais įmanoma) ARBA atstumas tarp žaidėjo ir naujos mašinos buvimo vietos mažesnis už 5.0 bei žaidėjo greitis didesnis už 0.2 (t.y. žaidėjas yra labai arti mašinos ir juda (greičiausiai stumia mašiną)).
                */
		if(pInfo[playerid][bCarMassSpawnCheater] || (!bPlayerIsDriver && (fVehicleDistance >= 25.0 || (GetPlayerDistanceFromPoint(playerid, new_x, new_y, new_z) < 5.0 && GetPlayerSpeed(playerid) > 0.2))))
		{
                        // Jei buvo panaudoti mašinų teleportavimo hack'ai.
			if(pInfo[playerid][bCarMassSpawnCheater] || fVehicleDistance >= 40.0)
			{
                            // Atstatome mašinos pozicija ir Z pasukimo kampą į tokius kokie buvo prieš naudojant cheatus.
			    SetVehiclePos(vehicleid, vInfo[vehicleid][fVehPos][0], vInfo[vehicleid][fVehPos][1], vInfo[vehicleid][fVehPos][2]);
			    SetVehicleZAngle(vehicleid, vInfo[vehicleid][fAngle]);
			    return 1;
			}

                        // Randame dabartinį mašinos pasisukimo kampą Z.
			new Float: fAngl;
			GetVehicleZAngle(vehicleid, fAngl);
			
                        // Tikrinam mašina pasukta daugiau nei 0.2 kampu arba pastumta daugiau nei 0.2 nuo tikrosios vietos.
			if(floatabs(fAngl - vInfo[vehicleid][fAngle]) >= 0.2 || fVehicleDistance >= 0.2)
			{
                                // Jei taip, tuomet sustabdome žaidėją nuo bėgimo ir nerodome nežymaus mašinos pajudėjimo iš vietos kitiems žaidėjams.
				ClearAnimations(playerid, 1);
    			        return 0;
			}
		}
		else if(bPlayerIsDriver) // jeigu kažkas kitaip nei buvusi sąlyga ir žaidėjas yra už vairo (stumia mašiną su kita mašina ar pan).
			bUpdateVars = true; // nustatome, jog reikės atnaujinti mašinos informaciją.
	}
	else // jei neįmanoma stumdyti mašinos.
	    bUpdateVars = true; // tuomet nustatome, kad reikės atnaujinti mašinos infromaciją.

        // Jei reikia atnaujinti mašinos informaciją.
	if(bUpdateVars)
	{
                // Atnaujinam mašinos poziciją ir Z kampą į naują.
		vInfo[vehicleid][fVehPos][0] = new_x;
		vInfo[vehicleid][fVehPos][1] = new_y;
		vInfo[vehicleid][fVehPos][2] = new_z;
		GetVehicleZAngle(vehicleid, vInfo[vehicleid][fAngle]);
		bUpdateVars = false;

                // Tikrinam: jei mašinos negalima stumdyti ir jos greitis mažesnis už 4.5 bei ji dar nenaudota ARBA mašinos greitis mažesnis už 2.5 ir ji jau naudota, tuomet nustatome, jog mašiną galima stumdyti.
	        new Float: fSpeed = GetVehicleSpeed(vehicleid, vel_x, vel_y, vel_z);

		if(!vInfo[vehicleid][bUnVehicleUpdateCheck])
		    if((fSpeed < 4.5 && !vInfo[vehicleid][bUsed]) || (fSpeed < 2.5 && vInfo[vehicleid][bUsed]))
            	          vInfo[vehicleid][bUnVehicleUpdateCheck] = true;

		return 1;
	}
	return 1;
}

Taigi, jei kažko nepamiršau, tai mūsų scriptas baigtas. Beje, kaip jau turbūt pastebėjote dažnai naudojau žodį "mašina". Tikiuosi visi supranta, kad noriu pasakyti "Transporto priemonė".

 

Kas yra tos specifinės transporto priemonės? Tai toks transportas, kurio aš manau neįmanoma pajudinti arba logiška, jog galima judinti: tramvajus, traukinio lokomotyvas, traukinio lokomotyvas 2, Nevada lėktuvas, traukinio vagonas, traukinio vagonas 2, AT400, Andromada ir laiptai į lėktuvą ( :D).

 

Na, sistema kaip ir baigta, tik joje yra keli niuansai:

  • Kaip jau minėjau, dviračius, motociklus (šiektiek) ir smulkias transporto priemones įmanoma judinti, tačiau ne taip stipriai ir lengvai kaip be sistemos.
  • Kadangi transporto priemonių dydžiai skiriasi, tai skiriasi ir distancijos. Tarkime esant prie Infernus galo, atstumas nuo mašinos centro iki žaidėjo yra apie 5.0. O stovint šalia NRG galo, atstumas nuo centro iki žaidėjo yra gal 2.0. Todėl, jei bėgdami užkliūdysite motociklą, dviratį ar dar kažką, kas gali daug judėti (nuvirsti ar slysti ar dar kažkas), tuomet gali būti, jog jūsų judėjimą stabdys, net ir neesat šalia tos transporto priemonės (bet esant kažkur šalia). Galbūt ateityje šį dalyką ištaisysiu.
  • Pastebėjau, jog spawninat mašiną ore šalia savęs, skiriasi greitis paskutiniame callback iškvietime. Na įsivaizduokime, kad su /vehicle komanda atsispawninome Infernus šalia saves, tačiau ore. Ji krenta ant žemės ir nuolat yra iškviečiamas OnUnoccupiedVehicleUpdate. Jis iškviečiamas tol, kol mašina nustoja judėti. Bet paskutiniame iškvietime mašinos kritimo greitis yra ne 0, o 1.8-9. Tačiau, spawninant dviratį šalią savęs ore, paskutiniame iškvietime jo greitis yra apie 4.0.   Tas, kas iš to? Realiai beveik jokio skirtumo, tačiau, jei cheater'is atsiteleportuos šį infernusą prie savęs, tuomet sistema atiteleportuos jį atgal į vietą, tačiau jis atsiras ne ant žemės, bet šiektiek ore (nes jos kintamųjų atnaujinimas buvo sustabdytas ne jau esant ant žemės, o esant truputį virš jos) ir tik tada nukris.  Na, ištikrųjų labai nedidelė smulkmena, tačiau galbūt šiektiek estetinis vaizdas gadinasi ir galbūt ateityje aš tai ištaisysiu.

 

Šioje sistemoje panaudojau vieną dalyką iš kitos sistemos - tikrinimą ar žaidėjas įlipo/išlipo į/iš transporto priemones normaliais būdais ar su hackais. Nuoroda: http://forum.sa-mp.com/showthread.php?t=303796

 

Na viskas, tutorialas baigtas. Tuos niuansus turbūt lengviau suprasti bandant script'ą serveryje, o ne skaitant :D Tikiuosi nebus per daug sudėtinga viską skaityti, nes kaip visada norėjau parašyt detaliai, bet dėl to galbūt gavosi sudėtingai.

 

Jei radote klaidų, trūksta kažkokio kodo dalies arba kažko nesuprantate - rašykite čia, nes tai ne tik tutorialas, bet dar ir kaip sistemos patikrinimas ( nes testavau būdamas vienas, tad gal kažkas ir neveikia :/).

Redaguota , nario aurimasko
Nuoroda į komentarą
Dalintis per kitą puslapį

SAMP'e neįmanoma nustatyti mašinos pasisukimo kampo - Kodėl taip teigi, jeigu tai įmanomą?

Galima išgauti pasisukimo kampą, kur stovi ratas, bagažinė, kapotas, langas - 100% . 10 klasės kursas.

Cool story bro. Manau kad jis kalba apie rootx, rooty, rootz o ne apie angle.

P.S. jis kalba apie nustatymą, o ne išgavimą.

Nuoroda į komentarą
Dalintis per kitą puslapį

Taip, kalbu apie nustatymą. Ir taip, apie rootx, y, z. Gal ne taip pavadinau

 

Tuomet tiksliai paaiškink ką tu nori padaryti, aš tai supratau, kad tu nori išgauti kaip mašina stovi ant pievos(kokiu kampu) ar dar kur nors?

 

Nes aš viską, ką kuriu dynamiškai ir nustatinėju, mašinas/objektus darau pagal laipsnius sin/cos pagalba.

Redaguota , nario Tehas
Nuoroda į komentarą
Dalintis per kitą puslapį

Taip reiktų išgauti kaip mašina stovi ant pievos. Nes jei nenustatysi mašinos rotacijos, tai gausis kad panaudojus SetVehiclePos toj vietoj, mašina atsistos horizontaliai ir įstrigs į pievos objektą.

 

Tai kaip pagal sin/cos gauti pasisukimą tai gal ir sugalvojau jau, bet kaip jį nustatyt?

Nuoroda į komentarą
Dalintis per kitą puslapį

Taip reiktų išgauti kaip mašina stovi ant pievos. Nes jei nenustatysi mašinos rotacijos, tai gausis kad panaudojus SetVehiclePos toj vietoj, mašina atsistos horizontaliai ir įstrigs į pievos objektą.

 

Tai kaip pagal sin/cos gauti pasisukimą tai gal ir sugalvojau jau, bet kaip jį nustatyt?

 

Nesuprantu "nustatymo" žodžio prasmės, tai jeigu tu išgauni ir turi tikslius duomenis, nes tokius tikrai gali gauti, tai ir nustatyti gali, kadangi įsirašai išgautus duomenis ir jie naujinasi, automatiškai ir statosi/saugosi.

 

Pirma išsigauk ir žiūrėkis, nes tai įmanoma.

Redaguota , nario Tehas
Nuoroda į komentarą
Dalintis per kitą puslapį

Man rodos jūs vienas kito nesuprantat. SAMP nėra galimybės išgauti ar tuo labiau panaudoti kitų mašinų kampų išskyrus yaw (SetVehicleZAngle()), daugiausiai ką šiuo atveju galima padaryti, tai šiek tiek padidinti Z koordinatę, kad mašina neįstrigtų į objektus.

 

Kodėl įvardini vien SAMP, kai į jį dar galima įterpti daug visko.. Reikia naudotis ir kitomis žiniomis. Tai ką gauni iš informatikos ir matematikos pamokų. Gali išgauti ar mašina pasisukus į pietryčius, pietvakarius, kad ir mašina apsivertus šonu,stogu, ją galima pastatyti ant ratų.

Redaguota , nario Tehas
Nuoroda į komentarą
Dalintis per kitą puslapį

Kodėl įvardini vien SAMP, kai į jį dar galima įterpti daug visko.. Reikia naudotis ir kitomis žiniomis. Tai ką gauni iš informatikos ir matematikos pamokų. Gali išgauti ar mašina pasisukus į pietryčius, pietvakarius, kad ir mašina apsivertus šonu,stogu, ją galima pastatyti ant ratų.

Yra includų, kurie nustato pitch/roll kampus, bet šiuo atveju tas nepadės, kadangi tų kampų panaudoti ir pritaikyti automobiliui paprasčiausiai neįmanoma, nes tokia funkcija neegzistuoja.

Redaguota , nario Justac
Nuoroda į komentarą
Dalintis per kitą puslapį

Yra includų, kurie nustato pitch/roll kampus, bet šiuo atveju tas nepadės, kadangi tų kampų panaudoti ir pritaikyti automobiliui paprasčiausiai neįmanoma, nes tokia funkcija neegzistuoja.

 

Pats nenaudoju jokių includu, ir sekmingai sužaidžiu. Tiekto, gana veltui diskutuoti.

Nuoroda į komentarą
Dalintis per kitą puslapį

O tai gal galėtum paaiškinti kaip padaryt, kad mašina atsispawnintų ne horizontaliai, o vertikaliai, jei sakai, kad žinai kaip?

 

Nori mašina pastatyti ant ratų iš belekokios pozicijos? Ar nori pastatyti ant bufferio tarkim stačią kaip dicką?

Jeigu nori iš normalios pozicijos mašiną spawnint vertikaliai, tai jau sakiau kaip daryt.

Redaguota , nario Tehas
Nuoroda į komentarą
Dalintis per kitą puslapį

Pateik kodą, man irgi įdomu pasidarė. :D

 

Nereikėjo net savo kodo duot, tarkim mašinos priekio pakelimas į orą:

JumpStartCar(vehicleid)
{
new Float:Xv, Float:Yv, Float:Zv, Float:absV;
    GetVehicleVelocity(vehicleid, Xv, Yv, Zv);
    absV = floatsqroot(floatpower(floatabs(Xv),2)+floatpower(floatabs(Yv),2)+floatpower(floatabs(Zv),2));
    if(absV < 0.04)
    {
new Float:Zangle;
GetVehicleZAngle(vehicleid, Zangle);
GetVehicleVelocity(vehicleid, Xv, Yv, Zv);
Xv = (0.11 * floatsin(Zangle, degrees));
Yv = (0.11 * floatcos(Zangle, degrees));
SetVehicleAngularVelocity(vehicleid, Yv, Xv, 0);
    }
    return 1;
}

Vartymai mašinų, galima net sukt ją ore ratu nuotoliniu valdymu 360 laipsnių, galima pastatyt ją ant 2 ratų šonu, tereikia pagalvot.

Redaguota , nario Tehas
Nuoroda į komentarą
Dalintis per kitą puslapį

Iš samp wiki:

This function has no effect on un-occupied vehicles and does not effect trains.

http://wiki.sa-mp.com/wiki/SetVehicleAngularVelocity

Tad šioje situacijoje tai netinka.

 

Pagalvok labiau, suprasi, kad galima ir be jos. Galimybė tikrinti pozicija prieš stumimą; pamesk į orą ir tam tikrą šoną mašiną kažkiek labiau tuomet, kad jai nereiktu landžioti kažkur. Nu išmąstysi, tai išmastysi, visko galima prigalvoti tavo situacijoje.

Nuoroda į komentarą
Dalintis per kitą puslapį

Tai jai mašina stovi ant kelio aš važiuoju su fura ir ja turiu nustumti ji į mane telinas tai vadinas geras sprendimas ?

Kodėl turim saugoti mašinos informacija kaskart kai žaidėjas Updeitinasi, neužtenka palaukti kol jis iš jos išlips ?

 

Ar mašina miršta vandenyje galima patikrinti išgavus z, arba yra spec vandenu zonų includai. Patikrinam ar ji mirus nebuvo naudota ar naudota prieš keles sek kai žaidėjas iš jos iššoko.

Jai iš mašinos žaidėjas išlips ore, tai kas kart ją telinsi atgal į ora, nes ji tuščia krenta ?

 

Nesakau perdaug nieko nes visi čytai turi būti sutvarkyti samp sided, ir tobulo sprendimo nėra, bet kartais gali būti daugiau problemų nei naudos.

Redaguota , nario Expert*
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3336 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


    • tarpininkai
    • tarpininkai
    • tarpininkai

    • apgavikai
    • apgavikai
    • apgavikai

  • Naujausios temos

  • Naujausi būsenos atnaujinimai
    • Nustatymai

    • spiritdust

      Sveiki‎

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

       ‎ ‎ ‎ ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ ‎ 

      ‎ ‎ ‎ 

      ‎ 

      ‎ 

    • So Good√ιק

      https://t.me/zedprofit

      Telegram grupė, kurioje dalinuosi naujausiais Uždarbiais, Airdrop'ais iš kurių galit uždirbti pinigų!

      Taip pat vyksta diskusijos apie Crypto, Forex, Trading bot'us.

      Dalinuosi visa info tam, kad uždirbtumėte ir jūs! 🤑

    • debista

      Parduodu

      csgoroll level 41

      RustClash level 66

      +csgo prime

      Pasiulimus siuskit discord

      @debista

       

       

       

    • yhiunkis

      pardavineju cs2 prime acc po 7,5e FA - premier ready

    • Bemwas

      **MystiqueRP: Naujas Pasaulis Lūkesčiams**

      Sveiki atvykę į MystiqueRP, kur sukuriame nepaprastą pasaulį, leidžiantį jums išgyventi savo svajones ir sukurti savo istoriją. Mūsų serveris siūlo išskirtinę FiveM roleplay patirtį, praturtintą detalių, įvairovės ir įtakos jūsų pasirinktam vaidmeniui.

      **Įvairių Veiklos Galimybių Sankirtoje**

      Nesvarbu, ar norite tapti miesto policininku, žvalgybininku, kurie tylioms gatvėms suteikia saugumą, ar prekybininku, kuris kūrelius savo imperiją, mūsų serveris suteikia platų vaidmenų pasirinkimą, kiekvienam žaidėjui atitinkant jo lūkesčius. Mūsų įvairovė leidžia jums įsitraukti į skirtingas veiklos sritis ir kurti savo pasaulį, kuris jums patinka.

      Išbaigta Ekonomika ir Turinio Sistemos

      Mūsų serverio ekonomika ir turinio sistemos yra subalansuotos ir giliai suprojektuotos, kad suteiktų jums autentišką patirtį. Nuo nekilnojamojo turto investicijų iki verslo verslo plėtros ir net legalių ir nelegalių sandėlių operavimo, galimybių gausa yra riba. Jūsų finansų valdymas, rinkos analizė ir verslo strategija yra pagrindiniai serverio aspektai, kurie jums padeda siekti sėkmės.

      Bendruomenės Dvasia ir Sąveika

      MystiqueRP yra ne tik žaidimo platforma, bet ir draugiška bendruomenė, kurioje prisijungę žaidėjai gali jaustis kaip namie. Mūsų administracija yra pasirengusi padėti, mokyti ir remti naujokus, siekdama užtikrinti, kad visi mūsų žaidėjai turėtų malonią ir įtraukiančią patirtį.

      Norėdami išlaikyti mūsų bendruomenės aktyvumą ir įdomumą, reguliariai organizuojame įvairius renginius, konkursus ir veiklas. Tai gali būti nuotykių ieškojimai, miesto festivaliai, automobilių lenktynės ar netgi nelegalių gaujų konfliktai. Kiekvienas renginys atneša naujų iššūkių ir skatina bendruomenės sąveiką.

      Prisijunkite prie MystiqueRP ir išbandykite gilias ir įtraukiančias FiveM roleplay patirtis, kurios neatskleidžia savo ribų ir leidžia jums būti, kuo tik norite!

      |Serverio discord| || https://discord.com/invite/mystique ||

  • Populiariausi nariai


×
×
  • Sukurti naują...