German Item kaufen mit Trigger_if möglich ?

16 replies
Goto Page
To the start Previous 1 Next To the start
Up
P4R4S
User
Offline Off
Hallo,

ich arbeite ab und zu an einer Map und habe dort einen Kaufautomaten.
Leider habe ich das Problem, das es nicht die Möglichkeit zu geben scheint, das wenn man diesen mit einem Trigger_Use benutzt, auch Geld abgezogen wird.
Nun habe ich aber diesen Trigger_if entdeckt und möchte nun fragen ob man es damit einrichten kann, das wenn man den Automaten benutzt das Item nur gegen Bezahlung bekommt.

Also bspw. eine Granate soll 500$ kosten. Man geht an den Automaten und benutzt ihn und zack Granate kommt raus und man hat 500$ weniger.
Allerdings sollte es dann auch so sein, das wenn man kein Geld mehr hat, keine Granaten mehr kaufen kann.
Also nicht "Kontostand: -500$ usw.
Wäre auch dankbar wenn mir jemand ein solches Script (sind ja anscheinend luascripts die man für den Trigger_if benötigt) erstellen kann

MfG
P4R4S
18.03.15 05:42:34 pm
Up
Bowlinghead
User
Offline Off
Wie wird denn dieser Kaufautomat aktiviert? Mit 'E'?
Share time limited free games here
18.03.15 06:26:35 pm
Up
DC
Admin
Offline Off
cs2d entity trigger_if ist hier wahrscheinlich die falsche Wahl, da man ihm nicht die Spieler-ID mitgeben kann (die des Spielers der den Button gedrückt hat). Außerdem ist es eigentlich nur für kurze Bedingungen und nicht für Aktionen gedacht (daher der Name).

Es macht mehr Sinn ein Lua Script für die Map (als maps/MAPNAME.lua) zu erstellen und dort cs2d lua hook usebutton zu benutzen, um zu reagieren wenn ein Button gedrückt wurde.
www.UnrealSoftware.de | www.CS2D.com | www.CarnageContest.com | Use the forum & avoid PMs!
18.03.15 06:33:03 pm
Up
VADemon
User
Offline Off
Es geht nicht mit Trigger_if, da dem Lua-script nicht mitgeteilt wird welcher Spieler den Button aktiviert hat.
Ohne Lua kommst du nicht drum rum.

PS: Habe mit der Nachricht größtenteils user DC's Meinung wiederholt, da ich zu lange gebraucht hab, bis ich die Nachricht abschickte.

UPD:
Eine Taste mit dem Namen "shop:28=500" wird dem Spieler, der die aktiviert hat Waffe mit der ID 28 geben (Scout) und 500$ abziehen, falls er überhaupt genug Geld hat.
Syntax: "shop:WaffenID=Preis"

Beim Testen hat jetzt dieser Buttonshop nur beim ersten Drücken funktioniert, wenn man die Waffe wegwirft funktionierte es bei mir nicht mehr. user DC, user P4R4S könnt ihr das kurz bei euch testen? Der Befehl equip wird auf jeden Fall ausgeführt, das Geld wird auch ohne Probleme abgezogen. Timer(500, ...) brachte nichts.
Code >
edited 3×, last 18.03.15 07:12:39 pm
18.03.15 07:45:44 pm
Up
P4R4S
User
Offline Off
Als ob man eine Tür öffnet mit Trigger_use also E und dann erscheint ein Item. Das Item soll keine Waffe sondern Munition sein (um genauer zu sein PrimaryAmmo ID61) muss dem Spieler nicht gegeben werden, sondern soll einfach nur neben ihm erscheinen.
Das ist kein Problem und das leichteste an der Sache oder allgemein das leichteste
Das Problem ist die Sache mit dem Geld abziehen.
Es geht mir allein darum.
Es gibt nur einen Spieler
Ist sozusagen Singleplayer
Würde es denn dann funktionieren da ja nur einer da ist dem Geld abgezogen werden kann ?
Ich würde das mit der lua gerne umgehen ...
falls das nicht möglich sein sollte, muss es eben so

Ps.: Danke an eure Antworten @user VADemon: @user DC:
und @user Bowlinghead: - dich gibts ja auch noch
edited 2×, last 18.03.15 11:35:28 pm
19.03.15 12:02:45 am
Up
Bowlinghead
User
Offline Off
Mit Lua geht das einfach (auch mit mehreren Spielern).
Ich befürchte, dass du an Lua nicht vorbei kommst, da mir kein Entity bekannt ist, was Geld von Spielern abzieht.

Wenn es aber sozusagen Singleplayer ist, solltest du doch wissen, wie viel Geld der Spieler hat, oder nicht? Vielleicht kannst du ja das mit dem Geld umgehen, wenn du kein Lua benutzen willst.
Share time limited free games here
19.03.15 12:34:17 am
Up
P4R4S
User
Offline Off
Nun, es soll so eine Art SingleplayerMission sein

Die Sache ist, das ich vor habe auf dieser Map Geld zu verstecken und wenn der Spieler es findet dieses in Munition investieren kann.
Er sollte nicht unendlich Munition kaufen können.
Also die Munition sollte begrenzt sein !

Ich hätte es gerne so das die Munition 100$ kostet .
Eigentlich dachte ich, das dieser Trigger_if, ein LuaScript das schon automatisch im Spiel drin ist sei - weswegen ich das lieber so gemacht hätte.
Aber naja ... gibt es für das luaScripten eine Art Anleitung damit ich das selbst machen kann ?
Ich würde mir das schon mal gerne aneignen !
19.03.15 11:04:29 am
Up
Bowlinghead
User
Offline Off
Hier z.B. (Google Link) oder sogar hier (CS2D Link).
Lua gibt es auch in anderen Spielen, z.B. GMod und Multi Theft Auto. An Tutorials sollte es nicht scheitern
Share time limited free games here
19.03.15 05:32:38 pm
Up
P4R4S
User
Offline Off
ok danke

So ... leider bin ich nicht weiter gekommen den auf diese Art kann ich das nicht richtig lernen oder ich bin einfach zu blöd dazu (ich tendiere zum zweiten )
Ich verstehe nämlich nur Bahnhof !

Ich bin in dieser Geschichte nur bis dahin gekommen:

addhook("money_deduction")
function money_deduction

So wie ich das verstanden habe, kann man als Funktion nehmen was man will ...
Aber wie das jetzt weiter geht, dazu haben mir die Befehle bzw. Kenntnisse gefehlt ...

Jetzt weiß ich nicht wie ich es hinbekomme das der Server versteht das dem Spieler Geld abgezogen werden soll.
Im großen und ganzen gibt es in meiner Map ja nur einen Spieler mit der ID 1, sodass ich dem Server nicht zu verstehen geben muss das er dem Spieler der das gerade benutzt Geld abziehen soll (das muss ja nur wenn es mehrere Spieler gibt).
Hinzu kommt ja noch das der Server auch noch verstehen soll, das die 0 nicht übergangen werden darf (also nicht in den Minusbereich) ...

ich habe zwar im Internet nach Befehlen gesucht aber entweder nichts oder verschiedene gefunden ...
Ist das für jedes Spiel usw. eine eigene Comandslist oder wie ist das ?
edited 2×, last 19.03.15 11:27:31 pm
20.03.15 07:53:18 am
Up
Bowlinghead
User
Offline Off
In Programmiersprachen/Skriptsprachen wird einzelner Code Eventweise ausgeführt. Ein Event bzw. Ereigniss ist der Auslöser einer Funktion. Ein Event in CS2D könnte z.B. seien, dass jemand stirbt oder jemand "E" drückt (Hier eine Liste aller Events in CS2D).
Diese Events nennt man in CS2D Addhooks. Es gibt nur begrenzt viele verschiedene Addhooks.
Das heißt, wenn du ein Skript erstellst, guckst du als erstes, welchen Addhook du verwenden willst. In deinem Fall würde sich cs2d lua hook usebutton anbieten. Ein Addhook wird wie folgt geschrieben:
Code:
1
addhook("Hookname","Funktionsname")

Hookname ist einer der Begriffe der Liste.
Funktionsname ist eine Bezeichnung, die du frei wählen kannst.
Deine ersten drei Zeilen Code sind nun geschrieben:
Code:
1
2
3
4
addhook("usebutton","munitions_drop")
function munitions_drop(id,x,y)

end

Die zweite Zeile besteht aus 3 Elementen:
Einmal das Wort function. Das ist ein Schlüsselbegriff und leitet eine Funktion ein.
Das Zweite munitions_drop ist unsere Bezeichnung. Es kann auch jeden anderen Namen haben.
Das Dritte sind die Parameter. Die stehen in der Klammer, sehe hier.
(Das end ist ein weiterer Schlüsselbegriff, der die Funktion enden lässt)

Die Parameter sind wie unveränderbare Variablen zu verwenden.
Wenn nun ein Spieler mit der ID 8 einen Button betätigt, wäre der Parameter "id" gleich 8. X und Y müssten bekannt sein.
---

Als Nächstes müsstest du if (condition) then kennenlernen.
In Lua ist das nichts anderes als das WENN;DANN;SONST aus Excel, du musst es halt nur anders schreiben.
Beispiel:
Code:
1
2
3
4
5
if (x==5) then
     msg("X ist 5!")
else
     msg("X ist nicht 5!")
end


Der Code ist wohl selbsterklärend.
In Lua gibt es zwei verschiedene "Arten" von den Gleichheitszeichen.
1. Du willst Zahlen vergleichen (==)
2. Du willst eine Zahl setzen (=)
Den 1. Fall wirst du überwiegend in If-Anweisungen finden.

Für die Munitionskiste solltest du also soetwas schreiben:
Code:
1
2
3
4
5
6
7
8
addhook("usebutton","KnopfBenutzung")
function KnopfBenutzung(id,x,y)
     if (x==13) then
          if (y==50) then
               -- Geldabziehen
          end
     end
end

Wenn also jemand einen Knopf bei (13|50) drückt, dann sollte ihm Geld abgezogen werden, aber auch nur, wenn er genug hat.

Es gibt neben Addhooks noch CS2D-Lua-Befehle. Diese sind wie die Addhooks nur in CS2D verfügbar und von DC gemacht. Wir brauchen den Befehl cs2d lua cmd player ! Damit überprüfen wir, ob der Spieler genug Geld hat, also money.
Code:
1
2
3
4
5
6
7
8
9
10
addhook("usebutton","KnopfBenutzung")
function KnopfBenutzung(id,x,y)
     if (x==13) then
          if (y==50) then
               if (player(id,"money")>=500) then
                    -- Geldabziehen & Ammo geben
               end
          end
     end
end

Wir gucken also gerade, ob der Spieler gleich-/mehr als 500$ hat.

Warum ">="?
Sehe Hier
---

In LUA kannst du auch Konsolenbefehle ausführen. Das sieht so aus:
Code:
1
parse("BEFEHL")

Wir benötigen den Befehl cs2d cmd setmoney .

Damit setzen wir das Geld des Spielers. Bisschen blöd, da wir ihn ja nur -500$ abziehen wollen. Hat er also 1300$, soll er danach nurnoch 800$ haben; sollte er noch 1000$ haben, soll er danach nurnoch 500$ haben, usw.
Dafür gibt es einen Weg:
Wir nehmen das Geld des Spielers und rechnen -500.
Das sieht dann wie folgt aus:
Code:
1
2
3
4
5
6
7
8
9
10
addhook("usebutton","KnopfBenutzung")
function KnopfBenutzung(id,x,y)
     if (x==13) then
          if (y==50) then
               if (player(id,"money")>=500) then
                    parse("setmoney "..id.." "..(player(id,"money") - 500)
               end
          end
     end
end


Was sollen diese " " und Punkte bei dem Parse?
Ich hab jetzt genug geschrieben. Ich weiß auch garnicht, wie ich das erklären soll.
edited 4×, last 20.03.15 11:59:33 pm
Share time limited free games here
20.03.15 02:41:58 pm
Up
P4R4S
User
Offline Off
Prima erklärt
Das muss ich zwar alles noch genauer lernen aber da schau ich mal ob ich da nicht ein VideoTutorial finde.
Aber ich habe jetzt mal das von dir übernommen und auf meine Wünsche abgeändert.

Aber es wird kein Geld abgezogen.
Nun ist die Frage warum. Ich habe die Coords auf den Schalter (also Trigger_use entity) bei 27 l 30 gelegt.
Also x==27
und y==30
Ist da der Fehler und muss das da sein von wo der Spieler das Geld abzieht (also in dem Fall 27 l 29) - was ich aber auch schon ausprobiert habe ...
edited 1×, last 20.03.15 03:25:09 pm
20.03.15 11:55:38 pm
Up
Bowlinghead
User
Offline Off
Guck in der Konsole nach Fehlern. Ich sehe grade, dass ich ein paar then´s vergessen habe.
Share time limited free games here
21.03.15 12:34:59 am
Up
VADemon
User
Offline Off
Ich hab jetzt euer rumgegurke nicht wirklich gelesen, sondern den Script von oben so abgeändert, dass das Item dem Spieler nicht direkt gegeben wird, sondern auf dem Tile gespawnt auf dem der Spieler drauf steht. Ist es das was du wolltest, user P4R4S?
Syntax für Trigger_Use ist immernoch: Name: "shop:WaffenID=Preis"
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
-- requested on http://unrealsoftware.de/forum_posts.php?post=386462
addhook("usebutton", "shop_onbutton")

function shop_onbutton(id, buttonX, buttonY)
     local buttonName = string.lower(entity(buttonX, buttonY, "name"))
     
     local findStart, findEnd, weaponID, price = string.find(buttonName, "shop%:(%d*)=(%d*)")
     weaponID, price = tonumber(weaponID), tonumber(price)
     --msg("wpnID: ".. weaponID .." price: " .. price)
     
     if weaponID and price then     -- found values?
          if player(id, "money") >= price then
               parse("setmoney ".. id .." ".. (player(id, "money") - price))
               shop_equip(id, weaponID)
               msg2(id, "©154255154Thanks for the purchase!")
          else
               msg2(id, "©154255154You need $".. price .." to buy this!")
          end
     end
end

function shop_equip(id, itemID)
     local playerTileX, playerTileY = player(id, "tilex"), player(id, "tiley")

     parse("spawnitem ".. itemID .." ".. playerTileX .." ".. playerTileY)
end
21.03.15 04:25:58 am
Up
P4R4S
User
Offline Off
das kann ich dir leider noch nicht genau sagen ...
Wo muss mich ich da jetzt reinschreiben was der Preis ist und an welcher Position das ist - das mit dem Automaten habe ich schon mit Entity (Trigger_use und env_item) gemacht - das einzige was eben noch fehlt ist das wichtigste und zwar diese Kauffunktion. Den sonst wird einfach das Item gedroppt und das wars dann ...
Hatte gehofft das zu verstehen und dann selbst zu machen, aber ist wohl doch zu kompliziert für mich jedenfalls für den Moment.
21.03.15 09:37:54 am
Up
Bowlinghead
User
Offline Off
env_item benötigst du garnicht. Das Item wird per Lua generiert.
Ich habe das letze Script von user VADemon getestet und es funktioniert einwandfrei (auch mehrmaliges spawnen).
So sieht es dann im Map Editor aus:

Mein Script würde auch funktionieren, es fehlen halt nur viele Klammern und "then"s.
Hier wäre der richtige Code:
Code >


Ich empfehle dir aber user VADemon sein Script, es ist einfacher zu benutzen.
Share time limited free games here
21.03.15 12:58:01 pm
Up
VADemon
User
Offline Off
Es wäre ja auch nicht schwer mein Script zu ergänzen, sodass man im Editor auch noch die Positionsangabe machen kann und eine andere Nachricht bekommt etc., musst nur sagen
user Bowlinghead, danke für die Screenshots und die Erklärung, hab nicht gepeilt, dass es an der Ausführung mangelt.
21.03.15 07:34:00 pm
Up
P4R4S
User
Offline Off
Vielen Dank Leute
To the start Previous 1 Next To the start