Jump to content

[TUT || GMM]Basic Script


Flame^

Recommended Posts

SA-MP Gamemode tut



Team vs Team script

In deze tutorial leg ik in het kort uit wat en hoe je een Team vs Team gamemode maakt. Voor vragen kan je die gewoon hier stellen of mij PM’en. We beginnen!

Ten eerste open je PAWN en ga je naar file ----> new, je krijgt nu een heel blan script te zien. Nu moet je gaan bedenken wat er allemaal in moet en wat voor gamemode je gaat maken. We houden het simpel en nemen een Vagos vs OGF war.

Je zet bovenaan bij het script onder #include <a_samp> “#include <float>” en “#include <core>” . Daarna moet je teams en kleuren gaan definieren. Dit zet je onder de include’s

#define TEAM_VAGOS 1 // Team Vagos
#define TEAM_BALLAS 2 // Team Ballas

#define COLOR_YELLOW 0xFFFF00AA // Kleur Vagos
#define COLOR_PINK 0xFF66FFAA // Kleur Ballas
#define COLOR_GREY 0xAFAFAFAA // Kleur wanneer je inactive bent

static gTeam[MAX_PLAYERS];

Nu moet je wat forwards zetten, dus dingen die sowieso moeten gebeuren. Denk hierbij aan dingen als: Team kleur zetten, speler klaar maken voor setup, uit de gamemode gaan, etcetera. Zet dit dus onder de define’s

forward SetPlayerToTeamColor(playerid); // Speler naar teamkleur zetten
forward SetupPlayerForClassSelection(playerid); // Speler klaarmaken voor setup
forward SetPlayerTeamFromClass(playerid,classid); // Speler in team zetten
forward ExitTheGameMode(); // uit gamemode gaan

Om je script even ordelijk te houden zet je boven elke header even dit:

//-------------------------------------

Doe dat dus onder de forwards en zet onder het lijntje dit neer:

main()
{
print("\n----------------------------------");
print("  Ballas vs Vagos by [QB]Flame\n");
print("----------------------------------\n");
}

Dit is dus de naam van je script. Zet nu weer de lijn eronder en daarna zet je dit eronder:

public OnGameModeInit()
{
SetGameModeText(“Ballas vs Vagos”);
		SetWorldTime(6); // tijd in uren.
		ShowNameTags(1); // Spelers namen boven health balk aan of uit. Nu aan
		ShowPlayerMarkers(1); // Blokjes op radar aan of uit? Nu aan

		// Vehicles Vagos ---------- Zet hier de autos van de Vagos neer

		// Vehicles Ballas ---------- Zet hier de autos van de Ballas neer

		// Vagos Class ------------ Zet hier de classes van de vagos neer waaruit je kan kiezen

		// Ballas Class ----------- Ze hier de classes van de ballas neer waaruit je kan kiezen


return 1;
}

Oke, hier moet je eindelijk zelf is wat doen. Ik zal de codes + uitleg geven voor de classes en autos.

AddPlayerClass(ID, X, Y, Z, Rotatie, wapen1, wapen1_ammo, wapens2, wapen2_ammo, wapen3, wapen3_ammo);

ID = Ped ID, zie ped.ide

X + Y +Z = De coordinaten. Gebruik SA Place Manager

Rotatie = welke kant kijk je op als je spawnt

Wapen1/2/3 = Het wapen ID van je wapen

Wapen1/2/3_ammo = ammo van wapen

Voorbeeld:

AddPlayerClass(105,2500.2688,-1685.4584,13.4607,44.8214,9,0,25,25,32,200);

Nu die voor autos:

AddStaticVehicle(Auto ID, X, Y, Z, Rotatie, kleur1, kleur2);

Voorbeeld:

AddStaticVehicle(567,2468.3486,-1653.4425,13.2643,91.4342,114,1);

Hiermee moet je de OnGameModeInit() toch wel aardig mee kunnen opvullen. We gaan verder! Nu gaan we bepalen wat er gebeurt als er een speler in het spel komt. Zet die --- lijn er weer en zet dit eronder:

public OnPlayerConnect(playerid)
{
SetPlayerColor(playerid,COLOR_GREY); // Kleur
GameTextForPlayer(playerid,"~r~Ballas ~w~vs ~y~Vagos!",2000,5); // Text 
return 1;
}

Dit krijgt de player dus te zien wanneer hij joint. ~r~ staat voor rood, ~w~ voor wit en ~y~ voor geel.

Nu gaan we de speler klaarmaken voor selectie! Dus het spawn screen wat je te zien krijgt. Zet de ---- lijn er weer neer en dan zet je dit eronder:

public SetupPlayerForClassSelection(playerid)
{
SetPlayerInterior(playerid,11);
SetPlayerPos(playerid,508.7362,-87.4335,998.9609);
		SetPlayerCameraPos(playerid,508.7362,-83.4335,998.9609);
SetPlayerCameraLookAt(playerid,508.7362,-87.4335,998.9609);
SetPlayerFacingAngle(playerid,0.0);
}

Ik denk niet dat ik dit hoef uit te leggen, want je kan aan de commands al zien wat het doet. We gaan weer verder en deze keer zetten we de “SetPlayerTeamFromClass” klaar. Zet de ---- lijn erboven en dan dit eronder:

public SetPlayerTeamFromClass(playerid,classid)
{
if(classid == 0 || classid == 1 || classid == 2) {
	gTeam[playerid] = TEAM_VAGOS;
} else if(classid == 3 || classid == 4 || classid == 5) {
	gTeam[playerid] = TEAM_BALLAS;
}
}

Nu moet je even goed op letten, want anders kan je een groot deel van je code verpesten. Het belangrijkste hier is dit regeltje: “If(classid == 0 || classid == 1 || classid == 2) {“

Het Classid nummer hangt samen met het AddPlayerClass commando. Je MOET dus eerst de 3 vagos classes zetten (daarom staat Vagos ook bovenaan) en daarna pas de 3 Ballas classes. Dan pas gaat het goed. Plaats hieronder de --- lijn.

Nu gaan we de speler naar zijn team kleur zetten. Zet onder de --- lijn dit:

public SetPlayerToTeamColor(playerid)
{
if(gTeam[playerid] == TEAM_VAGOS) {
	SetPlayerColor(playerid,COLOR_YELLOW); // geel
} else if(gTeam[playerid] == TEAM_BALLAS) {
	SetPlayerColor(playerid,COLOR_PINK); // roze/paars
}
}

Hij kijkt dus eerst of de player de vagos heeft gekozen en zoja zet hij de kleur naar geel, en als de player de ballas heeft gekozen (else if) zet hij de kleur naar paars/roze. Zet de ---- lijn hieronder. Nu gaan we erbij zetten wat men ziet tijdens het class zetten.

public OnPlayerRequestClass(playerid, classid)
{
SetupPlayerForClassSelection(playerid);
SetPlayerTeamFromClass(playerid,classid);

if(classid == 0 || classid == 1 || classid == 2) {
	GameTextForPlayer(playerid,"~y~VAGOS",1000,5);
} else if(classid == 3 || classid == 4 || classid == 5) {
	GameTextForPlayer(playerid,”~r~BALLAS",1000,5);
}

return 1;
}

We naderen het einde! Zet opnieuw de --- lijn hieronder. Nu gaan we erbij zetten wat er gebeurt als een player spawnt. Zet dit onder je lijn:

public OnPlayerSpawn(playerid)
{
SetPlayerToTeamColor(playerid);
SetPlayerInterior(playerid,0);

if(gTeam[playerid] == TEAM_VAGOS) {
	SetPlayerWorldBounds(playerid,x_max, x_min, y_max, y_min);
	GameTextForPlayer(playerid,
	   "Kill the ~r~Ballas!"
	   6000,5);
}
else if(gTeam[playerid] == TEAM_BALLAS) {
			SetPlayerWorldBounds(playerid,x_max, x_min, y_max, y_min); 
	GameTextForPlayer(playerid,
	   "Kill the ~y~Vagos!",
	   6000,5);
}

return 1;
}

De functie “SetplayerWorldBounds” is bedoeld om te zorgen dat men niet naar een ander gebied gaat. Zet hieronder de ---- lijn en zet dan dit eronder:

public ExitTheGameMode()
{
GameModeExit();
}

En dan de finishing touch!

public OnPlayerDeath(playerid, killerid, reason)
{
new deathstr[256];
new whodiedname[MAX_PLAYER_NAME+1];
new whokilledname[MAX_PLAYER_NAME+1];
new deathreasonstr[256];

GetPlayerName(playerid,whodiedname,MAX_PLAYER_NAME);
GetWeaponName(reason,deathreasonstr,255);

if(killerid == INVALID_PLAYER_ID) {
	if(strlen(deathreasonstr)) {
		format(deathstr,256,"%s died (%s)",whodiedname,deathreasonstr);
	} else {
		format(deathstr,256,"%s died",whodiedname);
	}
	SendClientMessageToAll(OBJECTIVE_COLOR, deathstr);
} else {
	GetPlayerName(killerid,whokilledname,MAX_PLAYER_NAME);
	if(gTeam[killerid] != gTeam[playerid]) {
		// Valid kill
		if(strlen(deathreasonstr)) {
			format(deathstr,256,"%s was killed by %s (%s)",whodiedname,whokilledname,deathreasonstr);
		} else {
			format(deathstr,256,"%s was killed by %s",whodiedname,whokilledname);
		}
		SendClientMessageToAll(OBJECTIVE_COLOR, deathstr);
		SetPlayerScore(killerid,GetPlayerScore(killerid)+1);
 	}
	else {
		// Team kill
		format(deathstr,256,"%s killed team-mate %s (%s)",whokilledname,whodiedname,deathreasonstr);
		SendClientMessageToAll(OBJECTIVE_COLOR, deathstr);
	}
}
	return 1;
}

Credits go to kyeman’s script for this piece of code.

Dit was dus mijn tutorial, ik hoop dat je er wat aan hebt, en voor vragen kan je altijd hier posten, mij PM’en of naar het SA-MP Scripting IRC kannaal gaan. Ik weet niet of het ingame ook werkt, ik ga er wel vanuit, maar als iemand een full script heeft, kan die dan even kijken of het nu werkt ;) ?

Tevens kunnen codes een beetje verpest zijn door de

 tag, in dat geval moet je ze even opnieuw typen  .

[b]:: Handy Link ::[/b]

- http://stephantom2.st.funpic.de/experiment...a_samp-inc.html

Link to comment
Delen op andere websites

  • Reacties 37
  • Created
  • Laatste reactie

Top Posters In This Topic

  • mosweg

    6

  • Gangstaz

    3

  • Morph1

    3

  • r.deroos

    2

  • 2 weken later...

Ik heb het ook geprobeerd ik weet niet of het gelukt is ik moet nog testen ik had wel een tip:

Voor vehicle en wapen ID's kun je GGMM gebruiken en voor auto's spawnen MTA Map Editor (het .map bestandje openen alles staat duidelijk aan gegeven) :klap:

Link to comment
Delen op andere websites

hey

ik ben sinds 2 dagen aan het scripten en het gaat al best goed. ik heb al auto's en mensen kunnen plaatsen en dat ze wapens vast hebben met ammo enz.

maar ik heb een belangerijk vraagje over de cars. er is een limiet toch? aan addstatic vehicle. mijn eerste vraag: weet iemand hoeveel het limiet daarvan is?

2) in mijn script staan minder auto's dan bij lvdm, maar mijnes doet het niet en die van lvdm wel.... dat is ook raar. :? ik dacht misschien ligt het aan die //Uber haxed dingen. die staan boven een paar rtijes van addstaticvehicle in lvdm.pawn file.(kijk maar eens.) wat betekent die uber haxed nou? :?

3) ik merk dat er teveel auto's zijn omdat als ik 5 auto's doe , kan ik hem wel spelen de script, maar als ik er veel meer doe. slaat hij af als hij aan het laden is(als hij aan het connecten is naar de server) :? hij slaat dan af en ik krijg een venstertje met report crash enz.

dit staat er boven aan bij de foutmelding:

Exception At Address: 0x004C8F24

Last SCM Opcode: 0x38B

misschien iemand met hetzelfde probleem?

alvast bedankt voor de tut _O_ deze tut heeft me veel geholpen!

*edit* ik heb een server daar test ik me scripts*

Bewerkt: door BuLL3T^
Link to comment
Delen op andere websites

Late reactie maar het werkt niet

E:\Program Files\Rockstar Games\GTA San Andreas\samp\gamemodes\src\pier51.pwn(114 -- 116) : error 001: expected token: ",", but found "-integer value-"

E:\Program Files\Rockstar Games\GTA San Andreas\samp\gamemodes\src\pier51.pwn(116) : warning 215: expression has no effect

E:\Program Files\Rockstar Games\GTA San Andreas\samp\gamemodes\src\pier51.pwn(116) : warning 215: expression has no effect

E:\Program Files\Rockstar Games\GTA San Andreas\samp\gamemodes\src\pier51.pwn(116) : error 001: expected token: ";", but found ")"

E:\Program Files\Rockstar Games\GTA San Andreas\samp\gamemodes\src\pier51.pwn(116) : error 029: invalid expression, assumed zero

E:\Program Files\Rockstar Games\GTA San Andreas\samp\gamemodes\src\pier51.pwn(116) : fatal error 107: too many error messages on one line

-- Ik heb de Errors zelf gefixed, nu nog kijken of hij niet crashed ingame ^^ --

Bewerkt: door Le MrG
Link to comment
Delen op andere websites

  • 2 maanden later...

Ik heb het gezet in een bestaand script en het werkt behalve een regeltje geeft hij 4 errors

Dit regeltje wat is daar fout aan.

if(gTeam[killerid] != gTeam[playerid]) {

EDIT:Hier onder zie je de fouten die hij geeft

(477) : error 017: undefined symbol "gTeam"

(477) : warning 215: expression has no effect

(477) : error 001: expected token: ";", but found "]"

477) : error 029: invalid expression, assumed zero

477) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.0.3367 Copyright © 1997-2005, ITB CompuPhase

4 Errors.

Bewerkt: door Xwa
Link to comment
Delen op andere websites

  • 4 maanden later...
  • 6 maanden later...

Dit topic is waarschijnlijk aal een jaar oud, maar ik heb toch nog een vraagje:

Hoe convert ik deze .pwn naar een .amx voor in de gamemode folder?????

Watn als ik op compile druk, dan krijg ik iets van : 4 errors ofzo... :kots::kots::kots:

Bewerkt: door ICE-Spirit
Link to comment
Delen op andere websites

  • 6 maanden later...
  • 2 maanden later...

eey ik heb alles gedaan zoals je het uitgelegd had. maar ik had van alle vagos grove gemaakt en van geel groen.

maar dan krijg ik deze error

C:\Documents and Settings\R. de Roos\Bureaublad\spellen\gta\sa mp server maken\gamemodes\Gang Battle.pwn(49) : warning 217: loose indentation



C:\Documents and Settings\R. de Roos\Bureaublad\spellen\gta\sa mp server maken\gamemodes\Gang Battle.pwn(49) : error 029: invalid expression, assumed zero

C:\Documents and Settings\R. de Roos\Bureaublad\spellen\gta\sa mp server maken\gamemodes\Gang Battle.pwn(49) : error 017: undefined symbol "Ballas"

C:\Documents and Settings\R. de Roos\Bureaublad\spellen\gta\sa mp server maken\gamemodes\Gang Battle.pwn(49) : error 017: undefined symbol "vs"

C:\Documents and Settings\R. de Roos\Bureaublad\spellen\gta\sa mp server maken\gamemodes\Gang Battle.pwn(49) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

4 Errors.

weet iemand wat ik moet doen?? ik heb namelijk geen ervaring met scripten :cry: ben een beginnner :D

Link to comment
Delen op andere websites

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...