GTAvision.com - Forum - Grand Theft Auto News, Downloads, Community and more...

Position: Grand Theft Auto: San Andreas » Multiplayer » Scriptfragen zu der Tram und Admin Skins » Druckansicht
Portable14, 01.10.2008, 12:09
Hallo,

ich habe mal vor Monaten gescriptet und danach mal das SPiel gewechselt. Jetzt fange ich mal wieder
an und muss ins Scripten erstmal wieder rein kommen.
So dazu hab ich ein paar fragen. Ich hoffe das Profis hier im Forum mir helfen können.

1. Ich kann leider nicht mehr in der Tram in San Fierro einsteigen. Nur als Beifahrer. Liegt es am
Script oder an dem neuen SA-MP?

ZitatZitat:
AddStaticVehicle(449,-2006.50,149.79,28,0.5965,1,74);


2. Ich würde gerne den Zug (Brown Streak) nur als Admin Zug verwenden. Der Spieler soll dann
rausgeschmießen werden und ein Gametext aufleuchten "Nur für Admin´s".
Mit GameTextforPlayer weiß ich wie es funktioniert, aber mit Entervehicle und so komm ich nicht
weiter.

3. Würde ich die Swat Person gerne als Admin Skin verwenden. Und wenn man die Person nimmt, stirb
man bei Spawn und es erscheint eine Nachricht (Chat) "Wechsel dein Skin!!!"

4. Ich würde gern mal wissen die man das IsPlayerAdmin einsetzten muss. Wäre nett, wenn jemand paar
Beispiele hat.

Ich danke allen die mir helfen können. *hi*

Mfg
Florian


FloRaX, 01.10.2008, 12:19
Das könnte auch in denn Scriptfragen Thread ;)
Recycler, 01.10.2008, 17:38
#1

http://forum.gtavision.com/posts_51_470_1.html

#2

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
new azug;

public OnGameModeInit(...)
{
...
azug = CreateVehicle(...);
...
}

public OnPlayerEnterVehicle(...)
{
if (!IsPlayerAdmin(playerid) && vehicleid == azug) 
{
RemovePlayerFromVehicle(playerid); 
GameTextForPlayer(...);
}
}


#3

Code:
1
2
3
4
5
6
7
8
9
10
11
12
new classIDs[MAX_PLAYERS];

public OnPlayerRequestClass(...)
{
classIDs[playerid] = classid;
}

public OnPlayerSpawn(...)
{
if (!IsPlayerAdmin(playerid) && classIDs[playerid] == SWATid) SetPlayerHealth(playerid, 0.0);
// SWATid ist hier die classID des Skins
}


#4

siehe oben

100% deiner Fragen wurden schon von mir oder anderen mindestens 1x beantwortet.

MfG
Recycler
Portable14, 01.10.2008, 19:35
Hallo,

ich danke vielmals für die Scripts. Ich werde sie jetzt mal in meinen Gamemode einbauen. Ich werde
dann nochmal fragen wenn es schwierigkeiten gibt (was ich nicht hoffe).

Mfg
Florian
Portable14, 09.10.2008, 10:51
ZitatZitat:
public OnGameModeInit()
{
...
new azug;
azug = CreateVehicle(537,2240.2058,2466.2283,3.0322,270.0516,-1,-1,600);
...
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if (!IsPlayerAdmin(playerid) && vehicleid == azug)
{
RemovePlayerFromVehicle(playerid);
GameTextForPlayer(playerid, "Nur für Admins!!!");
}
}


Ich habe noch paar Probleme damit aber ist es richtig? Es kommen nähmlich immer Fehler.

EDIT: Sorry für den Doppelpost!
Jermuk, 09.10.2008, 11:20
Und was sind das für Fehler?

Gruß Jermuk
Macronix, 09.10.2008, 14:07
Das GameTextForPlayer schaut so aus:
Code:
1
GameTextForPlayer(playerid,"text",zeit,style);


Du hast bei deinem GameTextForPlayer nur die playerid und den Text ;)
Und mach am besten bei deinem RemovePlayerFromVehicle(playerid); folgendes:
Code:
1
2
3
4
5
new x,y,z; //am anfang der public

//dann das hier für RemovePlayerFromVehicle ersetzen:
GetPlayerPos(playerid,x,y,z);
SetPlayerPos(playerid,x,y,z+2);


Probiers aus, weil das mit RemovePlayerFromVehicle kaum Sinn ergibt, da das OnPlayerEnterVehicle
genau in dem Moment wo man F drückt, passiert... Und das RemovePlayerFromVehicle eigentlich nur
dafür ist, wenn man schon in einem Auto sitzt ;) (dann würde eher OnPlayerStateChange passen... aber
so ists nun auch ok :D)
Portable14, 09.10.2008, 20:44
http://img530.imageshack.us/img530/2480/aufzeichnenkg6.jpg

Das der Script mit dem 1 Error und paar Warnings.

dödel, 09.10.2008, 21:00
Du musst "new aswat;" über Main setzen, es darf in keinem Public stehtn, sonst kannst du es nicht
global verwenden
Portable14, 09.10.2008, 21:13
GetPlayerPos(playerid,x,y,z); bei der Position zeigt er noch das Tag mismatch an sonst geht alles.
Und wenn ich in das Auto (nicht als Admin) einsteige steht sofort "Nur für Admins!" und werde dann
auf dem Feld gespawnt.
Recycler, 09.10.2008, 21:18
Floats verwenden.

MfG
Recycler
dödel, 09.10.2008, 21:19
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
SetPlayerPos(playerid,x,y,z+2.0);

Edit:

Eine weit aus bessere Methode wäre allerdings den Code so zu gestalten:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?

public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == 2)
{
if(!IsPlayerAdmin(playerid))
{
new vehid = GetPlayerVehicleID(playerid);
switch(vehid)
{
case azug, aswat:
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
SetPlayerPos(playerid,x,y,z+2.0);
GameTextForPlayer(playerid, "Nur für Admins!!!", 5000, 5);
}
}
}
}
return 1;
}

?>


Somit kannst du all deine Adminfahrzeuge in case auflisten
Bsp.: case azug, aswat, bswat, bzug, crhino:

<? und ?> gehört natürlich nicht zum Code ;)
Portable14, 10.10.2008, 14:23
Cool danke das wäre nähmlich meine nächste Frage gewesen, wie ich mehrere aufliste.
Dann danke ich allen!!!

Edit: Was bedeutet eigentlich dieses SetPlayerPos(playerid,x,y,z+2.0);??? Also welche Funktion hat
es? Und das if(newstate == 2)???

Edit2:

Es gibt wieder paar Fehler:
http://img511.imageshack.us/img511/7268/aufzeichnennj5.jpg

Die new:
http://img395.imageshack.us/img395/2568/aufzeichnen2sf8.jpg

Die Autos sind auch erstellt!!!

P.S.: Pawno zeigt "Warning" in der Zeile 1060. Die gibt es aber nicht!!!

Mfg
Florian
Recycler, 10.10.2008, 14:29
Ein Float hat die Eigenschaft, eine nicht ganze Zahl

!=
http://upload.wikimedia.org/math/0/b/1/0b100eeff3848a15dbb46291e7fe52ad.png

aufzunehmen und nichts anderes. Deshalb musst du jede ganze Zahl mit mindestens einer Dezimalstelle
ausschreiben. Es funktioniert zwar auch ohne, ist aber nicht nach den Regeln. Für ganze Zahlen
benutzt man Integer.

if(newstate == 2) ist eine Bedingung, die dann erfüllt ist, wenn der neue Status des Spielers 2
(PLAYER_STATE_DRIVER) ist. Die ID's findest du in a_samp.inc

MfG
Recycler
Macronix, 10.10.2008, 15:13
Das SetPlayerPos(playerid,x,y,z+2); macht das wenn der spieler im auto ist das er 2 Meter über dem
Auto/Zug spawnt ;)
Ersetz ma die Float:x,y,z zu xA yA zA... probier das mal ^^ und ein new Float:x,... muss wohl weg..
Portable14, 10.10.2008, 16:15
Es geht leider nichts davon. Kommen entweder die selben oder mehr Errors und Warnings.
dödel, 10.10.2008, 17:04
Hm.. joah, ich habe nicht daran gedacht, das die angaben in case nicht variabel sein dürfen, nimm
einfach mal diesen code

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?

public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == 2)
{
if(!IsPlayerAdmin(playerid))
{
new vehid = GetPlayerVehicleID(playerid);
if(vehid == azug || vehid == aswat)
{
new Float:xpos, Float:ypos, Float:zpos;
GetPlayerPos(playerid,xpos,ypos,zpos);
SetPlayerPos(playerid,xpos,ypos,zpos+2.0);
GameTextForPlayer(playerid, "Nur für Admins!!!", 5000, 5);
}
}
}
return 1;
}

?>


Nun findet die Auflistung in der if abfrage statt

if(vehid == azug || vehid == aswat || vehid == bswat || vehid == bzug ...)

Das || steht für oder, d.h.
WENN(vehid == azug ODER vehid == aswat)
Nur mal zur vedeutlichung *hi*
Recycler, 10.10.2008, 17:22
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
new bool:cars[MAX_VEHICLES];

public OnGameModeInit(...)
{
cars[CreateVehicle(...)] = true;
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
if (newstate == 2)
{
if (!IsPlayerAdmin(playerid))
{
new vehid = GetPlayerVehicleID(playerid);
if (cars[vehid] == true)
{
new Float:xpos, Float:ypos, Float:zpos;
GetPlayerPos(playerid,xpos,ypos,zpos);
SetPlayerPos(playerid,xpos,ypos,zpos+2.0);
GameTextForPlayer(playerid, "Nur für Admins!!!", 5000, 5);
}
}
}
return 1;
}


+1

MfG
Recycler
Portable14, 10.10.2008, 20:21
Zitatdödel hat folgendes geschrieben:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?

public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == 2)
{
if(!IsPlayerAdmin(playerid))
{
new vehid = GetPlayerVehicleID(playerid);
if(vehid == azug || vehid == aswat)
{
new Float:xpos, Float:ypos, Float:zpos;
GetPlayerPos(playerid,xpos,ypos,zpos);
SetPlayerPos(playerid,xpos,ypos,zpos+2.0);
GameTextForPlayer(playerid, "Nur für Admins!!!", 5000, 5);
}
}
}
return 1;
}

?>



Bei dem Script geht alles nur wenn ich dann in meinen Server gehe stürtzt mein GTA ab. Hab schon
andere Mods pobiert die gehen dann.

Zitatrecyler hat folgendes geschrieben:

new bool:cars[MAX_VEHICLES];

public OnGameModeInit(...)
{
cars[CreateVehicle(...)] = true;
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
if (newstate == 2)
{
if (!IsPlayerAdmin(playerid))
{
new vehid = GetPlayerVehicleID(playerid);
if (cars[vehid] == true)
{
new Float:xpos, Float:ypos, Float:zpos;
GetPlayerPos(playerid,xpos,ypos,zpos);
SetPlayerPos(playerid,xpos,ypos,zpos+2.0);
GameTextForPlayer(playerid, "Nur für Admins!!!", 5000, 5);
}
}
}
return 1;
}


Der Script geht auch. Danke. Aber ich würde es gern so haben wie vorhin wo die gar nicht erst
ensteigen können. Wo muss ich das ändern???
dödel, 10.10.2008, 20:28
ZitatPortable14 hat folgendes geschrieben:
nur wenn ich dann in meinen Server gehe stürtzt mein GTA ab

Das kann jawohl nicht an dem Code von mir liegen, aber du sagtest ja, bei anderen Modes
funktioniert es.

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
new bool:cars[MAX_VEHICLES];

public OnGameModeInit(...)
{
cars[CreateVehicle(...)] = true;
return 1;
}

Edit:
Vermutlich hast du einfach nur ein nicht existierendes Vehiclemodel drin, wenn es abstürtzt.

public OnPlayerEnterVehicle(playerid, vehicleid)
{
if (!IsPlayerAdmin(playerid))
{
if (cars[vehicleid] == true)
{
new Float:xpos, Float:ypos, Float:zpos;
GetPlayerPos(playerid,xpos,ypos,zpos);
SetPlayerPos(playerid,xpos,ypos,zpos+2.0);
GameTextForPlayer(playerid, "Nur für Admins!!!", 5000, 5);
}
}
}
return 1;
}
Portable14, 10.10.2008, 20:52
Zitatdödel hat folgendes geschrieben:

Das kann jawohl nicht an dem Code von mir liegen, aber du sagtest ja, bei anderen Modes
funktioniert es.

Ja sry hab eine Zahl vergessen vom Panzer :D


Danke jetzt funktioniert alles. Ich danke Euch.

Dann kann der Thread geschlossen werden! *hi*

Mfg
Florian
dödel, 10.10.2008, 20:57
ZitatPortable14 hat folgendes geschrieben:
Dann kann der Thread geschlossen werden!

Mfg
Florian


Kann, muss aber nicht, vllt. hat bald noch jemand die selben fragen und dann kann er sich hier
umsehen, oder möglichweise noch mehr Fragen zum Thema äußern *good*
GTAvision.com :: Forumregeln :: FAQ :: Impressum :: Kontakt :: RDRvision.com :: LANOIREvision.com :: MaxPayneVision.com
NetVisionWork.NET
.: © 2006-2014 by GTAvision.com :.

Rockstar GamesTake-Two Interactive Deutschland

Free Grand Theft Auto Downloads