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

Position: Grand Theft Auto: San Andreas » Multiplayer » Scripte und kleine Codes » [SA-MP v2] Filterscript: Coinsystem & easyHUD » Druckansicht
Recycler, 02.05.2008, 16:44
Filterscript: Coinsystem & easyHUD v1.0

Viele von euch kennen mittlerweile die sogenannten 'Coins' auf Servern, mit denen man sich per Menü
diverse Fahrzeuge, Waffen etc. kaufen kann. Und hier habe ich für euch ein komplettes Coinsystem
samt einem TextDraw HUD.

Es besteht der Glaube, so ein Coinsystem sei kompliziert und aufwendig - ist es aber garnicht.
Sowas könnte eigentlich jeder spielend leicht selber machen. Siehe einmal nur das alte VWW-Script,
das ich entwickelt habe. In diesem Script, das es hier auch Open-Source zu downloaden gibt, ist
auch ein komplettes Coinsystem enthalten.

Was man dazu braucht?

Eine Array-Variable und 10 Minuten Denkzeit.

Da dies offensichtlich einigen Probleme bereitet, gibt es nun dieses Script.

Installation


1. Kopiert die .pwn Datei aus dem Archiv in euren filterscripts Ordner.
2. Öffnet die .pwn Datei, konfiguriert die #define Werte und compilt das Script.
3. Öffnet die Datei "server.cfg" in eurem SA-MP Ordner mit dem Editor.
4. Erstellt eine Zeile "filterscripts coins_easyHUD" und speichert die Datei ab.

Features


-> Coins: Jeder Spieler bekommt per Kill und alle <x> Minuten eine bestimmte Coinanzahl.
-> Menü: Mit der Taste 'nach hinten sehen' öffnet sich das Coinmenü, indem ihr euch Cars, Bikes und
Waffen kaufen könnt.
-> HUD: Am unteren Bildschirmrand wird ein HUD eingeblendet, welches Coins, Kills und Deaths zeigt.


Bitte beachtet, das es zu Problemen mit euren GameModes kommen kann, falls sich Variablen/Defines
überschneiden.
Falls ihr Bugs oder Fehler im Script entdeckt, bitte sofort hier posten.

http://dracoblue.net/pawn/ready_for_samp_0_2.png

Das Script gibt es nur in einer 0.2 Version.

MfG
Recycler

----------------------------
Version Log
FloRaX, 02.05.2008, 17:16
Juhuuu endlich!!!
Darauf hab ich mich gefreut :P
Ähm kannst du auch sowas nur für Admins einbauen mit /givecoins coind?
Sh3LteR, 02.05.2008, 17:31
ZitatMichael hat folgendes geschrieben:
Juhuuu endlich!!!
Darauf hab ich mich gefreut :P
Ähm kannst du auch sowas nur für Admins einbauen mit /givecoins coind?

Da ist ja die PWN dabei also wirste es schon selber auch schaffen ;)
Recycler, 02.05.2008, 17:49
ZitatMichael hat folgendes geschrieben:
Juhuuu endlich!!!
Darauf hab ich mich gefreut :P
Ähm kannst du auch sowas nur für Admins einbauen mit /givecoins coind?

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
if (strcmp(cmd, "/givecoins", true) == 0)
{
new tmp[255];
tmp = strtok(cmdtext, idx);
if (strlen(tmp))
{
new pid = strval(tmp);
tmp = strtok(cmdtext, idx);
if (strlen(tmp))
{
new coin = strval(tmp);
if (IsPlayerConnected(pid))
{
if (IsPlayerAdmin(playerid))
{
CallRemoteFunction("GivePlayerCoins", "dd", pid, coin);
new msg[255];
format(msg, sizeof(msg), "***Du hast von einem Admin %d Coins bekommen!", coin);
SendClientMessage(pid, COLOR_WARNING, msg);
}
else SendClientMessage(playerid, COLOR_WARNING, "***Du bist kein Admin!");
}
else SendClientMessage(playerid, COLOR_WARNING, "***Der Spieler ist nicht verbunden!");
}
else SendClientMessage(playerid, COLOR_WARNING, "***Du musst die Coinanzahl angeben!");
}
else SendClientMessage(playerid, COLOR_WARNING, "***Du musst den Spieler angeben!");
return 1;
}


Diesen Code kannst du in OnPlayerCommandText benutzen, wenn du das Script als Filterscript laufen
lässt. Wenn du das Script aber in dein Hauptscript kopiert hast, musst du einfach normal die
Funktion "GivePlayerCoins" ohne den Remote-Kram benutzen.

MfG
Recycler
FloRaX, 02.05.2008, 18:08
Danke schön.

//EDIT
Na toll ich glaub ich hab etwas Scripten verlent -.-


Code:

1
2
3
4
5
6
7
8
9
10
11
C:\Dokumente und Einstellungen\Nina\Desktop\SA-MP Server\filterscripts\coins_easyHUD.pwn(437) : erro
r 017: undefined symbol "strtok"
C:\Dokumente und Einstellungen\Nina\Desktop\SA-MP Server\filterscripts\coins_easyHUD.pwn(437) : erro
r 033: array must be indexed (variable "cmd")
C:\Dokumente und Einstellungen\Nina\Desktop\SA-MP Server\filterscripts\coins_easyHUD.pwn(443) : erro
r 017: undefined symbol "strtok"
C:\Dokumente und Einstellungen\Nina\Desktop\SA-MP Server\filterscripts\coins_easyHUD.pwn(443) : erro
r 033: array must be indexed (variable "tmp")
C:\Dokumente und Einstellungen\Nina\Desktop\SA-MP Server\filterscripts\coins_easyHUD.pwn(447) : erro
r 017: undefined symbol "strtok"
C:\Dokumente und Einstellungen\Nina\Desktop\SA-MP Server\filterscripts\coins_easyHUD.pwn(447) : erro
r 033: array must be indexed (variable "tmp")
C:\Dokumente und Einstellungen\Nina\Desktop\SA-MP Server\filterscripts\coins_easyHUD.pwn(436) : warn
ing 203: symbol is never used: "idx"
Pawn compiler 3.2.3664           Copyright (c) 1997-2006, ITB CompuPhase


6 Errors.
Recycler, 02.05.2008, 18:18
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
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[255], idx;
cmd = strtok(cmdtext, idx);
// Command hier 
return 0;
}

strtok(const string[], &index)
{
   new length = strlen(string);
   while ((index < length) && (string[index] <= ' '))
   {
      index++;
   }

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


Das einfach in das Filterscript kopieren. Beim Command die Zeile

Code:
1
CallRemoteFunction("GivePlayerCoins", "dd", pid, coin);


durch

Code:
1
GivePlayerCoins(pid, coin);


ersetzen.

MfG
Recycler
FloRaX, 02.05.2008, 18:21
Ok danke Recycler!
Funktionier alles.
Logitech900, 08.06.2008, 22:14
hi Recycler

kannst du mir mal Helfen bitte damit ;-)
Headshot, 21.06.2008, 15:50
Wie wäre es, wenn Du uns sagen würdest, um welchen Fehler es sich handelt...
FloRaX, 21.06.2008, 16:16
In ICQ erzählte er mir,es lief was schief.Das mit Givecoins oder so ähnliches.
Logitech900, 21.06.2008, 17:09
ist schon gut Hitman hatt mir schon geholfen :D
FloRaX, 21.06.2008, 17:53
Der Arme Hitman,ich glaub denn gehts nicht gut mit denn ganzen Scriptereien^^
Achja: Er kommt garnicht mehr On,hat er ne andere ICQ Nummer?
Rafioso, 21.06.2008, 18:17
ZitatMichael hat folgendes geschrieben:
Achja: Er kommt garnicht mehr On,hat er ne andere ICQ Nummer?
Nein, es ist nur etwas dazwischen gekommen.

Aber jetzt *b2t*
FloRaX, 27.06.2008, 22:02
Irgendwie hat es nicht so einen rießen vorteil weil:
Wenn man das hat mit dem givecoins etc. ist ja alles in Ordnung.
Aber wie macht man das wenn man z.b 5 kills,5coins und 5 death´s hat gespeichert bleibt.
Falls einer rausfliegt und wieder reinkommt damit er wieder das hat.
Recycler, 27.06.2008, 23:38
Kann man mit SaveIt X auch einfach selber bauen.

MfG
Recycler
Headshot, 27.06.2008, 23:56
Jo ich hab das auch in einem Register Script getan, damit das gespeichert wird.
Man muss halt einfach kreativ sein.

PS: Script ist klasse!
Headshot, 08.07.2008, 18:13
jo also ich hab ma ne frage dazu.
Also wie kann ich machen das die Maximale Coinanzahl die man haben kann 500 is?
Recycler, 09.07.2008, 11:31
Die folgenden Funktionen durch die gleichnamig schon vorhandenen ersetzen:

ZitatZitat:
stock GivePlayerCoins(playerid, coinamount)
{
if (coins[playerid] + coinamount > 500) coins[playerid] = 500;
else coins[playerid] = coins[playerid] + coinamount;
}


ZitatZitat:
stock SetPlayerCoins(playerid, coinamount)
{
if (coinamount > 500) coins[playerid] = 500;
else coins[playerid] = coinamount;
}


MfG
Recycler
FloRaX, 09.07.2008, 13:02
Irgendwie klappt das nicht mit denn Coind System das es in denn Scriptfiles Speichert etc.
Kann mir einer dabei Helfen?
FloRaX, 13.07.2008, 11:24
Hi,
ich habe da ein kleines problem mit denn Coin System von Recycler.
Ich habe ganze zeit versucht es zu Scripten,das die Coins die man bekommen hat,gespeichert bleiben.
Doch leider nur ohne erfolg :(
Wäre jemand so nett und könnte mir diesen Fehler beseitigen damit es Gespeichert bleibt?
Wäre sehr nett,danke.

FloRaX, 27.07.2008, 11:34
Okay habs geschaft!
Appakat, 17.08.2008, 13:21
Hi, ich wollte ma frgaen ob man beim script von recycler unten die anzeige verklienern kann und zu
einer anderen schriftart (siehe bild: Anhang)
und ich wollte fragen wie man einstellen kann das nach jeden 5 minuten wenn man coins bekommt das
dann da irgendein text steht wie zb: sie erhalten 3 coins.. oda so
Recycler, 17.08.2008, 13:36
Eigentlich hätteste das auch in den dazu passenden Thread posten können :-O

Die Schriftart kannst du in der Funktion HUDTimer() ändern, da findest du die Zeile "TextDrawFont".
Da einfach die Zahl in die gewünschte Schriftart ändern:

http://img115.imageshack.us/img115/5092/clipboard01vu9.png

Eine Nachricht beim Erhalten der Coins kannst du wie folgt erzeugen:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public CoinTimer() 
{
for (new i; i < MAX_PLAYERS; i++) 
{
if (IsPlayerConnected(i)) 
{
coins[i] += COINS_PER_TIMER;
new msg[255];
format(msg, sizeof(msg), "Du hast %d Coins erhalten!", COINS_PER_TIMER);
SendClientMessage(i, msg);
//GameTextForPlayer(i, msg, 3000, 5);
}
}
}


MfG
Recycler
Rafioso, 17.08.2008, 15:09
ZitatRecycler hat folgendes geschrieben:
Eigentlich hätteste das auch in den dazu passenden Thread posten können :-O


*verschoben*
Appakat, 17.08.2008, 20:03
Code:
1
2
3
4
5
6
7
8
9
C:\DOKUME~1\Desktop\COINS_~1.PWN(416) : error 035: argument type mismatch (argument 2)
C:\DOKUME~1\Desktop\COINS_~1.PWN(418) : error 029: invalid expression, assumed zero
C:\DOKUME~1\Desktop\COINS_~1.PWN(418) : error 004: function "HUDTimer" is not implemented
C:\DOKUME~1\Desktop\COINS_~1.PWN(421) : warning 219: local variable "i" shadows a variable at a prec
eding level
C:\DOKUME~1\Desktop\COINS_~1.PWN(442) : error 030: compound statement not closed at the end of file 
(started at line 413)
Pawn compiler 3.2.3664           Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.

bitte um hilfe
PS: und noch eine frage wo kann man die maximale anzahl einstellen??

//Edit
In Code-Tag gesetzt
MfG
Rafioso
Recycler, 18.08.2008, 00:31
Bitte die Zeilen des Scriptes posten...sieht jedenfalls nicht so aus als würde das das Resultat der
og. Änderung sein :-O

MfG
Recycler
Appakat, 18.08.2008, 14:09
wie?? kapier das net was du meinst.....
und noch frage: wie man die schriftGRÖßE ändern kann und ie maximale anzahl an coins???
Recycler, 18.08.2008, 20:14
Du solltest nur die Zeilen die in den Errors angegeben sind posten :-O

Code:
1
2
native TextDrawLetterSize(Text:text, Float:x, Float:y);
native TextDrawTextSize(Text:text, Float:x, Float:y);


Damit einfach herumprobieren, klappt aber nicht immer so gut ;-)

Was für eine maximale Anzahl an Coins? Wenn du das gleiche wie Headshot meinst, ich hab die
Änderungen in meinen letzten Posts schon geschrieben.

MfG
Recycler
Appakat, 19.08.2008, 14:17
asow maximale anzahl an coins:
von:
****

****
dieses 255 oda was??
asow und wegen errors

****
in der zeile wegen das jede 5 mins ein text kommt das man coins bekommt
asow und habe noch die frage:
wenn man "TAB" drückt sieht man ja die online spielr score etx. und iwe kann man einstellen das die
kills bei "TAB" also score angezeigt wird also wenn man dann 1 kill hat soll bei "TAB" stehen:
score
1
???

//Edit
**** = Und jetzt das ganze nochmal mit Codetag!
Danke
MfG
Rafioso
Recycler, 19.08.2008, 20:39
Leider werde ich aus dem was aus deinem Post übrig geblieben ist nicht mehr schlau, aber das mit
der Score habe ich vor ein paar Tagen erst im Scriptfragen-Thread beantwortet.

MfG
Recycler
Appakat, 19.08.2008, 20:42
das problem ist ja ich kriege das mit dem nciht hin könnte ich vl. das coinsystem hier als downlaod
in diesem thread machen und du machst dann wennn es eght die maximale anzahl ein text wo steht das
man coins bekommt und die größe`??
dödel, 19.08.2008, 20:44
Wenn man nichtmal weiß wie mal addiert, sollte man lieber nicht scripten :-/
Das ist doch logik, wer Mathe 4. Klasse kann, wird auch das locker berechnen können

VariableA = VariableB + VariableC;
Appakat, 19.08.2008, 20:45
XD ja aber ich habe ja schon jetzt ahnung von scripten nur das bekomm ich net hin daher die frage
an recyccler???
Recycler, 19.08.2008, 20:48
Was, ich weiß noch immer nicht was du willst, eigentlich hab ich das alles schon beschrieben mit
den maximalen Coins und den TD Einstellungen :D

MfG
Recycler
Appakat, 19.08.2008, 20:52
ja ich weiß also:
was ich will: das du mir villeicht den script runterladen könntest ihn auf maximale anzahl an coins
500 amchen könntest schriftart 0 ein /givecoin reinmachen und das eine nachricht kommt das man
coins bekommn aht XD pls
dödel, 19.08.2008, 21:09
Tut mir leid, aber was hast du davon, wenn ich es für dich runterlade?
Das einzige was ich habe sind ca. 40kb Datenverbrauch :-O
Appakat, 19.08.2008, 21:16
ne ich meinte das dann bearbeiten hier isn froum als download bereitstellen und dann kanns ja weida
vom pc plss?
dödel, 19.08.2008, 21:38
Bessere Idee:

1. Tutorials lesen
2. ggf. wenn lesen nicht möglich - lesen lernen ;)
3. Tutorials erneut lesen
4. Tutorials durcharbeiten
5. Aus Tutorials lernen um selber weiterarbeiten zu können
6. Fertig *bye*
Recycler, 19.08.2008, 22:26
Ich hab eine noch bessere Idee.

Du lädst dir jetzt das Script runter, was ich nach deinen Wünschen angepasst habe.

+ /givecoins
+ Font 0
+ max Coins 500
+ Coin Nachricht

MfG
Recycler
Appakat, 20.08.2008, 15:31
Post1:
thx thx recycler echt nett von dir :-) :-) :-) 8-) 8-) 8-) ;-)

Post2:
asow und nur noch eine frage undzwar is die coinanzahl für admins unbegrentz (wenn net is schlimm,
will euch net nerven ;-) )

Doppelposts Vermeiden, der Editieren Button ist nicht nur zum ansehen

mfg dödel
Appakat, 21.08.2008, 14:19
is die coins anzahld er admininstratroen unbegrentzt?
Dörfler, 21.08.2008, 14:47
ZitatAppakat hat folgendes geschrieben:
Post1:
thx thx recycler echt nett von dir :-) :-) :-) 8-) 8-) 8-) ;-)

Post2:
asow und nur noch eine frage undzwar is die coinanzahl für admins unbegrentz (wenn net is schlimm,
will euch net nerven ;-) )

Doppelposts Vermeiden, der Editieren Button ist nicht nur zum ansehen

mfg dödel


ZitatAppakat hat folgendes geschrieben:
is die coins anzahld er admininstratroen unbegrentzt?



vll mal bisschen aufpassen ?
Appakat, 21.08.2008, 20:36
?
dödel, 21.08.2008, 21:25
Genau das war damit gemeint ;)
Recycler, 21.08.2008, 21:26
Jetzt macht er bestimmt noch einen Post mit "?" :D

Die Foren-Gebote:

* Du sollst nicht doppelposten

MfG
Recycler
Appakat, 22.08.2008, 14:34
:shy: will ja nur wisen 8-)
Appakat, 23.08.2008, 14:40
wie is der code damit die admins undendlich coins tragen können ???? und der code von /givecoins
für regulere palyer um anderen spielern coins zu schiken, die dann vom absender abgezogen werden??
Recycler, 23.08.2008, 15:22
/sendcoins um Coins zu versenden:

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
if (strcmp(cmd, "/sendcoins", true) == 0)
{
new tmp[255];
tmp = strtok(cmdtext, idx);
if (strlen(tmp))
{
new pid = strval(tmp);
tmp = strtok(cmdtext, idx);
if (strlen(tmp))
{
new coin = strval(tmp);
if (IsPlayerConnected(pid))
{
if (GetPlayerCoins(playerid) >= coin)
{
GivePlayerCoins(pid, coin);
GivePlayerCoins(playerid, -coin);
new msg[255];
format(msg, sizeof(msg), "***Du hast von einem Spieler %d Coins bekommen!", coin);
SendClientMessage(pid, COLOR_WARNING, msg);
}
else SendClientMessage(playerid, COLOR_WARNING, "***Du hast nicht genug Coins!");
}
else SendClientMessage(playerid, COLOR_WARNING, "***Der Spieler ist nicht verbunden!");
}
else SendClientMessage(playerid, COLOR_WARNING, "***Du musst die Coinanzahl angeben!");
}
else SendClientMessage(playerid, COLOR_WARNING, "***Du musst den Spieler angeben!");
return 1;
}


ZitatZitat:
stock GivePlayerCoins(playerid, coinamount)
{
if (!IsPlayerAdmin(playerid))
{
if (coins[playerid] + coinamount > 500) coins[playerid] = 500;
else coins[playerid] = coins[playerid] + coinamount;
}
else coins[playerid] += coinamount;
}


ZitatZitat:
stock SetPlayerCoins(playerid, coinamount)
{
if (!IsPlayerAdmin(playerid))
{
if (coinamount > 500) coins[playerid] = 500;
else coins[playerid] = coinamount;
}
else coins[playerid] = coinamount;
}


Das sind die Funktionen für Admin Coins Unlimited, durch die gleichnamigen ersetzen *bye*

MfG
Recycler
irni2, 31.12.2008, 11:43
Hallo kannst du vielleicht die SaveX mal hier herein schreiben.
were echt nett wenn das ginge
Danke im vorrhinaus


thx und ein guten rutsch
Recycler, 31.12.2008, 17:26
http://forum.gtavision.com/posts_51_1023_1.html

MfG
Recycler
Dennis0, 13.04.2009, 20:43


was muss ich da alles ausfüllen und was rein schreiben bsp bitte
FloRaX, 13.04.2009, 21:23
ZitatDennis0 hat folgendes geschrieben:


was muss ich da alles ausfüllen und was rein schreiben bsp bitte


Das ist so ähnlich wie die von Dracoblue.

DINI,DUDB,DUTILS.

Ich glaub in Recycler's Gamemode "vwwwlg" benutzt er das.

MfG
FloRaX
Recycler, 14.04.2009, 11:24
ZitatDennis0 hat folgendes geschrieben:
was muss ich da alles ausfüllen und was rein schreiben bsp bitte


Was meinst du denn überhaupt - Coinsystem oder SaveIt_X?

MfG
Recycler
ffmremix, 07.01.2010, 20:10
wo kann ich machen, das man das coinmenu auf eine andere taste aufrufen kann?
und dass die coins nach einem logout/login gespeichert werden?



würde mich über eine antwort freuen :D
N0rax, 19.05.2010, 17:20
Das mit dem Tastendruck aufrufbar geht über OnPlayerKeyState, und das mit dem abspeichern der Coins
so:

Code:
1
2
3
4
5
6
7
8
//OnPlayerDisconnect:

dUserSetINT(PlayerName(playerid)).("coins", GetPlayerCoins(playerid));


//Login-CMD

GivePlayerCoins(playerid, dUserINT(PlayerName(playerid)).("coins"));


Rest solltest du eigentlich selbst hinkriegen, sofern du die Grundlagen kennst :)
TesteR, 04.07.2010, 13:15
Bei mir geht der Download nicht kann mir wer den Link schicken würde
mich freuen. Danke im vorraus.

MfG,
TesteR
Topek_, 04.07.2010, 14:05
Kein download link.
N0rax, 04.07.2010, 14:36
Den hat anscheinend Recycler entfernt aber es ist einfach dies selbst zu basteln:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
new coins[MAX_PLAYERS];
stock GivePlayerCoins(playerid, coinamount)
{
if (coins[playerid] + coinamount > 500) coins[playerid] = 500;
else coins[playerid] = coins[playerid] + coinamount;
}

stock GetPlayerCoins(playerid) return coins[playerid];

stock SetPlayerCoins(playerid, coinamount)
{
if (coinamount > 500) coins[playerid] = 500;
else coins[playerid] = coinamount;
}

stock ResetPlayerCoins(playerid) coins[playerid] = 0;


Viel spaß.
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