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

Position: Grand Theft Auto: San Andreas » Multiplayer » Scripte und kleine Codes » DM Arena » Druckansicht
McCool, 26.09.2009, 20:28
Hallo,

Ich bräuchte da mal eure Hilfe.

Undzwar habe ich eine DM Arena auf meinem Server.
Jezt würde ich gerne haben das wenn man /dm eingibt man 1. Zur Arena kommt, 2. Einem Team
zugewiesen wird ( Army, Terorosten) und 3. Wenn man Stirbt man wieder an den Spawn der Arena kommt.

Wäre nett wenn mir jemand helfen könnte.

MfG

McCool
Rafioso, 26.09.2009, 22:14
Hi.

Zu 1.:
Erstell einfach ein Teleport mit SetPlayerPos.

Zu 2. & 3.:
Schau mal beim sftdm nach, da siehtst du, wie man Teams erstellt.

MfG
Rafioso
Robdeflop1, 27.09.2009, 00:44
Hi

McCool, ich machs für dich^^
ich denk das werd ich hinbekommen.

Ich hab mir schonmal SFTDM angeschaut.
Aber das soll so gemacht werden, dass wenn man sich dahinteleportet,
aufgeteilt wird. Das wird ja dann mit randomspawn gemacht oda?
Un dann soll es nur 2 teams geben. Die eine rot die andere blau.
Dann sollen die teams verschiedene waffen bekommen.
Das teleportmenu-script hat is ja durch diese case 0... gemacht.
Wie kann ich einfügen, dass der spieler, der da spawnt, ca 3 sekunden lang gefreezed is, damit die
map in der zeit laden kann?
Sonst fällt man ins wasser.

Aber ansonsten versteh ich das glaube ich.
Ich werds mal versuchen.
Vielleicht könnt ihr mir ja ein weinig helfen.


MFG, RoB
Rafioso, 27.09.2009, 00:52
ZitatRobdeflop1 hat folgendes geschrieben:
Wie kann ich einfügen, dass der spieler, der da spawnt, ca 3 sekunden lang gefreezed is, damit die
map in der zeit laden kann?
Sonst fällt man ins wasser.

Ich bin mir nicht sicher, aber wenn man "vereist" wird, dann kann man sich glaube ich nicht in X-
und Y-Richtung bewegen, wohl aber in Z-Richtung(Höhe). Deshalb wird das glaube ich nicht klappen.

Wenn du es dennoch testen willst, dann brauchst du lediglich einen Timer und eine eigene Funktion
mach_mich_warm. Mit dem Timer rufst du dann nach drei Sekunden die Funktion mach_mich_warm auf und
dort drinn befindet sich dann die Funktion TogglePlayerControllable.

MfG
Rafioso
Robdeflop1, 27.09.2009, 00:57
Hi

Das hab ich schonmal in einem anderen server gesehen.
Das mit toggleplayer... wusste ich.
es geht aber auch nicht den player ein bischen höher spawnen zu lassen, dafür ist die zeit zu kurz.
Was du mit mach_mich_warm meinst, weiß ich nicht^^
Ich bin im scripten nicht sooo erfahren xD

MFG, RoB
Rafioso, 27.09.2009, 01:10
ZitatRobdeflop1 hat folgendes geschrieben:
Was du mit mach_mich_warm meinst, weiß ich nicht^^


Eine selbst erstelle Funktion
Code:
1
2
3
4
5
6
7
8
9
10
11
//In deinem Command oder wo du es haben willst
TogglePlayerControllable(playerid, 0);
SetTimer("mach_mich_warm", 3000, 0);

//Irgendwo, nur nicht in einer anderen Funktion
forward mach_mich_warm(playerid);
public mach_mich_warm(playerid) //mach_mich_warm weil dem User kalt ist, immerhin ist er eingefroren
{
  TogglePlayerControllable(playerid, 1);
  return 0;
}
Robdeflop1, 27.09.2009, 12:01
aso, ok, thx :-)
Ich werds mal probieren

MFG, RoB
Rafioso, 27.09.2009, 12:12
ZitatRobdeflop1 hat folgendes geschrieben:
aso, ok, thx :-)
Ich werds mal probieren

MFG, RoB


Ja mach das mal, ich habs nämlich nicht getestet. :-O
Robdeflop1, 27.09.2009, 15:44
Hi

Habs grad getestet.
Ich hab dein script einfach ins script eingefügt. Funzt aber net -.-
Ich hab aber nochwas getestet.
Ich hab einfach PlayerControllable auf 0 gesetzt. Der Player ist auch in der hochachse gefreezed.
Jetzt muss ich nurnoch einen kleinen timer da reinbekommen.
Also so ungefähr:

ZitatZitat:
case 1:{
SetPlayerPos(playerid,-3144.5801,1741.7068,10.7973);
TogglePlayerControllable(playerid, 0);
SendClientMessageToAll(COLOR_YELLOW, "Ein Spieler hat meine DM Arena betreten!");}
//hier der Timer
TogglePlayerControllable(playerid, 1);


Kann mir einer helfen?

MFG, RoB

*EDIT:

Ich glaub ich habs selber xD
Mein Inetbroser hat nur die hälfte deines zitates angezeigt xD
Robdeflop1, 27.09.2009, 16:31
Es funktioniert, danke *wink*

MFG, RoB
Robdeflop1, 27.09.2009, 20:08
Hi

Hab´s eben nochmal mit jemand anderem getestet.
Aber diesmal is immer der zweite der sich dahinteleportet gefreezed.
Beim ersten der sich teleportet, funzt es. Aber der zweite is gefreezed.
Woran liegts? Need help

Danke schonmal im Vorraus

MFG, RoB

*edit:

Kann es was mit return 1/0 zu tun haben?
wofür is das eig?

MFG ,RoB
Robdeflop1, 27.09.2009, 20:32
So

Nochwas rausgefunden.
Ich hatte ID 0 un es hat geklappt. Egal ob erster oda zweiter.
Mein freund (McCool) hatte ID 1 un da wars auch egal wer als erstes oda als zweites teleportet hat.
Woran liegt das? Ich weiß einfach nit weiter.
Hier das script:

ZitatZitat:
#include
<a_samp>

#define COLOR_YELLOW 0xFFFF00AA

new Menu:Teleports;

public OnPlayerConnect(playerid)
{
SendClientMessage(playerid, COLOR_YELLOW, "/tele und gewünschten Ort auswählen!");
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{

if (strcmp("/tele",cmdtext, true, 10)==0)
{
Teleports = CreateMenu("TELEPORTS",2,200,100,150,100);
AddMenuItem(Teleports, 0, "Flugzeugschrottplatz");
AddMenuItem(Teleports, 0, "DM-Arena | by Robdeflop");
AddMenuItem(Teleports, 0, "LS-Flugzeughafen");
AddMenuItem(Teleports, 0, "SF-Flugzeughafen");
AddMenuItem(Teleports, 0, "LV-Flugzeughafen");
AddMenuItem(Teleports, 0, "NRG-Teststrecke");
ShowMenuForPlayer(Teleports, playerid);
TogglePlayerControllable(playerid, 0);
return 1;
}
return 0;
}
public OnPlayerSelectedMenuRow(playerid, row)
{

new Menu:Current = GetPlayerMenu(playerid);
//Teleports
if (Current == Teleports)
{
switch(row) {

case 0:{
SetPlayerPos(playerid,383.8395,2544.9424,16.5391);
TogglePlayerControllable(playerid, 1);}
case 1:{
SetPlayerPos(playerid,-3144.5801,1741.7068,10.7973);
TogglePlayerControllable(playerid, 0);
SetTimer("mach_mich_warm", 3000, 0);}
case 2:{
SetPlayerPos(playerid,2143.1462,-2542.4590,13.5468);
TogglePlayerControllable(playerid, 1);}
case 3:{
SetPlayerPos(playerid,-1347.3499,-232.4646,14.1484);
TogglePlayerControllable(playerid, 1);}
case 4:{
SetPlayerPos(playerid,1592.5164,1448.1063,10.8302);
TogglePlayerControllable(playerid, 1);}
case 5:{
SetPlayerPos(playerid,814.5911, -1434.7079, 22.1172);
TogglePlayerControllable(playerid, 1);}
}
}
return 1;
}


//ON MENU EXIT
public OnPlayerExitedMenu(playerid)
{
new Menu:Current = GetPlayerMenu(playerid);
if( Current == Teleports){
TogglePlayerControllable(playerid,1);}

return 1;
}


forward mach_mich_warm(playerid);

public mach_mich_warm(playerid) //mach_mich_warm weil dem User kalt ist, immerhin ist er eingefroren
{
TogglePlayerControllable(playerid, 1);
return 1;
}


Also nur bei der DM arena. (case 1)

Kann mir pls einer helfen?

MFG, RoB
Rafioso, 27.09.2009, 21:03
Ok,

dann ersetze mal
Code:
1
SetTimer("mach_mich_warm", 3000, 0);

gegen
Code:
1
SetTimerEx("mach_mich_warm", 3000, 0, "i", playerid);

vll. klappt das.

ZitatRobdeflop1 hat folgendes geschrieben:
Kann es was mit return 1/0 zu tun haben?
wofür is das eig?

Sagt nur aus, ob der Rückgabewert der Funktion true(1) oder false(0) ist. Du kannst es von mir aus
auch in 1 ändern, macht in diesem Beispiel glaube ich keinen Unterschied.
Robdeflop1, 27.09.2009, 21:09
Hi

Thx für die schnelle antwort.

Raus kommt das:

ZitatZitat:
F:\Rockstar Games Server\GTA San Andreas\filterscripts\tele.pwn(46) : warning 217: loose indentation
F:\Rockstar Games Server\GTA San Andreas\filterscripts\tele.pwn(46) : error 014: invalid statement;
not in switch
F:\Rockstar Games Server\GTA San Andreas\filterscripts\tele.pwn(46) : warning 215: expression has
no effect
F:\Rockstar Games Server\GTA San Andreas\filterscripts\tele.pwn(46) : error 001: expected token:
";", but found ":"
F:\Rockstar Games Server\GTA San Andreas\filterscripts\tele.pwn(46) : error 029: invalid
expression, assumed zero
F:\Rockstar Games Server\GTA San Andreas\filterscripts\tele.pwn(46) : fatal error 107: too many
error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.


:*(

Trotzdem erstmal danke.

MFG, RoB
Rafioso, 27.09.2009, 21:10
Ich glaube du hast beim Einfügen eine } gelöscht.

//Edit
PS. Eigentlich ist folgender Tag für Code gedacht (hier im Forum):

[code]lalala[/code]
Robdeflop1, 27.09.2009, 21:13
uuuups *peinlich*

Ich werds testen :-)
Robdeflop1, 27.09.2009, 21:44
Hi

Es funktioniert schonmal.

Damit wars das aber leider nicht.
Jetzt muss ich iwie machen, dass wenn man sich dahin teleportet, entweder ins terroristen team
kommt, oda ins army team. Also per zufallsgenerator.
Geht das iwie mit gRandomSpawn?
Dass mit dem Skin un den Waffen müsste ich hinbekommen.

Das SFTDM hab ich mir schonmal angeschaut, weiß aber nich wie ich das alles in einen kleinen
command reinbekommen soll :*(

Das soll dann aber nochmal unterteilt werden.
Wenn man in z.B. das Army team kommt, soll es 5 slots geben. Also 5 spawns nebeneinnander. Wenn der
eine belegt ist, kommt der spieler auf einen anderen slot.
Un wenn kein slot mehr frei is, soll der spieler in das terroristen-team kommen. Wenn da auch
nichtsmehr frei ist, dann soll eine nachricht kommen, dass die Arena besetzt ist.

Ich hab aber kein plan von.
Ich wäre seeehr dankbar wenn mir einer helfen könnte.

MFG, RoB
Robdeflop1, 28.09.2009, 16:25
habs editiert, pls nochmal anschauen *bye*
Robdeflop1, 29.09.2009, 16:01
Hi

Das mit dem Randomspawn hab ich mittlerweile hinbekommen : )
Jetzt aber nochwas.
Ich weiß nit genau, wie ich es machen soll, dass wenn der player automatisch zur Pos1 gesetzt wird,
dass der dann in einen slot verteilt wird.
Also soll der dann, wieder umgesetzt werden^^
Ich weiß, komig, aber das muss klappen.
Das is ein simples Randmom script:

ZitatZitat:
new Float:RandomSpawn[][4] =
{
// Positions, (X, Y, Z and Facing Angle)
{-2796.9854, 1224.8180, 20.5429, 192.0335},
{-2454.2170, 503.8759, 30.0790, 267.2932},
{-2669.7322, -6.0874, 6.1328, 89.8853}
}


ZitatZitat:
public OnPlayerSpawn(playerid)
{
new iRandom = random(sizeof(RandomSpawn));
// SetPlayerPos to the random spawn information
SetPlayerPos(playerid, RandomSpawn[iRandom][0], RandomSpawn[iRandom][1],RandomSpawn[iRandom][2]);
SetPlayerFacingAngle to the random facing angle information
SetPlayerFacingAngle(playerid, RandomSpawn[iRandom][3]);
return 1;
}


Das hab ich genommen.

Jetzt will ich hinkriegen, dass der z.B. mit GetPlayerPos die pos bekommt.
Un wenn die z.B. genau blabla.bla, blabla.bla, blabla.bla entspricht, soll dann mit dem command
SetPlayerPos woanders hingeportet werden^^

Ich hab mir das iwie so vorgestellt:

{
getplayerpos(playerid);{
if ka-iwie-playerpos^^ = blabla.bla, blabla.bla, blabla.bla
{setplayerpos(playerid, blabla.bla, blabla.bla, blabla.bla);
else ka-iwie-playerpos^^ = blabla.bla, blabla.bla, blabla.bla
{setplayerpos(playerid, blabla.bla, blabla.bla, blabla.bla};
else return 1;
}

ACHTUNG: IS NUR NE NOTIZ

Versteht ihr was ich meine? könnt ihr mir das verwirklichen? ich hab ka wie ich das machen soll oO

MFG, RoB

Rafioso, 29.09.2009, 20:01
Wenn man weiß, was für Parameter GetPlayerPos erwartet, ist das doch Kinderleicht ;)
Code:
1
2
3
4
5
6
7
8
9
10
11
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);

if(x == blabla && y == blabla && z == blabla)
{
// muh
}
elseif(x == blabla_2 && y == blabla_2 && z == blabla_2)
{
//blub
}
Robdeflop1, 29.09.2009, 22:25
Hi

Thx : )

Ka, ich bin schon ne zeit lang am scripten (am lernen) aber das meiste versteh ich immernochnit
richtig. Meistens weiß ich nit wie ich dat schreiben soll, aber im kopf weiß ich jans jenau wie dat
sein muss.

Naja, ich denk dass ich das schaffen werde^^

Es kommen bestimmt noch mehr fragen xD

MFG, RoB
Robdeflop1, 29.09.2009, 22:41
HI

Ich hab wieder ein problem xD

ZitatZitat:
F:\Rockstar Games Server\GTA San Andreas\filterscripts\DMArenen.pwn(1369 -- 1370) : error 029:
invalid expression, assumed zero
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Error.


Das sind die zeilen 1369 -- 1370:

ZitatZitat:
else(x == -3373.8662 && y == 1720.5365 && z == 10.7912)
{


Was is diesmal falsch?
Ich habs schon mehrmals probiert.

Danke im Vorraus auf eine Antwort!

MFG, RoB
Rafioso, 30.09.2009, 00:40
Versuch mal die Koordinaten in einen String zu setzen.
Robdeflop1, 30.09.2009, 14:56
Hi

oO, ein string???
Dafür bin ich mal wieder zu blöde -.-
Wie geht das? :D

MFG, RoB
Robdeflop1, 30.09.2009, 16:49
oO

sry, wieder was doofes xD
du hast ja "elseif" gesagt.
Ich hab aber nur "esle" gemacht, weil ich dacht du hast dich verschrieben.
Du hast aber nur vergessen zwichen else un if ein leerzeichen zu setzten xD

Jetzt funzt es :D

MFG, RoB
Rafioso, 30.09.2009, 19:42
ZitatRobdeflop1 hat folgendes geschrieben:
Hi

oO, ein string???
Dafür bin ich mal wieder zu blöde -.-
Wie geht das? :D

MFG, RoB

Durchlesen: http://de.wikipedia.org/wiki/Zeichenkette#Syntax_f.C3.BCr_Literale

ZitatRobdeflop1 hat folgendes geschrieben:
oO

sry, wieder was doofes xD
du hast ja "elseif" gesagt.
Ich hab aber nur "esle" gemacht, weil ich dacht du hast dich verschrieben.
Du hast aber nur vergessen zwichen else un if ein leerzeichen zu setzten xD

Jetzt funzt es :D

MFG, RoB

Jop.
Robdeflop1, 30.09.2009, 22:10
omg xD
Das is ja einfach :D
Das nächste mal wikipedia ich^^

MFG, RoB
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