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

Position: Tutorials » Workshop » In Bearbeitung » [VWW] [SA-MP v2] TextDraw Funktion » Druckansicht
dödel, 08.08.2007, 20:18
Scrollt lieber runter, unten dass von Rafioso ist schon getestet und funzt auch

Wer sich nicht durchfindet klickt einfach hier

Hier mal ein gutes Beispiel/kleines Tut wie TextDraw funktioniert.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
forward coinup(playerid);

new textdrawtimer;
new textdrawarray[MAX_PLAYERS];

new Text:txtVar1[10];
new Text:txtVar2[10];
new Text:txtVar3[4];

public OnPlayerDisconnect(playerid)
{
textdrawarray[playerid] = 0;
TextDrawDestroy(txtVar1[playerid]);
TextDrawDestroy(txtVar2[playerid]);
TextDrawDestroy(txtVar3[playerid]);
return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{

if (strcmp(cmd, "/login", true) == 0)
{
//blabla
textdrawarray[playerid] = 1;
//blabla
return 1;
}

return 0;
}

public coinup(playerid)
{
for (new i; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && textdrawarray[i] == 1)
{
TextDrawDestroy(txtVar1[i]);
TextDrawDestroy(txtVar2[i]);
TextDrawDestroy(txtVar3[i]);

txtVar3[3] = TextDrawCreate(20.0, 420.0, "~r~Kills:                                                       
~g~Bank: $");
TextDrawLetterSize(txtVar3[3], 0.5, 2.5);

new smallstr[3];
format(smallstr,2,"%d", kills[i]);
txtVar1[i] = TextDrawCreate(60.0, 420.0, smallstr);
TextDrawLetterSize(txtVar1[i], 0.5, 2.5);


new smallstr2[3];
format(smallstr3,8,"%d", bank[i]);
txtVar2[i] = TextDrawCreate(540.0, 420.0, smallstr2);
TextDrawLetterSize(txtVar2[i], 0.5, 2.5);

TextDrawShowForPlayer(i,txtVar1[i]);
TextDrawShowForPlayer(i,txtVar2[i]);
TextDrawShowForPlayer(i,txtVar3[i]);
}
}
return 1;
}

public OnGameModeExit()
{
KillTimer(textdrawtimer);
}


Und weiß einigermaßen was fehler verursacht.

-als erstes sollte die Anzahl der gezeigten
Zahlen nicht über 9 sein
-bei der Geldanzahl (bank) sollten es nichtmal
über 8 sein
-wenn unter "format" ein "$" oder ähnliches ist
steht gar nichts da
(das war mein oben stehender Fehler)
-natütlich sollten die koordinaten
nicht wie unten gezeigt so groß sein
denn sonst ist es natürlich nicht im Bild
Code:
1
2
3
4
5
6
format(smallstr3,9,"$ %d", bank[playerid]);
//---------------^--^
//--------------2Fehler
txtVar3[i] = TextDrawCreate(1540.0, 1420.0, smallstr3);
//-----------------------------^-------^
//---------------------------viel zu hoch


-man sollte auch vermeiden "TextDrawDestroy"
bei normalen Texten zu benutzen

Code:
1
2
3
4
5
6
7
8
TextDrawDestroy(txtVar3[i]);
//^^^^^^^^^^^^^^^^^^^^^^^^^^
//Das gehört unter: "OnPlayerDisconnect"

txtVar3[3] = TextDrawCreate(20.0, 420.0, "~r~Kills:                                                       
~g~Bank: $");
//--------------------------------------------------------------------------------------------------
---------------^
//-----------------------------------------------------------------------wie oben steht kommt das Ze
ichen dann hierhin
TextDrawLetterSize(txtVar3[3], 0.5, 2.5);

-natürlich kommt TextDrawDestroy bei diesen TextDraw´s
auch in die selbe Funktion
Code:
1
2
3
4
5
6
7
8
public coinup(playerid)
{
//blabla
TextDrawDestroy(txtVar1[i]);
TextDrawDestroy(txtVar2[i]);
//blabla
return 1;
}


ABER: Ich habs bes jetzt nur alleine Testen können,
das heißt ich weiß noch nicht ob alles nur bei Player-ID 0
sondern auch bei allen anderen dasteht.
Denn bei Player-ID 0 und den anderen,
ist schon bei kleinen fehlern ein Unterschied.

Ich denke aber das alles so richtig ist.

PS: Das Tut ist noch nicht ganz durchgeprüft, ich kann das spätestens erst ab 15. mit mehreren
Spieler Testen.
Rafioso, 08.08.2007, 21:36
So wie du das in dem public machs mit dem "for" hat das keinen Sinn.
Dort benutzt du "i" und später wieder "playerid".
Ich bin mir ziehmlich sicher, dass das mich 100%ig laufen wird.

Mach überall ein "i" draus.
Auch bei IsPlayerConnected!

Dann sollte es klappen.

Im übrigen frage ich mich warum du gleich 3 mal ein TextDraw anzeigen möchtest.
Arbeite mit String und mach doch alles in ein TextDraw rein :)

Ich hab es so gemacht...viel einfacher :)

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <a_samp>

new textdrawtimer;

new killsvonplayer[MAX_PLAYERS];
new Text:anzeige;

forward Anzeige();


public OnGameModeInit()
{
   textdrawtimer = SetTimer("Anzeige",1000,1);
   AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425,25,100,24,500,38,100);
   return 1;
}

public OnGameModeExit()
{
    KillTimer(textdrawtimer);
   return 1;
}


public Anzeige()
{
 for (new i; i < MAX_PLAYERS; i++)
 {
    if(IsPlayerConnected(i))
    {
    new Float:lebenvonplayer;
   killsvonplayer[i] = GetPlayerScore(i);
   GetPlayerHealth(i,lebenvonplayer);

   new string[256];
   format(string, sizeof(string),"Kills:~g~ %d ~w~Leben:~g~ %.1f",killsvonplayer,lebenvonplayer);
   TextDrawDestroy(anzeige);
   anzeige = TextDrawCreate(50.0, 420.0, string);
   TextDrawLetterSize(anzeige, 0.5, 2.5);
   TextDrawShowForPlayer(i,anzeige);
   }
 }
}


=) =) :D :D =) =)
dödel, 08.08.2007, 22:02
daran hab ich gar nicht gedacht, mit
format(string, sizeof(string),"Kills:~g~ %d ~w~Leben:~g~ %.1f",killsvonplayer,lebenvonplayer);
//-------------------^

geht das viel besser als mit ner Zahl
Rafioso, 09.08.2007, 02:30
ACHTUNG DAS HIER WURDE GETESTET UND FUNKTIONERT

Den ganzen Tag war ich heute an dem blöden TextDraw dran.....
Bis ich mal versucht habe 2 for-Schleifen zu machen und seitdem klappts.....

Den Text in ein Array zu packen soll anscheinend von Nützen sein...habs aber auch ohne probiert und
funktionierte auch einwandfrei :)
also das hier:

Code:
1
new Text:darstellungunten[100];


So genug gelabert, ich habe hier ein Code geschreiben, was die aktuellen Kills und die
Lebensenergie( auf eine Stelle nach dem Komma) anzeigt!
Die Kills werden nicht aus gespeicherten Daten geladen sonder sind die aktuellen von dem laufendem
Gamemode!

Lange Rede kurzer Sinn:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <a_samp>

new textdrawtimer;
new Text:darstellungunten[100];
new killsvonplayer[MAX_PLAYERS];


forward Anzeige(playerid);


public OnGameModeInit()
{
   textdrawtimer = SetTimer("Anzeige",1000,1);
   
   SetGameModeText("Blank Script");
   AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425,25,100,24,500,38,100);
   return 1;
}

public OnGameModeExit()
{
    KillTimer(textdrawtimer);
   return 1;
}


public Anzeige(playerid)
{
    new string[256];
   for(new i=0; i<MAX_PLAYERS; i++)
       {
          if (IsPlayerConnected(i))
             {
                TextDrawDestroy(darstellungunten[i]);
                }
        }

   for(new i=0; i<MAX_PLAYERS; i++)
       {
          if (IsPlayerConnected(i))
             {
                 new Float:lebenfloatvonplayer[MAX_PLAYERS];
               killsvonplayer[i] = GetPlayerScore(i);
               GetPlayerHealth(i,lebenfloatvonplayer[i]);
               
               killsvonplayer[i] = GetPlayerScore(i);
               
               format(string, sizeof(string),"Kills:~g~ %d    ~w~Leben:~g~ %.1f",killsvonplayer[i],l
ebenfloatvonplayer[i]);
               darstellungunten[i] = TextDrawCreate(50.0, 420.0, string);
               TextDrawLetterSize(darstellungunten[i], 0.5, 2.5);
               TextDrawShowForPlayer(i,darstellungunten[i]);
            }
      }
}


public OnPlayerDeath(playerid, killerid, reason)
{

   SendDeathMessage(killerid,playerid,reason);
   SetPlayerScore(killerid,GetPlayerScore(killerid)+1);

   return 1;
}


=) =) :D :D =) =)
dödel, 09.08.2007, 12:32
Ne denn ist ja gut bei mir kam nur das nächste Problem,
den nach ca. 2 min sin die Zahlen verschwunden.
Habs Video unten im Anhang
(bei der Verbindung ha ich allerdings die
Qualität *etwas* runtergestellt,
aber man kann deutlich erkenn wie die Zahlen von rechts nach links
im sekundentakt verschwinden.
______________________________________________

ZitatRafioso hat folgendes geschrieben:
ICH BIN EIN WEIB!
ICH KANN MIT MEHREREN SACHEN GLEICHZEIT BESCHÄFTIGT SEIN!
>>>>> SORRY <<<<<


Warum sollten wir das denn nicht können :D

ZitatRafioso hat folgendes geschrieben:
ICH BIN EIN WEIB!

Und das glaub ich jetz nicht.
Rafioso, 09.08.2007, 14:01
Ich weiß ja nicht wie du das bei dir gemacht hast, aber ich hab gestern knapp 15 minuten auf einem
Testserver ohne Fahrzeuge und nicht mit 4 Leutet getestet...so gegegn 02:00 Uhr
Und es klappt einwandfrei.
Vll. hat es doch etwas mit den Arrays zu tun. Hattest du die bei dir drinnen?

=) =) :D :D =) =)
dödel, 09.08.2007, 14:27
Ich weiß, bei deinem klappt alles Einwandfrei ich hab´s sogar schon erweitert.
Bilder im Anhang.

oben nicht eingeloggt
unten eingeloggt
Rafioso, 09.08.2007, 14:32
Freut mich zu hören :)

=) =) :D :D =) =)
XCorE, 09.08.2007, 15:18
Nur das mit dem GetPlayerScore das nimmt ja auch die Team kills und so mit,oder wenn du /kill
machst,has du denn TDM oder Dm?
Rafioso, 09.08.2007, 16:18
Stimmt doch gar nicht.
Du kannst so oft /kill eingeben wie du willst....bleibt 0.

Ich übrigen ist das da oben kein fertiges Script, also weder DM noch TDM. Obwohl es eher zu DM
hintendiert ;)

Ich habe das "public OnPlayerDeath" nur miteingefugt, damit man sieht wie die Kills anzeige erhöht
wird, wenn man einen umbringt.

Ob du daraus nun ein TDM machst oder was auch immer, bleibt ja dir überlassen.


//EDIT
Ich würd nen Timer sogar auf 100 oder weniger stellen, weil dann läufts flüssiger ab.

=) =) :D :D =) =)
XCorE, 09.08.2007, 21:15
ja,stimmt,aber so mein ich das garnicht,ich mein ja generell,ach ka,ich sollt echt ma überlegen...
dödel, 10.08.2007, 18:38
Hab´s jetz nochma mit nem Zapfseulen Lotto erweitert
(Zapfseulen Lotto: Werner4)
Recycler, 11.08.2007, 16:52
Mh, also der Code vom VWW-Server ist viel kürzer und funktioniert perfekt ;-)
Desweiteren läuft der VWW-Code sehrwohl mit Array, man muss die Sache nur anders angehen als mit
normalen Variablen mit Arrays.

MfG
Recycler
Graf, 31.08.2007, 21:57
Kann mir bitte jemand helfen, ich will die KM/H anzeige von Recycler, als Textdraw machem, das war
mein letzter versuch:
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
27
28
29
public UpdateSpeed(){
new Float:x,Float:y,Float:z;
new Float:distance,value,string[256];
for(new i=0; i<SLOTS; i++) {
if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i)){
GetPlayerPos(i, x, y, z);
distance = floatsqroot(floatpower(floatabs(floatsub(x,SavePlayerPos[i][LastX])),2)+floatpower(floata
bs(floatsub(y,SavePlayerPos[i][LastY])),2)+floatpower(floatabs(floatsub(z,SavePlayerPos[i][LastZ])),
2));
value = floatround(distance * 2500);
if(UpdateSeconds > 1){
value = floatround(value / UpdateSeconds);
}
if(SpeedMode){
format(string,sizeof(string),"~r~%d MPH",floatround(value/1600));
GameTextForPlayer(i, string, 1100, 5);
}
else for(new a=0; a<MAX_VEHICLES; a++){
if(IsPlayerConnected(a) && IsPlayerInAnyVehicle(a)){
format(string,sizeof(string),"                              HM/H:~g~ %d   ",floatround(value/1000));
TextDrawCreate(50.0, 420.0, string);
TextDrawLetterSize(darstellungunten[a], 0.5, 2.5);
TextDrawShowForPlayer(a,darstellungunten[a]);
}
}
SavePlayerPos[i][LastX] = x;
SavePlayerPos[i][LastY] = y;
SavePlayerPos[i][LastZ] = z;
}
}
}
Graf, 01.09.2007, 21:16
Dacht ich mir schon das es keiner weis :-)
Rafioso, 01.09.2007, 21:25
LOL 24/7 Support was?

=) =) :D :D =) =)
XCorE, 02.09.2007, 00:49
woher soll er denn wissen welchen TextDraw er anzeigen soll,vielleicht solltest du ma bei
textdrawcreate noch davor darstellungen = machen also darstellungen = TextDrawCreat(....)
Recycler, 02.09.2007, 14:49
ZitatGraf hat folgendes geschrieben:
Dacht ich mir schon das es keiner weis :-)


Nö, wenn du es nicht besser erkärst...glaubst du ich mach deinen ganzen Mist und bekomme nur ein
"das hab ich schon" Script? Wie wärs, wenn du uns sagen könntest, was daran nicht funktioniert! Ich
gebe Support für meine Scripte. Wer daran herumbastelt und dafür Support haben will, hat keinen
Anspruch auf Soforthilfe, dass das mal klar ist.

Zitat(WCK)g_sTaRd&G hat folgendes geschrieben:
woher soll er denn wissen welchen TextDraw er anzeigen soll,vielleicht solltest du ma bei
textdrawcreate noch davor darstellungen = machen also darstellungen = TextDrawCreat(....)


Korrekt.

MfG
Recycler
JKS, 19.10.2007, 23:19
ZitatRafioso hat folgendes geschrieben:
ACHTUNG DAS HIER WURDE GETESTET UND FUNKTIONERT

Den ganzen Tag war ich heute an dem blöden TextDraw dran.....
Bis ich mal versucht habe 2 for-Schleifen zu machen und seitdem klappts.....

Den Text in ein Array zu packen soll anscheinend von Nützen sein...habs aber auch ohne probiert und
funktionierte auch einwandfrei :)
also das hier:

Code:
1
new Text:darstellungunten[100];


So genug gelabert, ich habe hier ein Code geschreiben, was die aktuellen Kills und die
Lebensenergie( auf eine Stelle nach dem Komma) anzeigt!
Die Kills werden nicht aus gespeicherten Daten geladen sonder sind die aktuellen von dem laufendem
Gamemode!

Lange Rede kurzer Sinn:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <a_samp>

new textdrawtimer;
new Text:darstellungunten[100];
new killsvonplayer[MAX_PLAYERS];


forward Anzeige(playerid);


public OnGameModeInit()
{
   textdrawtimer = SetTimer("Anzeige",1000,1);
   
   SetGameModeText("Blank Script");
   AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425,25,100,24,500,38,100);
   return 1;
}

public OnGameModeExit()
{
    KillTimer(textdrawtimer);
   return 1;
}


public Anzeige(playerid)
{
    new string[256];
   for(new i=0; i<MAX_PLAYERS; i++)
       {
          if (IsPlayerConnected(i))
             {
                TextDrawDestroy(darstellungunten[i]);
                }
        }

   for(new i=0; i<MAX_PLAYERS; i++)
       {
          if (IsPlayerConnected(i))
             {
                 new Float:lebenfloatvonplayer[MAX_PLAYERS];
               killsvonplayer[i] = GetPlayerScore(i);
               GetPlayerHealth(i,lebenfloatvonplayer[i]);
               
               killsvonplayer[i] = GetPlayerScore(i);
               
               format(string, sizeof(string),"Kills:~g~ %d    ~w~Leben:~g~ %.1f",killsvonplayer[i],l
ebenfloatvonplayer[i]);
               darstellungunten[i] = TextDrawCreate(50.0, 420.0, string);
               TextDrawLetterSize(darstellungunten[i], 0.5, 2.5);
               TextDrawShowForPlayer(i,darstellungunten[i]);
            }
      }
}


public OnPlayerDeath(playerid, killerid, reason)
{

   SendDeathMessage(killerid,playerid,reason);
   SetPlayerScore(killerid,GetPlayerScore(killerid)+1);

   return 1;
}


=) =) :D :D =) =)



Ok,hab das alles in mein scriptum richtig eingefügt,doch ich check nix von textdraw xD,wie oder was
muss ich jetz ändern,damit es an meinen clan war angepasst ist(NSG/GKT vs UvG)
Rafioso, 19.10.2007, 23:40
Wie du daraus ein Clanwar blabla machst steht doch im anderen Thread! Und es funktioniert.
Wenn du dich mit der Materie nicht auskennst, solltest du dich langsam daran einarbeiten.
Im ersten Beitrag hat dödel ein wenig erklärt ;)
Alles andere erklärt sich von selbst, wenn man ein wenig englisch kann.
NSG ? Ahja, na dann wird auch hoffentlich ein Vermerk in eurem Script auf uns gemacht ;)


=) =) :D :D =) =)
JKS, 19.10.2007, 23:45
Ja n vermekr wenn da salles klappt,aber noch n paar fragne hab es so wie in grafs thread jetz
im server steht jetz

NSGGKT:0,0UvG:100,0

woran merkt der server ob ein uvg ein punkt gemacht hat und wann ein nsg/gkt einen gemacht hat?
Rafioso, 20.10.2007, 00:05
Du hast meine Verbesserung nicht übernommen ;)

Des Weiteren hat das nichts mit dem Thread zu tun, also kannst du ruhig beim Clanwar Thread
antworten.

=) =) :D :D =) =)
Graf, 21.10.2007, 16:21
Ich versteh das leider immer noch nich mit der Anzeige :-( . Kann mir bitte jemand das machen?
Rafioso, 21.10.2007, 16:28
Was denn?
Musst schon genauer beschreiben;)

=) =) :D :D =) =)
dödel, 21.10.2007, 16:32
Falls sich das auf deinen letzten Post hier bezieht:

Genau das selbe hab ich vor 2Wochen erst gebaut :D

Nur könnte meins bisschen kompliziert/umständlich aussehen :roll:

Denn musst du aber das Komplette SpeedUpdate von dir rausnehmen ;-)

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
new Text:carspeed[100];

textdrawtimer = SetTimer("coinup",UpdateSeconds*1000,1);

public OnGameModeExit()
{
KillTimer(textdrawtimer);
return 1;
}

public Anzeige(playerid)
{
new stringcar[256];
    
for(new i=0; i<MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i))
{
TextDrawDestroy(carspeed[i]);
}
}
   
for(new i=0; i<MAX_PLAYERS; i++)
{
    
if (IsPlayerConnected(i))
{
   
if(IsPlayerInAnyVehicle(i))
{
new Float:x[MAX_PLAYERS],Float:y[MAX_PLAYERS],Float:z[MAX_PLAYERS];
new Float:distance[MAX_PLAYERS],value[MAX_PLAYERS];

GetPlayerPos(i, x[i], y[i], z[i]);
distance[i] = floatsqroot(floatpower(floatabs(floatsub(x[i],SavePlayerPos[i][LastX])),2)+floatpower(
floatabs(floatsub(y[i],SavePlayerPos[i][LastY])),2)+floatpower(floatabs(floatsub(z[i],SavePlayerPos[
i][LastZ])),2));
value[i] = floatround(distance[i] * 2500);

if(UpdateSeconds > 1){
value[i] = floatround(value[i] / UpdateSeconds);
}
   
format(stringcar,sizeof(stringcar),"~r~%d ~w~KM/H",floatround(value[i]/1000));
   
SavePlayerPos[i][LastX] = x[i];
SavePlayerPos[i][LastY] = y[i];
SavePlayerPos[i][LastZ] = z[i];
   
}
else
{
format(stringcar, sizeof(stringcar)," ");
}
   
carspeed[i] = TextDrawCreate(270.0, 380.0, stringcar);
   
TextDrawLetterSize(carspeed[i], 0.5, 2.5);
   
TextDrawShowForPlayer(i,carspeed[i]);

}
   
}
return 1;
}
Graf, 21.10.2007, 19:54
Rafioso ich meine das, wie man das macht das ein bestimmtes team punkte bekommt. Ich hab das mit
BDK = GetPlayerScore((strfind(PlayerName(playerid), "BDK", true) != -1)); und gTeam[playerid] =
TEAM_BDK) versucht, aber wie soll man BDK und UvG denn definieren? Das der Player aus dem Team
seine punkte mit anderen aus dem team zusammen gerechnet und addiert werden, sodass dann die Zahl
beim team dort steht.
Rafioso, 21.10.2007, 23:37
Such mal nach "Clanwar" und dann schau dir dieses an -> TDM Tutorial :)
=) =) :D :D =) =)
Graf, 22.10.2007, 18:01
Danke, aber Sorry, genau so sieht der bei mir aus, außer das der OnPlayerSpawn (dank Recycler´s
Playername) so aussieht bei mir
Code:
1
2
3
4
5
6
7
8
9
10
11
public OnPlayerSpawn(playerid)
{
   printf("OnPlayerSpawn(%d)", playerid);
   if(strfind(PlayerName(playerid), "BDK", true) != -1)
   SetPlayerColor(playerid, COLOR_RED);
   if(strfind(PlayerName(playerid), "UvG", true) != -1)
   SetPlayerColor(playerid, COLOR_BLUE);
    new Float:oX, Float:oY, Float:oZ;
   PlayerPlaySound(playerid,1098,oX,oY,oZ);
   return 1;
}
Rafioso, 22.10.2007, 21:33
o_O das Playername von ihm (SA-MP v2 Scriptbeispiele) sieht aber ganz anders aus.....

=) =) :D :D =) =)
Graf, 23.10.2007, 16:35
Is ja nur so in etwa, aber mit hilfe davon hab ichs gemacht.
Rafioso, 23.10.2007, 19:41
Wenn du mir erklären kannst, was

Code:
1
if(strfind(PlayerName(playerid), "BDK", true) != -1)


bringen soll, dann helfe ich gerne weiter ;)

=) =) :D :D =) =)
Graf, 24.10.2007, 17:09
Ja is ganz einfach
Code:
1
2
    if(strfind(PlayerName(playerid), "BDK", true) != -1)
    SetPlayerColor(playerid, COLOR_RED)
Also wenn ein BDK Spieler spawnt, dann hat er die Farbe Rot, sons nix.
Rafioso, 24.10.2007, 20:43
Achso....
der sucht quasi im Spielernamen nach dem Wort BDK...ist zwar unsicher aber egal.

Na du könntest einfach z.B.


Code:
1
2
3
    if(strfind(PlayerName(playerid), "BDK", true) != -1){
    SetPlayerColor(playerid, COLOR_RED);
    SetPlayerTeam(playerid, 0);} //0 = die Team-ID


machen. Aber du musst oben wie in meinem Tutorial z.B.

Code:
1
#define TEAM_BDK 0


hinschreiben.


=) =) :D :D =) =)
Graf, 29.10.2007, 18:59
Danke, aber was bringt mir jetz das wenn BDK in Team 0 und UvG Team 1 ist?
Rafioso, 29.10.2007, 21:53
Na damit die 2 Teams voneinander unterschieden werden ;)

Du musst das...

Code:
1
SetPlayerTeam(playerid, 0);} //0 = die Team-ID


nochmal hinschreiben, aber diesmal mit ID 1.

Und halt nochmal das team mit 1 definieren.

=) =) :D :D =) =)
Graf, 29.10.2007, 21:59
Hab ich aber wie soll ich das bei der Anzeige verwenden?
TwIsTeR, 30.10.2007, 12:53
Hi, ich wollte ma nachfragen ob es möglich ist die Punkte anzeige nur dann anzeigen zu lassen wenn
mann ne dm Areana betritt?
Rafioso, 30.10.2007, 21:01
ZitatGraf hat folgendes geschrieben:
Hab ich aber wie soll ich das bei der Anzeige verwenden?


Öhm du hast deswegen schonmal nen Thread erstellt und ich hab die Lösung reingeschrieben ;)
Schauss dir an und lerne es zu verstehen.

http://forum.vww-team.de/posts_50_696_1.html


=) =) :D :D =) =)
Recycler, 09.11.2007, 22:19
ZitatRecycler hat folgendes geschrieben:
Mh, also der Code vom VWW-Server ist viel kürzer und funktioniert perfekt ;-)
Desweiteren läuft der VWW-Code sehrwohl mit Array, man muss die Sache nur anders angehen als mit
normalen Variablen mit Arrays.

MfG
Recycler


guckst du hier!

Ist im Mode drin, den Code könnt ihr euch raussuchen, sollte simpler sein als die schon geposteten
Scripte ;-)

MfG
Recycler
dödel, 09.11.2007, 22:28
Mhh.. wo ich das gerade sehe, bemerke ich, das ich schon längst genauso mache :D

Aber eigentlich spart man sich soch auch nur ein paar new´s
Recycler, 09.11.2007, 22:31
Ich meinte das ja jetzt für das Tutorial, das sollte keine Hilfe speziell für dich sein.
Und man spart mehr als ein paar Variablen, das ist ja ein anderes System, läuft über 2 getrennte
Schleifen und meiner Meinung nach ist es schlichtweg "smarter" als die schon geposteten Scripte
aber was man benutzt ist letztendlich egal.

MfG
Recycler

PS: Und selbst wenn es nur ein paar new's sein würden, man spart was und das ist ja

ZitatRafioso hat folgendes geschrieben:

das A und O beim Scripten!


Dem stimme ich auch zu :D
dödel, 09.11.2007, 22:33
Hast schon recht,
deins is auch viel übersichtlicher ;)

Edit:
Aber jetz doch lieber B2T,
bevor die User deinen eigentlich Post übersehen :D
FloRaX, 12.11.2007, 12:44
hmmm ich hab das textdrwa so

Code:
1
2
3
4
5
6
7
8
new Text:txt;
public OnPlayerConnect(playerid)
{  
   txt = TextDrawCreate(10.0, 434.0, "Irgend ein Text");
   TextDrawUseBox(txt, 3);
   TextDrawShowForPlayer(playerid, txt);
return 1;
}


Ist das so richtig ?
dödel, 16.11.2007, 00:22
@Michael

Is zwar schon ne Weile her,
aber hier geht es eher um TextDraw,
das sich aktualisiert, ansonsten stimmt deins schon ;)

--------------------------------------------------------------------------------

Linuxserver-Besitzer - *guckstdu*

Nun zum Wesentlichen:


Ich habe einen Unterschied im TextDraw vom
Windows-Server und Linux-Server entdeckt.


Das Problem besteht aber auch nur, wenn man diese
TextDraw nur bei bestimmen Positionen erzeugt,
wie if(IsPLayerInAnyVehicle(playerid))


Das Beispiel beruht auch auf IsPlayerInAnyVehicle.

Also, zum Fehler bei Linux (der übrigens crash´s verursacht) :

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
27
28
29
30
31
32
33
34
35
<?
//alles im Public ;)

for (new a; a < MAX_PLAYERS; a++)
{
TextDrawDestroy(TextDraw1[i]);
TextDrawDestroy(TextDraw2[i]);
}

for (new i; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i))
{

new TXTDraw1[256];
new TXTDraw2[256];

if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i))
{
format(TXTDraw1, sizeof(TXTDraw1),"Beispiel: %d", beispielarray[i]);
TextDraw1[i] = TextDrawCreate(15.0, 50.0, TXTDraw1[i]);
TextDrawLetterSize(TextDraw1[i], 0.5, 2.5);
TextDrawShowForPlayer(i,TextDraw1[i]);
}

format(TXTDraw2, sizeof(TXTDraw2), "Beispiel2: %d",beispielarray2[i]);
TextDraw2[i] = TextDrawCreate(15.0, 50.0, TextDraw2[i]);
TextDrawLetterSize(TextDraw2[i], 0.5, 2.5);
TextDrawShowForPlayer(i,TextDraw2[i]);

}
}

//ende
?>


Sieht ja im übrigen ganz ok aus,
auch beim Testserver vom Rechner aus keine
Probleme, aber man lädt es schön aufn Root (linux) ,
startet in Ruhe, connected zum Server,
Steigt Gemütlich in ein Auto,
sieht alles i.o. aus,
aber kaum steigt man aus, crasht es.


Ich denke der Fehler liegt darin,
das bei Linux, die ID´s anders aufgenommen werden.
(hier werden sie halt einfach überschrieben)

Aber um das zu verhindern,
sollte es bei Linux so aussehen:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?
//alles im Public ;)

for (new a; a < MAX_PLAYERS; a++)
{
TextDrawDestroy(TextDraw1[i]);
TextDrawDestroy(TextDraw2[i]);
}

for (new i; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i))
{

new TXTDraw1[256];
new TXTDraw2[256];

if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i))
{
format(TXTDraw1, sizeof(TXTDraw1),"Beispiel: %d", beispielarray[i]);
TextDraw1[i] = TextDrawCreate(15.0, 50.0, TXTDraw1[i]);
TextDrawLetterSize(TextDraw1[i], 0.5, 2.5);
TextDrawShowForPlayer(i,TextDraw1[i]);
}
else //Dieses else, löst alle probleme
{
format(TXTDraw1, sizeof(TXTDraw1)," ");
TextDraw1[i] = TextDrawCreate(15.0, 50.0, TXTDraw1[i]);
TextDrawLetterSize(TextDraw1[i], 0.5, 2.5);
TextDrawShowForPlayer(i,TextDraw1[i]);
}

format(TXTDraw2, sizeof(TXTDraw2), "Beispiel2: %d",beispielarray2[i]);
TextDraw2[i] = TextDrawCreate(15.0, 50.0, TextDraw2[i]);
TextDrawLetterSize(TextDraw2[i], 0.5, 2.5);
TextDrawShowForPlayer(i,TextDraw2[i]);

}
}

//ende
?>



Aber für die kleinen, mache ich das else
noch ein bisschen einfacher/kürzer :-O

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

if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i))
{
format(TXTDraw1, sizeof(TXTDraw1),"Beispiel: %d", beispielarray[i]);
}
else //Dieses else, löst alle probleme
{
format(TXTDraw1, sizeof(TXTDraw1)," ");
}

TextDraw1[i] = TextDrawCreate(15.0, 50.0, TXTDraw1[i]);
TextDrawLetterSize(TextDraw1[i], 0.5, 2.5);
TextDrawShowForPlayer(i,TextDraw1[i]);


//ende
?>[code]


Ich hoffe, das hilft einigen Linux Server besitzern.
Rafioso, 16.11.2007, 00:45
Frage: Warum machst du beim "else" nicht einfach ein "TextDrawDestroy" ?

=) =) :D :D =) =)
dödel, 17.11.2007, 02:33
Liebe TextDraw suchtis :D


Es ist 02:08
und ich habe (zwar schon vor ca. 4h) eine neue
TextDraw variante augearbeitet.

Da sie nicht mit ständigem Zerstören und
neu erstellen arbeitet, ist sie auf jedenfall
viel sicherer.

Denn es wird nur einmal TextDrawCreate pro Text genutzt ;)
und kein einziges mal Destroy :D


Außerdem bin ich so lieb und
erkläre ales nochmal von anfang an:

(alle codes ohne ?> und <? übernehmen,
habs nur zur Markierung genutzt.)

Man setzt ganz simpel diese Variablen über Main()

Code:
1
2
3
4
5
6
7
8
9
10
11
<?

forward coinup(playerid);

new textdrawtimer;
new textdrawarray[MAX_PLAYERS];

new Text:TextDraw1[MAX_PLAYERS];
new Text:TextDraw2[MAX_PLAYERS];

?>



nun kommt der Timer in OnGameModeInit:

Code:
1
2
3
4
5
<?

textdrawtimer = SetTimer("coinup",1000,1);

?>


und zur sicherheit noch bei OnGameModeExit:

Code:
1
2
3
4
5
<?

KillTimer(textdrawtimer);

?>



nun das gesamte Public:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?

public coinup(playerid)
{
for (new i; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i))
{
if(textdrawarray[i] == 0)
{
TextDraw1[i] = TextDrawCreate(270.0, 380.0, " ");
TextDraw2[i] = TextDrawCreate(520, 200.0, " ");
TextDrawLetterSize(TextDraw1[i], 0.5, 2.5);
TextDrawLetterSize(TextDraw2[i], 0.5, 2.5);
TextDrawShowForPlayer(i,TextDraw1[i]);
TextDrawShowForPlayer(i,TextDraw2[i]);
textdrawarray[i] = 1;
}

if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i))
{
new string2[256];
new stringcarhealth[256];

new carhealthid[MAX_PLAYERS];
carhealthid[i] = GetPlayerVehicleID(i);
new Float:carhealth[MAX_PLAYERS];
GetVehicleHealth(carhealthid[i], carhealth[i]);

format(string2, sizeof(string2),"~w~Fahrzeug:~g~ %.1f",carhealth[i]);

TextDrawSetString(TextDraw1[i], string2);

}
else
{
TextDrawSetString(TextDraw1[i], " ");
}

// |

new string[256];

new Float:lebenfloatvonplayer[MAX_PLAYERS];
GetPlayerHealth(i,lebenfloatvonplayer[i]);

format(string, sizeof(string),"~n~~n~~n~~n~~n~~w~Leben:~g~ %.1f",lebenfloatvonplayer[i]);
TextDrawSetString(TextDraw2[i], string);

}
}
}

?>



wenn ihr es euch genau angesehen habt,
müsstet ihr feststellen, das nur

TextDrawSetString(TextDraw2, string);

den Text ändert :P


Und nun ist es 02:29 (an dieser stelle des textes)
und ich bin fertig mit der erklärung.

Und nun:

http://planetsmilies.net/tired-sleeping-smiley-4667.gif

http://planetsmilies.net/tired-sleeping-smiley-4634.gif
dödel, 18.11.2007, 12:50
Zu erst witme ich mich mal Rafi´s alter Frage:
(das stimmt natürlich nicht mit neueren TextDraw überein.

ZitatRafioso hat folgendes geschrieben:
Frage: Warum machst du beim "else" nicht einfach ein "TextDrawDestroy" ?



Weil ansonsten Die Id´s von den neuen TextDraws nicht stimmen,
immerhin wenn ID 0 zerstört wird und danach ein anderes erstellt wird,
trägt das 2. ID 0 und denn würde es crashen, sobald es versucht
beide ID´s zu löschen.

_______________________________________________________________________

Aber nun zum Wesentlichen:

Das betrifft wieder nur Linux User, ob root oder auch so.
(obwohls für Win zur sicherheit auch besser wäre,
denn gehts ja auf Win und Linux ohne Fehler)


Also, die ergänzung ist ein einziger CMD,
da es bei OnGameModeExit auch nur crash´s
verursachen würde, kp aber ist einfach so.

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

if(strcmp(cmd, "/restart", true) == 0)
{
if(IsPlayerAdmin(playerid))
{
for(new a; a<MAX_PLAYERS; a++)
{
if(textdrawarray[a] == 1)
{
TextDrawSetString(TextDraw1[a], " ");
TextDrawSetString(TextDraw2[a], " ");
TextDrawHideForPlayer(a,TextDraw1[a]);
TextDrawHideForPlayer(a,TextDraw2[a]);
TextDrawDestroy(TextDraw1[a]);
TextDrawDestroy(TextDraw2[a]);
}
}

SendRconCommand("changemode Name_deines_game-modes"); //hier deinen DM namen eintragen
}
else SendClientMessage(playerid, COLOR_ADMIN, "Du musst mindestens Administrator sein!");
return 1;
}

?>



Das wird gebraucht, damit du deinen Mode
Fehlerfrei neustarten kannst ;)


Aber ob das nötig ist weiß ich nicht genau,
aber warum rausnehmen :P


Für Überflieger:
Diesen Code nicht einfügen,
er ist ja schon oben vorhanden:


Code:
1
2
3
4
5
6
7
8
<?

TextDrawSetString(TextDraw1[a], " ");
TextDrawSetString(TextDraw2[a], " ");
TextDrawHideForPlayer(a,TextDraw1[a]);
TextDrawHideForPlayer(a,TextDraw2[a]);

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