Jump to content

Scriptjes nodig


Recommended Posts

Geplaatst: (bewerkt)

Hallo allemaal :)

Mijn server staat dus nu online, opzich wel leuk enzo. Maar ik wil er nog wat aan toevoegen. en dat is:

  1. Dat als je uit een auto stapt dat hij na 30 sec word vernietigd
  2. Een soort teleto command, dat als je /teleto [iD] typt dat je naar diegene word geteleporteerd, voor iedereen op de server toegankelijk.

Ik hoop dat iemand mij kan helpen :D

Bewerkt: door Remi-X
  • Reacties 40
  • Created
  • Laatste reactie

Top Posters In This Topic

  • Remi-X

    18

  • Big Boss

    10

  • David22

    4

  • D-V-D-K

    3

Geplaatst: (bewerkt)
Hallo allemaal :)

Mijn server staat dus nu online, opzich wel leuk enzo. Maar ik wil er nog wat aan toevoegen. en dat is:

  1. Dat als je uit een auto stapt dat hij na 30 sec word vernietigd
  2. Dat als je bijvoorbeeld de Blood Bowl gaat spelen dat je niet UIT je auto kan (heb ik DM command voor, dan word de godmode uitgeschakeld.)
  3. Een soort teleto command, dat als je /teleto [iD] typt dat je naar diegene word geteleporteerd
  4. Een vehicle spawn command, dat als iemand bijvoorbeeld /infernus typt dat hij een infernus krijgt, en als hij m na 1 min niet gebruikt dat hij destroyed word. En dat er geen overspawn kan komen, en gaat die er wel aan komen, krijgt de speler een melding dat er overspawn kan komen.
  5. Een report command voor admins. Dat als een gast /report [iD] toetst dat een admin grote melding krijgt dat er een report op een ID is gepleegd.

En wat is het ID van de Blood Bowl? Dus niet de coordienaten, maar het ID. Dan kan ik dat ding buiten spawnen :puh:

Ik hoop dat iemand mij kan helpen :D

Hey,

  1. Hier zal ik zo even naar kijken
  2. Dit doe je als volgt:
    new UitAutoKunnen[MAX_PLAYERS]
    
    public OnPlayerSpawn(playerid)
    {
    UitAutoKunnen[playerid] = 1;
    return 1;
    }
    
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/cardm", cmdtext, true) == 0)
    {
    UitAutoKunnen[playerid] = 0;
    return 1;
    }
    return 0;
    }
    
    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    if (UitAutoKunnen[playerid] == 0)
    {
    PutPlayerInVehicle(playerid, vehicleid, 1);
    PutPlayerInVehicle(playerid, vehicleid, 0);
    return 1;
    }
    return 0;
    }
    
    OnPlayerDeatch(playerid)
    {
    UitAutoKunnen[playerid] = 1;
    }
    


  3. Kijk hiervoor even naar de debug, hier staan allerlei commands die je kan gebruiken en aanpassen voor je server.
  4. Zie hierboven.
  5. Kijk eens:
    	
    new cmd[256], idx, tmp[256];
    cmd = strtok(cmdtext, idx);
    if(strcmp(cmd, "/report", true)==0)
    {
    	tmp = strtok(cmdtext, idx);
    	new reportedplayer; //De speler die gereport wordt
    	if(!strlen(tmp)) // Als er alleen report wordt ingetypt
    	{
    	SendClientMessage(playerid, COLOR_RED, "Gebruik: /report [id]");
    	return 1;
    	}
    		reportedplayer = strval(tmp);
    		if(IsPlayerConnected(reportedplayer)==1)
    		{
     			new reportedplayername[256];
       		new reporterplayername[256];
       		new meldingvooradmin[256];
       		new aantaladmins;
       		new meldingvoorreporter[256];
       		aantaladmins = 0;
       		GetPlayerName(reportedplayer, reportedplayername, sizeof(reportedplayername));
      		 	GetPlayerName(playerid, reporterplayername, sizeof(reporterplayername));
       		format(meldingvooradmin, sizeof(meldingvooradmin), "%s (ID %d) wil speler %s (ID %d) rapporteren.", reporterplayername, playerid, reportedplayername, reportedplayer);
    		for(new i = 0; i <= MAX_PLAYERS; i++)
    		{
    		    if(IsPlayerConnected(i))
    			{
    			    if(IsPlayerAdmin(i))
    				{
    			        GameTextForPlayer(i, meldingvooradmin, 5000, 6);
    			        aantaladmins ++;
    				}
    			}
    		}
       		format(meldingvoorreporter, sizeof(meldingvoorreporter), "Je hebt %s gereport aan %d admin(s).", reportedplayername, aantaladmins);
       		SendClientMessage(playerid, COLOR_GREEN, meldingvoorreporter);
    	}
    	else
    	{
    		SendClientMessage(playerid,COLOR_RED,"De speler die je wil reporten in niet online!");
    	}
       	return 1;
    }


    Onderaan je script moet je dan nog wel dit toevoegen:

    strtok(const string[], &index)
    {
       new length = strlen(string);
       while ((index < length) && (string[index] <= ' '))
       {
           index++;
       }
       new result[20], offset = index;
       while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
       {
           result[index - offset] = string[index];
           index++;
       }
       result[index - offset] = EOS;
       return result;
    }


Ik hoop dat ik je wat verder heb geholpen ;)

Edit: Wacht even, er zit nog een fout in het laatste script. Fixed!

Bewerkt: door David22
Geplaatst: (bewerkt)

  1. Oke
  2. Werkt opzich wel, alleen 1 groot probleem. Is het mogelijk om niet uit de DM te kunnen als je nog niet dood bent? Want als ik nu teleport naar ergens anders, en ik stap in een voertuig, kan ik daar ook nier meer uit :bonk: Niet erg handig lijkt me. En ook, zodra ik in de DM ga, hoor ik harde motor geluiden niet meer :? alleen een beetje gerommel, maar niet echt het geluid van een motor...
    En als je naar cardm gaat, is het mogelijk om gelijk in een voertuig gezet te worden? Iedereen op een eigen plek? Dat bijvoorbeeld playerID 10 op spawnplek 10 een voertuig krijgt?
  3. Dat is toch alleen voor admins?
  4. Neej, standaard werkt dat niet. Die voertuigen blijven nog altijd staan na het uitstappen.
  5. Werkt precies zoals ik het wilde ;)

Nu heb ik alleen nog 2 dingen die ik wil :puh:

  1. Nitro, 1 keer drukken, oneindig nitro, nog een keer drukken, uit.
  2. Hoe spawn ik voertuigen in een interior? Zoals je het buiten doet werkt het opzich wel in een interior, maar dan doet alleen de collision van een voertuig het, je kan er tegenaan rijden, in zitten, alles, maar hij is onzichtbaar :|

Bewerkt: door Remi-X
Geplaatst: (bewerkt)

  1. Ik heb het volgende gemaakt, helaas werkt deze nog niet. Kan iemand met verstand van SA-MP scripten hier even naar kijken?
    Wait(30000);
    new iemandinvoertuig[MAX_VEHICLES];
    iemandinvoertuig[vehicleid] = 0;
    for(new i = 0; i <= MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    	if(IsPlayerInVehicle(i, vehicleid))
    	{
    	    iemandinvoertuig[vehicleid] = 1;
    	}
    }
    }
    if (iemandinvoertuig[vehicleid] == 0)
    {
    DestroyVehicle(vehicleid);
    }


  2. Dan moet je bij je teleports ook neerzetten
    UitAutoKunnen = 1;
  3. Nee hoor, dit is voor alle leden beschikbaar.
  4. Zodra het script van 1 gefixt is, kan ik dit ook toepassen op dit punt
  5. Mooi!

  1. Nitro kan je toevoegen met
    new auto1;
    
    OnGameModeInit()
    {
    auto1 = AddStaticVehicle(voertuiggegevens);
    }
    
    OnPlayerEnterVehicle(playerid, vehicleid)
    {
    if (vehicleid == auto1)
    {
    AddVehicleComponent(auto1, 1010); // (autonummer, componentnummer ([url="http://wiki.sa-mp.com/wiki/Car_Components"]lijst[/url]), in dit geval nitro)
    }
    return 1;
    }


  2. Je moet, net zoals bij het spawnen naar een interior, SA-MP vertellen dat de auto in het interior staat.
    new auto1;
    
    OnGameModeInit()
    {
    auto1 = AddStaticVehicle(voertuiggegevens);
    LinkVehicleToInterior (auto1, 15); (autonummer, interiornummer ([url="http://wiki.sa-mp.com/wiki/Interiors"]lijst[/url]))
    }


Ik hoop dat je er wat van snapt, zeg het maar als dit niet zo is... ;)

Bewerkt: door David22
Geplaatst:

  1. Wacht ik dan nog even op ;)
  2. Gelukt :tu:, was ik even vergeten :puh:
  3. Ik zal er even naar kijken.
  4. Wacht ik dan ook nog even op
  5. Gelukt :tu:
  6. Nogal onhandig. Op deze manier moet ik elke keer wachten totdat nitro refilled is, of in en uitstatppen, wat op zommige momenten erg vervelend is :puh:
  7. Moet ik dan voor elke auto een nieuwe NEW AUTO1 maken? Anders is het wel goed zo :puh:

Geplaatst: (bewerkt)

6. Nee hoor, gebruik deze code:

new nitroaan[MAX_PLAYERS];

forward Nitro(playerid);

public OnGameModeInit()
{
SetTimer("Nitro", 30000, 1);
return 1;
}

public OnPlayerSpawn(playerid)
{
nitroaan[playerid] = 0;
return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	if(newkeys == KEY_SUBMISSION)
	{
		if(nitroaan[playerid] == 1)
		{
			nitroaan[playerid] = 0;
			SendClientMessage(playerid, COLOR_GREEN, "Nitro turned off.");
		}
		else
		{
			nitroaan[playerid] = 1;
			SendClientMessage(playerid, COLOR_GREEN, "Nitro turned on.");
		}
	}

	return 1;
}

public Nitro(playerid)
{
if(nitroaan[playerid] == 1)
{
	if(IsPlayerInAnyVehicle(playerid) == 1)
	{
		new voertuig;
		voertuig = GetPlayerVehicleID(playerid);
		AddVehicleComponent(voertuig, 1010);
	  }
  }
return 1;
}

Elke keer als er op "2" gedrukt wordt zal de nitro aan of uitgezet wordt. Staat deze aan, worden er elke 30 seconden 10 nieuwe hulzen in de auto gezet worden. Dit script is nog niet getest. Credits naar Sniperx voor de "if(newkeys == KEY_SUBMISSION)" code.

7. Nee, verander het script van het oude in

OnPlayerEnterVehicle(playerid, vehicleid)
{
AddVehicleComponent(vehicleid, 1010); // (autonummer, componentnummer (lijst), in dit geval nitro)
return 1;
}

Nu wordt er automatisch nitro toegevoegd aan elke auto, zodra iemand er in stapt.

Bewerkt: door David22
Geplaatst: (bewerkt)

Oke, ik zal het morgen even testen. En dus als de nitro op is hoef je niet helemaal uit te stappen om te refillen? Je kan gewoon nog een keer op CTRL ofzo drukken zonder te wachten? Of is deze code 1klik aan, 2 klik uit?

Oke, nou test ik dat grote nitro script dus, maar ik heb 1 keer in beeld gehad dat nitro aan stond, en kreeg het niet meer off. Terwijl nitro gewoon nog op ging, en ik soms moest wachten op refill, soms gelijk kon refillen...

K snap het script daarom niet helemaal :?

Bewerkt: door Remi-X
Geplaatst:

De toetscode voor linkermuisknop is KEY_FIRE. Maar de Control toets en de NUM 0 toets worden eveneens gedefinieerd als KEY_FIRE.

Wat er in de code van David gebeurt: Als je in een voertuig stapt en je druk op KEY_SUBMISSION (NUM 2) wordt de nitro variabele geactiveerd. De timer zal nu elke 30 seconden nitro aan je auto blijven toevoegen tot je weer uit de auto stapt.

Trouwens, ik bedenk net dat die timer niet eens in OnGameModeInit hoeft te staan. Dit werkt veel efficiënter:

new nitroaan[MAX_PLAYERS];
new nitrotimer;

forward Nitro(playerid);

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	if(newkeys == KEY_SUBMISSION)
	{
		if(nitroaan[playerid] == 0)
		{
			nitroaan[playerid] = 1;
			SendClientMessage(playerid, COLOR_GREEN, "Nitro turned on.");
			AddVehicleComponent(GetPlayerVehicleID(playerid), 1010);
			nitrotimer = SetTimer("Nitro", 30000, 1);
		}
		else
		{
			nitroaan[playerid] = 1;
			SendClientMessage(playerid, COLOR_GREEN, "Nitro turned off.");
			KillTimer(nitrotimer);
		}
	}

	return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_ONFOOT && nitroaan == 1)
{
	nitroaan[playerid] = 0;
	KillTimer(nitrotimer);
}
return 1;
}

public Nitro(playerid)
{
if(nitroaan[playerid] == 1)
{
	if(IsPlayerInAnyVehicle(playerid) == 1)
	{
		new voertuig;
		voertuig = GetPlayerVehicleID(playerid);
		AddVehicleComponent(voertuig, 1010);
	  }
  }
return 1;
}

Geplaatst:

Ziet er inderdaad wel duidelijker uit, en korter dan die van David. Morgen kan ik proberen of het script werkt, ik heb hier (nog) geen San Andreas.

Nou ben ik alleen nog op zoek naar:

1. Een destroy vehicle tool, dat als je een voertuig uitstapt dat hij na 30 sec word vernietigd.

Geplaatst:
CreateVehicle(bla bla bla.... ,30);

Laatste getal moet 30 zijn :)

Huh, hoe dan? Dan word hij destroyed na 30 sec van spawnen bedoel je? Verdwijnt ie dan niet als je erin zit?

Geplaatst:
Dan word het voertuig na 30 gerespawned als er iemand uit stapt

Op de plek waar hij gespawnt werd? Daar heb ik waarschijnlijk niks aan, omdat het mij erom gaat dat je geen overspawn krijgt. Dus moet het voertuig vernietig worden, en niet terugkomen, tenzij hij vaste staanplaats heeft. En ik heb ook een mogelijkheid om iedereen een paar voertuigen te laten spawnen, die dus geen vaste plaats hebben. Die moeten dus destroyed worden na 30 seconden na uitstappen, anders komen er alsmaar voertuigen bij. Totdat de 700 word overschreden en dan crasht de server.

Geplaatst:

Misschien moet je maar eerst de term ''respawned'' opzoeken, het voertuig word ''gedestroyed'' en daarna ''aangemaakt'', dus niet dubbel zoals jij zegt.

Geplaatst:

Hij geeft aan dat hij een vehicle spawn command heeft waarmee je onbeperkt kan spawnen.

In dat geval moet je eigenlijk checken hoeveel voertuigen er al zijn en als het er 700 zijn moet het command worden afgebroken.

Misschien kun je dit proberen:

// Bovenaan
new TotalVehicles = 0;

// OnGameModeInit
AddStaticVehicle(...);
AddStaticVehicle(...);

TotalVehicles = aantal; (moet je zelf veranderen naar het aantal AddStaticVehicles dat er al zijn)

// Bij je spawn command
// Check of je nog bij kan spawnen

if(TotalVehicles == MAX_VEHICLES) return false;

// Als een voertuig gespawned wordt, moet dat worden bij opgeteld bij TotalVehicles
TotalVehicles++;

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.

×
×
  • Create New...