Kodas iš Story of Cities GM'o, kuris bus open source kai tik startuos kartu su Maze serverių topais :)
Kas čia per kodas?
Šis kodas padaro, kad policininko mašinai artėjant prie nusikaltelio mašinos, nusikaltėlio mašinos greitis mažėja priklausomai nuo to kiek laiko policininkas yra šalia nusikaltėlio. Tai sudaro sudėtingesnes sąlygas nusikaltusiam žaidėjui pabėgti, ir palengvina nusikaltėlių gaudymą policijai. :)
/*
* Nustatymai
*/
new const speedMultiplierPerUpdate = 0.4; // kiek % mašina suletės per atnaujinimą (0.4 = 40%)
new const updateTimer = 500; // kas kiek ms įvyks greičio atnaujinimas
new const Float:slowingEffectRange = 30.0; // kokiu atstumu reikia būti policininkui prie nusikaltėlio kad veiktu lėtėjimo efektas
/*
* Funkcija patikrinanti ar mašina priklauso policijai
*/
static isPoliceVehicle(vehicleid) {
if(/* įrašyti savo tikrinimą, pvz.: GetVehicleModel(vehicleid) == 562 */) {
return true; // mašina priklauso policijai
}
return false;
}
/*
* Funkcija patikrinanti ar žaidėjas yra nusikaltėlis
*/
static isPlayerWanted(playerid) {
if(/* įrašyti savo tikrinimą, pvz.: Player[playerid][Wanted] > 0 arba GetPlayerWantedLevel(playerid) > 0 */) {
return true; // žaidėjas yra nusikaltėlis
}
return false;
}
/*
* Toliau keisti nieko nebereikia
*/
static SlowNearbyWantedPlayers(policeVehicle) {
static Float:x, Float:y, Float:z;
GetVehiclePos(policeVehicle, x, y, z);
for(new i, j = GetMaxPlayers(); i < j; ++i) {
if(isPlayerWanted(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER) {
if(IsPlayerInRangeOfPoint(i, slowingEffectRange, x, y, z)) {
new wantedVehicle = GetPlayerVehicleID(i);
static Float:vx, Float:vy, Float:vz;
GetVehicleVelocity(wantedVehicle, vx, vy, vz);
vx -= vx * speedMultiplierPerUpdate;
vy -= vy * speedMultiplierPerUpdate;
vz -= vz * speedMultiplierPerUpdate;
SetVehicleVelocity(wantedVehicle, vx, vy, vz);
}
}
}
}
public OnPlayerUpdate(playerid) {
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
new playerVehicle = GetPlayerVehicleID(playerid);
if(isPoliceVehicle(playerVehicle)) {
static lastTickCount[MAX_PLAYERS];
if(GetTickCount() > lastTickCount[playerid] + updateTimer) {
SlowNearbyWantedPlayers(playerVehicle);
lastTickCount[playerid] = GetTickCount(); // + (bug fix 03.31 23:21)
}
}
}
return true;
}
Jeigu radot klaidų praneškit :)
Ron prieš 9 metus
Jei nuojauta manęs neapgauna, tai čia turbūt tai ką šią minutę galima pavadinti unikalumu iš sistemos pusės ;) Šaunuolis!
NeRaimisR prieš 9 metus
Say thanks for me
"lastTickCount[playerid] = GetTickCount(); // + (bug fix 03.31 23:21)" faglord.xd
Xavi^ prieš 9 metus
Turbūt buvau per kvailas ir per ilgai tikėjau, kad tu Yinnai sugebėsi paleisti Soc'ą ir to dar pats nori... tenka tai prisipažinti, kad nuvyliai laukusius ir mane...