*Vraag* Hoe script je een 'Job"? *Vraag*
#1

Hoi beste NL scripters,

Ik ben bezig om een server te maken voor een groepje vrienden van mij, ik heb al wat op me server staan maar nog niet echt een manier om geld te verdienen. Voor het geld verdienen heb ik alleen een "Reaction Test" en dat is geen leuke manier om je geld op een vaste manier te verdienen. Ik wist al van te voren dat er servers waren met hun eigen Jobs om geld te verdienen en dat leek mij ook wel wat. Dus ik meteen gezocht en ik vond een paar FSjes maar niet echt maar mijn smaak. Toen heb ik gekeken naar RPG gamemodes met jobs, maar daar kon ik dus echt helemaal niets mee. Ook zijn er niet zo tutorials om een fatsoenlijke job te maken. Dus ik wilde vragen of er iemand is die toevallig een job heeft waarin je bijvoorbeeld van A naar B rijd en bij beide plekken (zowel A als B) een paar seconden moet wachten. Als het kan alstjeblieft een voorbeeld met wat comments erbij en als dat niet kan misschien wat uitleg in een post, dan leer ik er ook wat van :P
Ik kijk wel wat er allemaal binnen komt rollen

Groetjes,

DutchWings
Reply
#2

Ik heb even een vrij simpel script gemaakt, die je op veel mogelijkheden kan uitbrijden, ik heb het snel gedaan en niet getest, als iets niet werkt zeg het even dan verander ik het. Dit is ook niet de manier die ik zou doen, maar dit is wel het makkelijkst.

(ik maak op dit moment een trucking script, daar heb ik een script voor gemaakt waarmee je missies (jobs) kan maken ingame, en aan de hand van de class van de speler krijgt die er een toegewezen).

Ik heb het script in een download gezet, ik heb hem ook op pastebin gedaan, maar die heeft de intendatie verkloot, dus ik zou zeggen dat je hem beter kan downloaden.

http://pastebin.com/4szrvVhr

download:

http://www.solidfiles.com/d/8164b/

EDIT [18:58]: Ik had een foutje gemaakt, nu gefixed. Ik heb ook niet gemaakt dat je een paar seconde moet wachten, dat kan je zelf heel makkelijk doen met een timer.
Reply
#3

Bedankt voor het scriptje, ik heb hem even bekeken en een paar dingen snap ik niet helemaal. Je hebt dit opgegeschreven:
pawn Code:
switch(random(5)) // dit kan je hoger maken als je meer missies wilt
en daaronder staat
pawn Code:
case 0: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
            case 1: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
            case 3: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
            case 4: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
Die (random(5)) snap ik niet helemaal, er zijn 4 cases en er staat 5 en ik neem aan dat 5 voor het aantal cases staat maar ik weet niet zeker. En "random" in de code, betekend dat dat het script gewoon random 1 van de opties pakt?

En stel dat je in een bepaald type voertuig moet zitten om de job te starten, laten we zeggen een Linerunner (ID 403), hoe zou dat dat moeten of moet je daarvoor het hele script omgooien?
Ik heb maar een heel klein ideetje maar zou het met
pawn Code:
GetPlayerVehicleID(playerid,403);
moeten gebeuren?

EDIT: Ik ga je script nu even testen
Reply
#4

Er zijn vijf cases, de eerste begint met 0, en hij eindigt bij 4 dus dat is vijf, inderdaad hij pakt een van die bijf missies 'random'. Als je in een bepaald voertuig moet zitten moet je even dit toevoegen;

pawn Code:
if(GetVehicleModel(GetPlayerVehicleID(playerid) != 403)) return SendClientMessage(playerid, -1, "You must be in a linerunner to start working");
Dus dan ziet dat command er zo uit:

pawn Code:
if (strcmp("/startjob", cmdtext, true, 10) == 0)
    {
        // laten we het even simpel houden, je pakt een auto die je wilt, je typt dit en je krijgt een missie.
        if(PJInfo[playerid][OnJob] == true) return SendClientMessage(playerid, -1, "Your currently on a job '/endjob' if you want to start another one");
        if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "You need to be in a vehicle to start working");
        if(GetVehicleModel(GetPlayerVehicleID(playerid) != 403)) return SendClientMessage(playerid, -1, "You must be in a linerunner to start working");
        // je zou een array of en enum kunnen maken, om meerdere missies te hebben, zelfs die je ingame kan maken, om dit simpel te houden, maak ik het in een switch statement.
        SendClientMessage(playerid, -1, "Drive to the location marked on your radar to pick up the goods");
        PJInfo[playerid][JobStatus] = 1;
        PJInfo[playerid][VehicleID] = GetPlayerVehicleID(playerid);
        switch(random(5)) // dit kan je hoger maken als je meer missies wilt
        {
            case 0: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
            case 1: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
            case 3: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
            case 4: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
        }
        return 1;
    }
Reply
#5

Oke bedankt, en sorry dat ik het volgende niet in 1 post heb gestopt..

Om de job te beginnen moet je in een Linerunner zitten, okee dat werkt maar stel nu dat je de job alleen kan beginnen als je in de Linerunner zit met een trailer erachter.
Een van deze trailers:

Article Trailer (435)
Article Trailer 2 (450)
Petrol Trailer (584)
Article Trailer 3 (591)

zou je dan achter:
pawn Code:
if(GetVehicleModel(GetPlayerVehicleID(playerid) != 403)) return SendClientMessage(playerid, -1, "You must be in a linerunner to start working");
de ID's zetten dat het uiteindelijk zo word?
pawn Code:
if(GetVehicleModel(GetPlayerVehicleID(playerid) != 403,435,450,584,591)) return SendClientMessage(playerid, -1, "You must be in a linerunner to start working");
of is het dan helemaal fout?

AAHHRGH ik raak helemaal in de war van al die codes xD
Reply
#6

Quote:
Originally Posted by playbox12
View Post
...
Je mist anders 'case 2:' .


Jobs stellen trouwens heel weinig voor. Het lijkt heel uitgebreid, maar uiteindelijk is het bijvoorbeeld met een bus job zo dat je door x checkpoints mag en dat je als je dat gehaald hebt wat geld krijgt. Trashmaster is precies hetzelfde (Soms moet je naar een waste disposal rijden trouwens) en trucker eigenlijk ook. Wat vissen betreft: Als je in een bepaald gebied bent kan je een command intikken, en als dat je dat doet wordt er een timer voor een bepaalde callback gezet. Als die timer afgelopen is maakt het script gebruik van de random() functie en krijg je dus een willekeurig zelf-nietgevangen vis.

@Boven: Je kan niet zo werken met if, je moet dan ook een switch-case statement gebruiken. Dus:

pawn Code:
if(GetVehicleModel(GetPlayerVehicleID(playerid) != 403,435,450,584,591)) return SendClientMessage(playerid, -1, "You must be in a linerunner to start working");
Wordt:
pawn Code:
switch(GetVehicleModel(GetPlayerVehicleID(playerid))
{
  case 403, 435, 450, 584, 591:
  {
    //Hier moet je je code zetten als ie wel in een linerunner (of dergelijke truck) zit
  }

  default: //Default, oftewel standaard. In dit geval houdt het in als het vehicle model van de gebruiker geen van bovenstaande IDs is.
  {
    SendClientMessage(playerid, -1, "You must be in a linerunner to start working");
  }
Reply
#7

Quote:
Originally Posted by Hiddos
View Post
Je mist anders 'case 2:' .


Jobs stellen trouwens heel weinig voor. Het lijkt heel uitgebreid, maar uiteindelijk is het bijvoorbeeld met een bus job zo dat je door x checkpoints mag en dat je als je dat gehaald hebt wat geld krijgt. Trashmaster is precies hetzelfde (Soms moet je naar een waste disposal rijden trouwens) en trucker eigenlijk ook. Wat vissen betreft: Als je in een bepaald gebied bent kan je een command intikken, en als dat je dat doet wordt er een timer voor een bepaalde callback gezet. Als die timer afgelopen is maakt het script gebruik van de random() functie en krijg je dus een willekeurig zelf-nietgevangen vis.
Hey hey, ideetjes voor jobs :P
En ik had het zelf niet eens gezien dat case 2: ontbrak 0.o
Checkpoints maken zou toch gewoon kunnen in de SA:MP Debug?
Reply
#8

Quote:
Originally Posted by DutchWings
View Post
Hey hey, ideetjes voor jobs :P
En ik had het zelf niet eens gezien dat case 2: ontbrak 0.o
Checkpoints maken zou toch gewoon kunnen in de SA:MP Debug?
Technisch gezien kan dat gewoon altijd omdat je alleen de coцrdinaten nodig hebt, en die kan je ophalen met het /save command, en terugvinden in je "My Documents/GTA San Andreas User Files/SAMP/savedpositions.txt" bestand.
Reply
#9

Je hebt helemaal gelijk Hiddos, ik denk dat ik blind ben geworden.
Reply
#10

@Hiddos

Hey, ik kon er gisteren niet meer aan werken vanwege familie bezoek..
Als ik het probeer te scripten zoals je had verteld ziet het er zo uit:
pawn Code:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/startjob", cmdtext, true, 10) == 0)
    {
        // laten we het even simpel houden, je pakt een auto die je wilt, je typt dit en je krijgt een missie.
        if(PJInfo[playerid][OnJob] == true) return SendClientMessage(playerid, -1, "Your currently on a job '/endjob' if you want to start another one");
        if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "You need to be in a vehicle to start working");
        switch(GetVehicleModel(GetPlayerVehicleID(playerid))
        {
            case 403, 435, 450, 584, 591:
            {
                // je zou een array of en enum kunnen maken, om meerdere missies te hebben, zelfs die je ingame kan maken, om dit simpel te houden, maak ik het in een switch statement.
                SendClientMessage(playerid, -1, "Drive to the location marked on your radar to pick up the goods");
                PJInfo[playerid][JobStatus] = 1;
                PJInfo[playerid][VehicleID] = GetPlayerVehicleID(playerid);
                switch(random(4)) // dit kan je hoger maken als je meer missies wilt
                {
                    case 0: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
                    case 1: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
                    case 2: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
                    case 3: SetPlayerCheckpoint(playerid, 100.0, 100.0, 100.0, 10); // dit moet je natuurlijk echte locaties maken.
                }
            default: //Default, oftewel standaard. In dit geval houdt het in als het vehicle model van de gebruiker geen van bovenstaande IDs is.
            {
                SendClientMessage(playerid, -1, "You must be in a linerunner to start working");
            }
        }
        return 1;
    }
Dan krijg ik de volgende errors:
pawn Code:
C:\Users\Ashwin\Desktop\Tjob.pwn(39) : error 001: expected token: ")", but found "{"
C:\Users\Ashwin\Desktop\Tjob.pwn(53) : warning 217: loose indentation
C:\Users\Ashwin\Desktop\Tjob.pwn(53) : error 014: invalid statement; not in switch
C:\Users\Ashwin\Desktop\Tjob.pwn(53) : error 029: invalid expression, assumed zero
C:\Users\Ashwin\Desktop\Tjob.pwn(58) : error 002: only a single statement (or expression) can follow each "case"
C:\Users\Ashwin\Desktop\Tjob.pwn(58) : warning 215: expression has no effect
Pawn compiler 3.2.3664          Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.
Volgens mij heb ik het ergens flink verknald maar kan niet echt vinden waar het aan ligt :P
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)