Guten Abend liebes Breadfish Forum,
Heute habe ich mal ein bisschen rumgebastelt und durch einen genialen Tipp im Englischem Forum herrausgefunden, wie man den Busbot zum anhalten bringt, wenn ein Spieler vor im steht.
Zunächst braucht ihr in eurem Filterscript Ordner, die .amx, "npc_record". Normalerweise sollte diese dabei sein, wenn ihr euch den Server Client von sa-mp.com/downloads
downloadet.
Nun macht ihr den Server on und geht InGame. Jetzt müssen wir uns als RCON Admin anmelden. Das machen wir mit "/rcon login [Euer RCON Passwort]". Dann ladet ihr die oben genannte
AMX. Dies machen wir mit "/rcon loadfs npc_record".
Das Script ist geladen wenn folgender Text als Nachricht erscheint:
Nun müsst ihr euch in euren Bus setzen und "/vrecord busbot" eintippen. Als nächstes müsst ihr die Route fahren, die der Busbot später fahren soll.
Kleiner Tipp: Halte bei Haltestellen mind. 10 Sekunden
Ok, ihr seid eure Route gefahren. Dann tippt ihr "/stoprecord". Nun könnt ihr GTA schliesen oder minimieren. Macht am besten gleich euren Server aus, bzw. macht später einen Restart.
Im Scriptfiles Ordner ist nun eine neue Datei erschienen:
Dann zieht ihr die .rec-Datei in folgendes Verzeichnis: \npcmodes\recordings
Jetzt öffnet ihr Pawno, macht STRG+N, löscht alle Zeilen im neuem Script und kopiert folgenden Code rein (Ich werde nicht viel dazu erklären, da das nur eine minimal abgeänderte Version von der taxi_ls_test.pwn im npcmodes Ordner ist.)
#include <a_npc>new gStoppedForTraffic = 0;public ScanTimer();#define AHEAD_OF_CAR_DISTANCE 11.0#define SCAN_RADIUS 11.0main(){}stock GetXYInfrontOfMe(Float:distance, &Float:x, &Float:y){ new Float:z, Float:angle; GetMyPos(x,y,z); GetMyFacingAngle(angle); x += (distance * floatsin(-angle, degrees)); y += (distance * floatcos(-angle, degrees));}public OnNPCModeInit(){ SetTimer("ScanTimer",200,1);}LookForAReasonToPause(){ new Float:X,Float:Y,Float:Z; new x=0; GetMyPos(X,Y,Z); GetXYInfrontOfMe(AHEAD_OF_CAR_DISTANCE,X,Y); while(x!=MAX_PLAYERS) { if(IsPlayerConnected(x) && IsPlayerStreamedIn(x)) { if( GetPlayerState(x) == PLAYER_STATE_DRIVER || GetPlayerState(x) == PLAYER_STATE_ONFOOT ) { if(IsPlayerInRangeOfPoint(x,SCAN_RADIUS,X,Y,Z)) { return 1; } } } x++; } //new msg[256]; //new Float:angle; //GetMyFacingAngle(angle); //format(msg,256,"My yaw/heading = %f",angle); //SendChat(msg); return 0;}//------------------------------------------public ScanTimer(){ //new ticker = GetTickCount() - g_LastTick; //printf("npctest: timer (%d)ms", ticker); //g_LastTick = GetTickCount(); new ReasonToPause = LookForAReasonToPause(); if(ReasonToPause && !gStoppedForTraffic) { //SendChat("I'm pausing"); PauseRecordingPlayback(); gStoppedForTraffic = 1; } else if(!ReasonToPause && gStoppedForTraffic) { //SendChat("I'm resuming"); ResumeRecordingPlayback(); gStoppedForTraffic = 0; }}//------------------------------------------StartPlayback(){ StartRecordingPlayback(PLAYER_RECORDING_TYPE_DRIVER,"busbot"); gStoppedForTraffic = 0;}//------------------------------------------public OnRecordingPlaybackEnd(){ StartPlayback();}//------------------------------------------public OnNPCEnterVehicle(vehicleid, seatid){ StartPlayback();}//------------------------------------------public OnNPCExitVehicle(){ StopRecordingPlayback();}//------------------------------------------
WICHTIG: Erst auf speichern und dann auf compilen (F5)!
Wie schon gesagt müsst ihr die PWN speichern
Ihr speichert es in den npcmodes Ordner unter den Namen "busbot". Jetzt compilen.
Danach öffnet ihr eurer Gamemode und kopiert diese Zeilen rein:
Ganz oben im Script
new car_Busbot; //Der Bus, den der NPC brauch, um die Route zu fahren.
OnGameModeInit
ConnectNPC("busbot","busbot"); //Das der NPC connected. Das erste "busbot" ist der Name vom NPC. und das zweite "busbot" ist die AMX im npcmodes ordner.
car_Busbot = CreateVehicle(431, -2257.1030,149.2979,35.3796,181.1235,-1,-1, -1); //Das Fahrzeug von dem Busbot
Bei OnPlayerSpawn
if(IsPlayerNPC(playerid))//wenn playerid ein NPC ist...
{
new botname[MAX_PLAYER_NAME];
GetPlayerName(playerid, botname, sizeof(botname));//....Wird der Name vom NPC ermittelt...
if(!strcmp(botname, "busbot", true))...und wenn der Name busbot ist wird fortgesetzt.
{
print("[NPC]: Busbot ist gespawnt.");//Eine kleine Nachricht in der Console, dass der Busbot gespawnt ist.
SetPVarInt(playerid,"Fuehrerschein",1);//Das der BusBot einen Führerschein bekommt (falls nötig / Muss abgeändert werden)
SetPlayerSkin(playerid,255);//Das der NPC einen anderen Skin bekommt
PutPlayerInVehicle(playerid, car_Busbot, 0);//das der NPC in den Wagen gesetzt wird
//Bei Login- bzw. Register System muss das etwas abgeändert werden! (Bei Problemen einfach im Thread melden)
return 1;
}
}
Alles anzeigen
Jetzt nur noch in der Server.cfg schauen, ob hinter maxnpcs mindestens eine 1 oder höher steht. dann Server anschmeisen und schauen ob es funktioniert
Falls nicht, enfach per PM oder im Thread melden. Werde alle Fragen und evtl. verursachte Fehler im Script berichtigen.
Hoffe ich konnte evtl. helfen
Und freue mich natürlich auf Verbesserungsvorschläge und Rückmeldung