Registrierung Häufig gestellte Fragen Suche Mitgliederliste Portal - Planet Skyrim.de Kalender Moderatoren und Administratoren Startseite
Morrowind&OblivionForum.de - PMM-Projects Network » The Elder Scrolls III: Morrowind » Morrowind Editor Help » Script für Ratenzahlung - so Richtig? » Hallo Gast [registrieren|anmelden]
« Vorheriges Thema Nächstes Thema » Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Autor
Beitrag [  1  2  >  »  ]
rendel
Mage




Dabei seit: Oktober 2002
Geschlecht:
Herkunft:
Beiträge: 185

rendel ist offline
Script für Ratenzahlung - so Richtig?Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Ich hab mich mal am Scripten versucht und würde jetzt gerne hören, ob das so funktioniert oder ob es völliger Blödsinn ist.

Was das Script tun soll:
Wenn es im Dialog aktiviert wird sollen 30 Tage vergehen, dann kommt eine Zahlungsaufforderung. Wenn man brav zahlt geht das ganze von vorne los und nach 12 Raten wird alles beendet. Wenn man nicht zahlt bekommt man 7 Tage lang eine Nachricht und wenn man immer noch nicht zahlt gehts 7 Tage ins Gefängnis. Dann gehts wieder von vorne los (bzw hier ist die nächste Zahlungsaufforderung nur noch 16 Tage entfernt. Auch hier ist nach 12 Raten Schluß.

Problem:
Wie legt man die Länge des Gefängnisaufenthalts fest?

Was ich mir zusammenschustert habe:
Script zur Ratenzahlung

Globale deklarieren:
rate25
erinnerung
anzahlraten


Begin Ratenzahlung25000

short rate25
short currentday
short dayspassed
short messageon
short button
short erinnerung ;aktiviert das Zahlungsmenü
short anzahlraten ;zählt die gezahlten raten

;aktiviert erst, wenn aus Menü raus
if (menumode == 1)
..return
endif

;startet Zeitzähler
if (rate25 == 1)
..set rate25 to 2
..set currentday to day
..set dayspassed to 0
endif

;jeder Tag wird addiert
if (rate25 == 2)
..if (currentday != day)
....set currentday to day
....set dayspassed to (dayspassed + 1)
..endif
endif

;Beginn des Zahlungszyklus
if (dayspassed == 30)
..set erinnerung to 1
..set anzahlraten to (anzahlraten +1)
..set dayspassed to 0
endif

;Startet Nachricht
if (erinnerung != 0)
..MessageBox "Rate fällig" "Zahlen" "Nicht zahlen"
..set messageOn to 1
endif

if (messageOn == 1)
..set button to GetButtonPressed
..if (button >= 0)
....set messageOn to 0
..if (button == 1)
....Player->RemoveItem, gold_001, 25000
....set erinnerung to 0
....if (anzahlraten == 12)
......MessageBox "Herzlichen Glückwunsch. Die Villa gehört jetzt Ihnen"
......set rate25 to 0
....endif
....elseif (button == 2)
....set erinnerung to (erinnerung + 1)
....endif
..endif
endif

;Gefängnis ***** Wie legt man hier die Länge des Gefängnisaufenthalts fest???*****
if (erinnerung == 7)
..set erinnerung to 0
..GotoJail
..if (anzahlraten == 12)
....MessageBox "Herzlichen Glückwunsch. Die Villa gehört jetzt Ihnen"
....set rate25 to 0
..endif
endif

end Ratenzahlung25000


Zur Aktivierung folgendes:

Script auf den NPC legen
Im Dialog Choice "Barzahlung" "Ratenzahlung" "Zu teuer, Kein Interesse"

Im Dialog zur Ratenzahlung
set rate25 to 1


Geht das so???????

Dieser Beitrag wurde von rendel am 22.04.2003, 14:00 Uhr editiert.

22.04.2003, 13:58 Profil von Füge  deiner Freunde-Liste hinzu Email an rendel senden
Vvarden
Lord Shadow




Dabei seit: Dezember 2002
Geschlecht:
Herkunft: Cyrodiil
Beiträge: 4742

Vvarden ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Ouh, sehr schön. Aber ne kleine Frage: Um was für einen Mod handelt es sich und für welche Version wird er sein ???


__________________

Shit happens, you can't avoid it.

.:: Live by Honor, Kill by Stealth ::.


Nur wenige wissen, wie viel man wissen muss, um zu wissen, wie wenig man weiß.

22.04.2003, 14:18 Profil von Füge  deiner Freunde-Liste hinzu Email an Vvarden senden Homepage von Vvarden Füge Vvarden in deine Contact-Liste ein Xfire Screenname: eagleeyeone
rendel
Mage




Dabei seit: Oktober 2002
Geschlecht:
Herkunft:
Beiträge: 185

rendel ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

DV + Tribunal

Guckst Du hier

22.04.2003, 14:37 Profil von Füge  deiner Freunde-Liste hinzu Email an rendel senden
iladrion
Craftsman




Dabei seit: September 2002
Geschlecht: keine Angabe
Herkunft:
Beiträge: 288

iladrion ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Zitat:
Original von rendel
Ich hab mich mal am Scripten versucht und würde jetzt gerne hören, ob das so funktioniert oder ob es völliger Blödsinn ist.


Das ist schon weit mehr als nur nen Versuch... Wenn du das alleine hinbekommen hast, bist Du nen Naturtalent ! Ich sehe im Moment nix, warum das so nicht gehen sollte. Sicher kann man es noch verbessern, aber das Grundgerüst ist TOP !

Übrigens sorry, hatte deine PM bekommen, aber noch keine richtige Zeit bisher gefunden, ne Lösung dafür zu basteln. Aber wie man sieht, ist es manchmal sogar gut, wenn man zu lahm ist, hier hat es wohl jemanden geholfen sich selbst scripten beizubringen, he ?

Zitat:

Problem:
Wie legt man die Länge des Gefängnisaufenthalts fest?



Da gibt es keine Variable für, afaik. Ich vermute mal, das wird automatisch aus der Höhe des Kopfgeldes berechnet. Also musst Du einfach eins aussetzen (zb 1/10 der Rate). Problem dabei ist, das der PC dann wahrscheinlich sämtliche gestohlenen Items verliert, wie bei ner Verhaftung üblich...


Verbesserungs-/Erweiterungsvorschläge:
Verschiedene wählbare Ratenlaufzeiten und was ich finde, was wichtig wäre in diesem Fall: ZINSEN ! oder man sollte das Haus, falls man das Geld sofort auf einmal hat, billiger bekommen.

[Edit:]
Ich hab dir nochmal alle Scriptbefehle, die ich zum Jail gefunden habe rausgesucht (aus "Scripting for Dummies 5.0):

Get/Mod/SetPCCrimeLevel (PC Only) (returns short) PCCrimeLevel governs the gold you have to pay to be cleaned of crimes, influences NPC disposiotion and how guards react to you. Can be used to detect whether a crime the PC has committed has been seen.

GotoJail Sends the PC to the (closest available) prison, more exactly speaking to a PrisonMarker (Door object) and applies the usual prison penalties.

PayFine The PayFine function removes the stolen items from the PCs inventory; it does not remove any gold. Call after paying a crime fee to clean AI.


Mehr gibt es scheinbar nicht...


__________________
keep on modding...



Dieser Beitrag wurde von iladrion am 22.04.2003, 15:15 Uhr editiert.

22.04.2003, 15:00 Profil von Füge  deiner Freunde-Liste hinzu Email an iladrion senden
rendel
Mage




Dabei seit: Oktober 2002
Geschlecht:
Herkunft:
Beiträge: 185

rendel ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

So ganz alleine war es nicht. Ich hab hier im Forum ein Script über Kopfgeld gefunden, daraus hab ich die Sache mit dem Zeitablauf. Messageboxes hab ich schon mal für ein Teleportamulett gemacht. Und für den Rest hab ich das bißchen PC Logik zusammengekratzt das mir mal jemand vor 15 Jahren bei einem Basic VHS-Kurs beigebracht hat.

Das mit dem Gefängnisaufenthalt ist schade, ich bin nämlich kein Freund von Kopfgeld und daraus resultierendem Gegenständeverlust.

Zinsen gibt es übrigens doch. Jede Rate wird 1/10 des Gesamtwertes sein. Aber 12 Raten wird man zahlen müssen. Also 20% Aufschlag, was übrigens Peanuts ist im Vergleich zur Realität.

Das Script mit veränderten Ratenlaufzeiten zu machen halte ich für sehr aufwändig, sinnvoller wäre vielleicht, es für verschiedene Ratenhöhen zu machen.

Ich könnte da noch eine Variable für die Ratenhöhe eingeben und im Dialog mit z.B. set Ratenhöhe == 25000
einen Wert eingeben.
Kann ich dann beim Goldabziehen einen Befehl schreiben wie
..if (button == 1)
....Player->RemoveItem, gold_001, ratenhöhe
....set erinnerung to 0
oder braucht er einen festen Wert für die Anzahl der Items?


Edit:
Vielleicht kann man die Kopfgeldvariable auf einen Wert setzen, damit man 7 Tage im Gefängnis ist und anstatt PayFine am Ende setzt man das Kopfgeld einfach wieder auf 0.
Müßte doch gehen, oder?

Dieser Beitrag wurde von rendel am 22.04.2003, 15:24 Uhr editiert.

22.04.2003, 15:21 Profil von Füge  deiner Freunde-Liste hinzu Email an rendel senden
iladrion
Craftsman




Dabei seit: September 2002
Geschlecht: keine Angabe
Herkunft:
Beiträge: 288

iladrion ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Zitat:
Zinsen gibt es übrigens doch.

Upps, wo hab ich meine Augen... *entferntsichvorsichtigmehrerebrettervomkopf*

Zitat:
braucht er einen festen Wert für die Anzahl der Items?


Ich glaube nicht. Kann keine genauen Angaben dazu finden, weder in der CS-Hilfe noch im Scripting for dummies. Mit Tribunal hast du aber ne recht gute Wahrscheinlichkeit, dass das klappt. Ansonstens kann man das über ne längere if..elseif...endif-schleife lösen.
Die Höhe der Rate zu ändern, ändert übrigens auch die Laufzeit... Aber ich denke, das ist klar.


Zitat:
Edit:
Vielleicht kann man die Kopfgeldvariable auf einen Wert setzen, damit man 7 Tage im Gefängnis ist und anstatt PayFine am Ende setzt man das Kopfgeld einfach wieder auf 0.
Müßte doch gehen, oder?


Jepp, das selbe hab ich mir inzwischen auch überlegt. In der Payfine-Erklärung steht es ja eigentlich genau beschrieben, dass erst mit dieser Funktion die Gegenstände entfernt werden. Ich hoffe, dass PayFine nicht automatisch von GotoJail miterledigt wird, sprich der eine Befehl den anderen beinhaltet. Musst Du wohl oder übel mal ausprobiern, wie das genau abläuft.

Wie du allerdings genau 7 Tage hinbekommst, weiss ich auch nich genau. Habe ne GameSettingVariable gefunden, die nen Faktor von 100 enthält. Ich würde es also zu erst mal mit 700 Kopfgeld probiern. Aber ich befürchte das da auch wieder Talente und Attribute des Chars einberechnet werden, so dass sich das für jeden anders auswirken wird. Denn wenn ich bei ner Stadtwache mein Kopfgeld bezahle, sorgt mein Feilschen wert dafür, das ich weniger bezahlen muss, als eigentlich ausgesetzt wurde.


__________________
keep on modding...



22.04.2003, 16:10 Profil von Füge  deiner Freunde-Liste hinzu Email an iladrion senden
Garak
Admin




Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9269

Garak ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Meiner erfahrung nach unterliegt removeitem zumindest in Morrowind ohne Tribunal der "keine Variablen"-Beschränkung. Ich hab das mal mit einem externen script gelost, an das per Globalvariable "Shortparameter" die anzahl übergeben wurde:

begin removenetch

while (shortparameter >=1)
set shortparameter to shortparameter - 1
player -> removeitem ingred_netch_leather_01 1
endwhile

stopscript removenetch


end

Muss dich aber warnen: die While - schleife ist elend langsam!

Kleine Frage noch zu Deinem Script: Macht es keine Schwierigkeiten, dass Du deine globals auch lokal definiert hast? klingt für mich nach Chaospotential - ist zumindest in Fortran ein beliebter Verwirraspekt für mich gewesen...


__________________
drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen

22.04.2003, 22:06 Profil von Füge  deiner Freunde-Liste hinzu Email an Garak senden Homepage von Garak Füge Garak in deine Contact-Liste ein
rendel
Mage




Dabei seit: Oktober 2002
Geschlecht:
Herkunft:
Beiträge: 185

rendel ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Zitat:
Original von Garak
Muss dich aber warnen: die While - schleife ist elend langsam!



Dann mach ich das wohl besser nicht. Bei 5-Stelligen Zahlen dürfte das sonst etwas länger dauern....

Zitat:
Original von Garak
Kleine Frage noch zu Deinem Script: Macht es keine Schwierigkeiten, dass Du deine globals auch lokal definiert hast? klingt für mich nach Chaospotential - ist zumindest in Fortran ein beliebter Verwirraspekt für mich gewesen...



Ich dachte die müßten in jedem Fall über dem Script stehen. Schließlich ist in den meisten Scripts so eine Liste mit Variablen drüber. Warum genau die da stehen weiß ich sowieso nicht. *ahnungslosamkopfkratz*

Also entweder Globale definieren, oder lokal definieren.
Laß mich raten.
Globale, wenn ich sie auch außerhalb des Scriptes verwende, wie z.B. im Dialog.
Lokal definiert, wenn sie nur im Script vorkommt. Richtig?

Könnte man mit der While-Schleife nicht auch das Problem des Gefängnisaufenthalts in den Griff bekommen? Da ist es mit der Geschwindigkeit nicht so wichtig. Wenn einer nicht zahlt wird er halt bestraft.

While (knastdauer <= 7)
set knastdauer to (knastdauer + 1)
Player->GotoJail
endwhile

Wofür ist der Befehl stopscript ?

Edit: Oops... so ist der setbefehl wohl besser

Dieser Beitrag wurde von rendel am 23.04.2003, 11:34 Uhr editiert.

23.04.2003, 07:48 Profil von Füge  deiner Freunde-Liste hinzu Email an rendel senden
Garak
Admin




Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9269

Garak ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Was die Whileschleife angeht: Du kannst ja mehrere schleifen hintereinander setzen: in der ersten werden die 10000er abgezogen, in der zweiten die 1000er.... dann reduziert sich die zahl der schleifendurchläufe gewaltig!

Globals brauchst du vor allem, wenn mehrere scripte auf mehreren objekten auf den wert zugreifen müssen. Falls Du scripte auf NPC's liegen hast, kannst du vom Dialog aus auch auf die locals in dem NPC-script zugreifen, dafür ist keine global nötig.

Prinzipiell definierst du Variablen vor einem script, damit der Computer Speicherplatz dafür reservieren kann. Zudem muss er über den Typ der Variable informiert werden, da er ja erfahren muss, dass er bei der zuweisung eines Float-wertes an eine short(integer)-Variable runden muss! Ausserdem bewaht Dich der Definierzwang vor fehlern durch kleine Tippfehler in Variablennamen...

Stopscript stoppt ein script - ganz einfach! das entsprechende script wird nicht mehr aufgerufen und (hoffentlich) aus dem Speicher entfernt.

Mit der Jailgeschichte hab ich keine erfahrung - sorry! Aber ich schätze der setbefehl wird meckern, so wie Du ihn da getippt hast...


__________________
drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen

23.04.2003, 09:56 Profil von Füge  deiner Freunde-Liste hinzu Email an Garak senden Homepage von Garak Füge Garak in deine Contact-Liste ein
rendel
Mage




Dabei seit: Oktober 2002
Geschlecht:
Herkunft:
Beiträge: 185

rendel ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Im Moment hängt das Script bei der ersten MessageBox

Ich muß glaub ich noch eine Änderung reinbringen damit die variable "erinnerung" nur alle 24 Stunden abgefragt wird.

Da werde im mich doch mal in Scripting für Dummies vertiefen müssen.

@Iladrion
Das mit den Türen versuche ich mal mit enable/disable

24.04.2003, 08:09 Profil von Füge  deiner Freunde-Liste hinzu Email an rendel senden
Garak
Admin




Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9269

Garak ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Führ doch ne neue var ein (erinnerflag?) , die immer, wenn du erinnerung erhöhst, auf 1 gesetzt wird, die messagebox auslöst und nach dem auslösen wieder auf null gesetzt wird (an der stelle mit "set messageon to 1" dann ein "set erinnerflag to 0 einfügen)...


__________________
drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen

24.04.2003, 08:17 Profil von Füge  deiner Freunde-Liste hinzu Email an Garak senden Homepage von Garak Füge Garak in deine Contact-Liste ein
iladrion
Craftsman




Dabei seit: September 2002
Geschlecht: keine Angabe
Herkunft:
Beiträge: 288

iladrion ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Ich probiers nochmal, diesmal mit allem Schnickschnack, über den wir geredt haben. Ich hoffe es stimmt, so habs nur durchgeguckt. Das Script sollte so aber notfalls auch Kredite mit 3843 Raten a 571 Drakken zulassen, nur müsste man dann die Zinsen vorher reinrechnen

Ich hoffe es ist nicht zu kompliziert...:


Globale Vars deklarieren:
short rate
short erinnerung
short anzahlraten
short Ratenhoehe


Im Ratendialog unter Function/Variables folgendes prüfen, damit der Kredit nur einmal angeboten wird:
"Global" "Rate" "=" "0"

Im Dialog_Result das ganze so aufrufen:
set rate to 1
set anzahlraten to YYYYY
set Ratenhoehe to XXXXX
startscript Ratenzahlung


YYYYY = Die Anzahl die Du willst, falls Du da wechseln möchtest
XXXXX = Die höhe der Rate, damit kannst Du verschieden Choice-Dialoge machen mit unterschiedlichen Raten-Varianten

1. Globales Script, startet 2. bei Bedarf, beendet sich selbst wenn fertig

Begin Ratenzahlung

short currentday
short dayspassed
short messageon
short button
short erinnerung ;aktiviert das Zahlungsmenü

;aktiviert erst, wenn aus Menü raus
if (menumode == 1)
..return
endif

;startet Zeitzähler
if (rate == 1)
..set rate to 2
..set currentday to day
..set anzahlRaten to 0
..set Erinnerung to 0
..set dayspassed to 0
elseif (rate == 0)
..return ; so sparen wir Zeit falls kein Kredit läuft
endif

;jeder Tag wird addiert
if (currentday != day)
..set currentday to day
..set dayspassed to (dayspassed + 1)
elseif (MessageOn == 0)
return ; damit wird der Rest nur einmal am Tag ausgeführt, ausser es steht ne MSG auf dem Screen
endif

;Beginn des Zahlungszyklus
if (dayspassed == 30)
..set erinnerung to 1
..set dayspassed to 0
endif

;Startet Nachricht
if (erinnerung != 0)
..MessageBox "Rate fällig" "Zahlen" "Nicht zahlen"
..set messageOn to 1
endif

if (messageOn == 1)
..set button to GetButtonPressed
..if (button >= 0)
....set messageOn to 0
..if (button == 1)
....if (anzahlraten == 0)
......set MessageOn to 12
;diese MSG wird sonst nicht angezeigt, weil eine MSG mit abfrage aktiv ist.
....else
......startscript VariableRate
....endif
....elseif (button == 2)
....set erinnerung to (erinnerung + 1)
....endif
..endif
elseif (messageon == 12)
..MessageBox "Herzlichen Glückwunsch. Die Villa gehört jetzt Ihnen" "Ok"; mit OK damit mans nicht übersieht
..set rate to 0
..stopscript Ratenzahlung
endif

if (erinnerung == 7)
..set erinnerung to 0
..SetPCCrimeLevel 700 ;nur so nen Versuch
..GotoJail
endif
end

Zweites Globales Script, wird vom ersten gestartet und beendet sich ebenfalls selbst nach Ende der Aufgabe. Was das genau macht, versteht man wenn man in Mathe nen bissel aufgepasst hat ganz leicht.

begin VariableRate

short x
short RateUeber
short doOnce

if (menumode == 1)
..return
endif
set x to (player->GetitemCount gold_001)
if (doOnce != 1)
..set doOnce to 1
..set RateUeber to Ratenhoehe
..if (x > Ratenhoehe)
....Messagebox "Du hast gar nicht genug Geld, um Deine Rate zu bezahlen !"
....set erinnerung to erinnerung + 1
....stopscript VariableRate
..endif
endif

if (x >= 1000)
..if (RateUeber >= 1000)
....player->removeitem gold_001 1000
....set RateUeber to RateUeber - 1000
..elseif (RateUeber >= 100)
....player->removeitem gold_001 100
....set RateUeber to RateUeber - 100
..elseif (RateUeber >= 10)
....player->removeitem gold_001 10
....set RateUeber to RateUeber - 10
..elseif (RateUeber >= 1)
....player->removeitem gold_001 1
....set RateUeber to RateUeber - 1
..endif
elseif ( x >= 100)
..if (RateUeber >= 100)
....player->removeitem gold_001 100
....set RateUeber to RateUeber - 100
..elseif (RateUeber >= 10)
....player->removeitem gold_001 10
....set RateUeber to RateUeber - 10
..elseif (RateUeber >= 1)
....player->removeitem gold_001 1
....set RateUeber to RateUeber - 1
..endif
elseif ( x >= 10)
..if (RateUeber >= 10)
....player->removeitem gold_001 10
....set RateUeber to RateUeber - 10
..elseif (RateUeber >= 1)
....player->removeitem gold_001 1
....set RateUeber to RateUeber - 1
..endif
elseif ( x >= 1)
..if (RateUeber >= 1)
....player->removeitem gold_001 1
....set RateUeber to RateUeber - 1
..endif
endif
if (RateUeber == 0)
..set erinnerung to 0
..set anzahlRaten to AnzahlRaten - 1
..stopscript VariableRate
endif
end


viel erfolg damit,
keep on modding...


__________________
keep on modding...



Dieser Beitrag wurde von iladrion am 24.04.2003, 10:15 Uhr editiert.

24.04.2003, 10:03 Profil von Füge  deiner Freunde-Liste hinzu Email an iladrion senden
rendel
Mage




Dabei seit: Oktober 2002
Geschlecht:
Herkunft:
Beiträge: 185

rendel ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Danke, Iladrion, damit versuch ich es heute Abend.
Aber muß in folgende Funktion vom 2. Script nicht ein
(x < Ratenhoehe) rein?

..set RateUeber to Ratenhoehe
..if (x > Ratenhoehe)
....Messagebox "Du hast gar nicht genug Geld, um Deine Rate zu bezahlen !"


Und jetzt muß ich nur noch rausfinden, warum er mir bei meinem Barzahlungsdialog, in den ich
Player->Removeitem, gold_001, 240000
reingeschrieben habe, nur eine krumme Summe von 23579 oder so abzieht.
Im Ratendialog hat es mit der korrekten Summe von 24000 geklappt.

Rätsel über Rätsel...

24.04.2003, 11:12 Profil von Füge  deiner Freunde-Liste hinzu Email an rendel senden
iladrion
Craftsman




Dabei seit: September 2002
Geschlecht: keine Angabe
Herkunft:
Beiträge: 288

iladrion ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Zitat:
Original von rendel
Danke, Iladrion, damit versuch ich es heute Abend.
Aber muß in folgende Funktion vom 2. Script nicht ein
(x < Ratenhoehe) rein?



Da hast Du absolut recht, gutes Auge...


__________________
keep on modding...



24.04.2003, 12:10 Profil von Füge  deiner Freunde-Liste hinzu Email an iladrion senden
rendel
Mage




Dabei seit: Oktober 2002
Geschlecht:
Herkunft:
Beiträge: 185

rendel ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Mit dem Script ist er auch wieder bei der 1. MSG hängengeblieben.

Ich hab alles noch mal umgestrickt und werde die 3. Variante heute mal testen. Jetzt hängt auch die MSG hinter der Currentday != day Abfrage, sollte also definitiv nur 1x pro Tag erscheinen.


Im Dialog folgende Variablen verwenden:

set rate to 1
set ratenhoehe to xxxxxx
startscript Ratenzahlung

Globale deklarieren:

rate ;Beginnt den Script
ratenhoehe ;Definiert die Höhe der Raten

Script

Begin Ratenzahlung

short currentday
short dayspassed
short messageon
short button
short erinnerung ;aktiviert das Zahlungsmenü
short anzahlraten ;zählt die gezahlten Raten
short knastdauer

;aktiviert erst, wenn aus Menü raus
if (menumode == 1)
..return
endif

;startet Zeitzähler
if (rate == 1)
..set rate to 2
..set currentday to day
..set dayspassed to 0
endif

;Beendet Script wenn alles gezahlt
if (anzahlraten == 12)
..MessageBox "Herzlichen Glückwunsch. Das Haus gehört jetzt Ihnen" "OK"
..set rate to 0
..stopscript Ratenzahluing
endif

;jeder Tag wird addiert
if (rate == 2)
..if (currentday != day)
....set currentday to day
....set dayspassed to (dayspassed + 1)
....if (dayspassed == 30);Beginn des Zahlungszyklus
......set erinnerung to 1
......set dayspassed to 0
....endif
....if (erinnerung != 0)
......MessageBox "Ihre Rate an die Firma Traumhaus wird fällig" "Zahlen" "Nicht zahlen"
......set messageOn to 1
....endif
....if (messageOn == 1)
......set button to GetButtonPressed
......if (button >= 0)
........set messageOn to 0
........if (button == 1)
***While Schleife oder Iladrions VariableRate Script oder Mix aus beidem ***
..........set erinnerung to 0
..........set anzahlraten to (anzahlraten +1)
........elseif (button == 2)
..........set erinnerung to (erinnerung + 1)
........endif
........if (erinnerung == 7)
..........set erinnerung to 0
..........while (knastdauer <= 7) ****oder was mit Kopfgeld****
............set knastdauer to (knastdauer + 1)
............Player->GotoJail
..........endwhile
..........set anzahlraten to (anzahlraten +1)
........endif
......endif
....endif
..endif
endif

end Ratenzahlung

****While Schleife *****
while (ratenhoehe >=10000)
..set ratenhoehe to (ratenhoehe - 10000)
..player -> removeitem, gold_001, 10000
endwhile
while (ratenhoehe >=1000)
..set ratenhoehe to (ratenhoehe - 1000)
..player -> removeitem, gold_001, 1000
endwhile
while (ratenhoehe >=100)
..set ratenhoehe to (ratenhoehe - 100)
..player -> removeitem, gold_001, 100
endwhile
while (ratenhoehe >=10)
..set ratenhoehe to (ratenhoehe - 10)
..player -> removeitem, gold_001, 10
endwhile
while (ratenhoehe >=1)
..set ratenhoehe to (ratenhoehe - 1)
..player -> removeitem, gold_001, 1
endwhile

25.04.2003, 08:54 Profil von Füge  deiner Freunde-Liste hinzu Email an rendel senden
iladrion
Craftsman




Dabei seit: September 2002
Geschlecht: keine Angabe
Herkunft:
Beiträge: 288

iladrion ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Zitat:
Original von rendel
Mit dem Script ist er auch wieder bei der 1. MSG hängengeblieben.





;jeder Tag wird addiert
if (rate == 2)
..if (currentday != day)
....set currentday to day

; hier ist das Problem, der ganze Bereich darunter wird nur ein einziges mal eusgeführt, dadurch klappt die Button abfrage unten nicht

....set dayspassed to (dayspassed + 1)
....if (dayspassed == 30);Beginn des Zahlungszyklus
......set erinnerung to 1
......set dayspassed to 0
....endif
...


Hier das verbesserte Script:


Begin Ratenzahlung

short currentday
short dayspassed
short messageon
short button
short erinnerung ;aktiviert das Zahlungsmenü
short anzahlraten ;zählt die gezahlten Raten
short knastdauer

;aktiviert erst, wenn aus Menü raus
if (menumode == 1)
..return
endif

;startet Zeitzähler
if (rate == 1)
..set rate to 2
..set currentday to day
..set dayspassed to 0
endif

;Beendet Script wenn alles gezahlt
if (anzahlraten == 12)
..MessageBox "Herzlichen Glückwunsch. Das Haus gehört jetzt Ihnen" "OK"
..set rate to 0
..stopscript Ratenzahluing
endif

;jeder Tag wird addiert
if (rate == 2)
..if (currentday != day)
....set currentday to day
....set dayspassed to (dayspassed + 1)
..endif
..if (dayspassed == 30);Beginn des Zahlungszyklus
....set erinnerung to 1
....set dayspassed to 0
..endif
..if (erinnerung != 0)
....if (messageon == 0) ; diese Zeile hat auch gefehlt
......MessageBox "Ihre Rate an die Firma Traumhaus wird fällig" "Zahlen" "Nicht zahlen"
......set messageOn to 1
....endif
..endif
..if (messageOn == 1)
....set button to GetButtonPressed
....if (button >= 0)
......set messageOn to 0
......if (button == 1)
***While Schleife oder Iladrions VariableRate Script oder Mix aus beidem ***
........set erinnerung to 0
........set anzahlraten to (anzahlraten +1)
......elseif (button == 2)
........set erinnerung to (erinnerung + 1)
......endif
....endif
..endif
..if (erinnerung == 7)
....set erinnerung to 0
....while (knastdauer <= 7) ****oder was mit Kopfgeld****
........set knastdauer to (knastdauer + 1)
........Player->GotoJail
......endwhile
......set anzahlraten to (anzahlraten +1)
....endif
..endif
endif

end Ratenzahlung


Ích hoffe so geht's
viel erfolg



__________________
keep on modding...



27.04.2003, 19:12 Profil von Füge  deiner Freunde-Liste hinzu Email an iladrion senden
jUBAKKAJONEs
Bard



Dabei seit: Januar 2003
Geschlecht:
Herkunft: 59439
Beiträge: 26

jUBAKKAJONEs ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

könnte man das mit dem gefängins aufenthalt nicht so lösen das man in einen raum mit verschlossener tür und einem bett teleportiert wird und nach 7 tagen die tür aufgeht also aufgeschlossen wird?


__________________
persönliche Signatur Wird unter ihren Beiträgen angezeigt

01.05.2003, 21:55 Profil von Füge  deiner Freunde-Liste hinzu Email an jUBAKKAJONEs senden
rendel
Mage




Dabei seit: Oktober 2002
Geschlecht:
Herkunft:
Beiträge: 185

rendel ist offline
  Noch zwei Scripte die nicht so wollenAntwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Ich glaube, das würde einige Spieler ziemlich verstören, da sie ja selbst duch das Warten-Menü die 7x24 Stunden vergehen lassen müßten. Und da kommt bestimmt nicht jeder drauf.

Aber mal was ganz anderes.
Das Ratenzahlungsscript habe ich erst mal ans Ende der Mod-Fertigung gesetzt. Die Inneneinrichtung meines Mods steht zu 90%. Nur mit den Scripten hapert es noch. Vielleicht könnt Ihr mir helfen.

Folgender Script soll die Globale Variable Taenzer nach Betätigung eines Schalters auf 1 stellen und nach 120 Sekunden wieder auf 0. Wenn der Schalter ein zweites Mal betätigt wird soll nur eine MSG kommen, sonst nichts (das funktioniert).
Aber....Wenn ich den Schalter drücke werden nur die GVar Taenzer und TimerStart auf 1 gesetzt. Der Timer zählt nicht hoch. Setzte ich per Konsole den Timer auf 121, setzt das Script alle Variablen wie gewollt auf 0.
Warum funktionert der Timer nicht? Ich hab schon alles versucht, mit und ohne Klammern bei GetSecondsPassed und verschiedene Reihenfolgen der if-Bedingungen. Das Ergebnis ist immer das selbe. Ich weiß echt nicht mehr weiter. Der Timer ist übrigens so aus einem funktionierenden Script aus Tribunal (mehryn script).

begin VillaSchalterTaenzer

short timer
short TimerStart
short DoOnce

if ( menumode == 1 )
return
endif

if ( TimerStart == 1 )
set timer to ( timer + GetSecondsPassed )
if ( timer > 120 )
set TimerStart to 0
set Taenzer to 0
set timer to 0
endif
endif

if ( OnActivate == 1 )
if ( Taenzer == 1 )
if ( DoOnce == 0 )
MessageBox "Die Show läuft schon"
set DoOnce to 1
endif
endif
if ( Taenzer == 0 )
set Taenzer to 1
set TimerStart to 1
PlaySound "Item Gold Down"
Player -> RemoveItem, gold_001, 100
endif
endif

end

Und noch eine Frage:
Dieser Script soll den Charakter heilen, wenn er auf eine bestimmte Bodenplatte tritt. Wenn ich statt ModCurrent... HurtStandingActor nehme funktioniert es, allerdings erscheint dann pro Sekunde ein unschöner roter Schimmer ums Bild, wie wenn man verletzt wird. Warum funktioniert ModCurrent... nicht?

begin VillaHeilung

if ( menumode == 1 )
return
endif

if ( GetStandingPC == 1 )
;HurtStandingActor, -2.0
ModCurrentHealth, 1.0
ModCurrentMagicka, 1.0
endif

end

01.05.2003, 22:06 Profil von Füge  deiner Freunde-Liste hinzu Email an rendel senden
iladrion
Craftsman




Dabei seit: September 2002
Geschlecht: keine Angabe
Herkunft:
Beiträge: 288

iladrion ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Zitat:
Original von jUBAKKAJONEs
könnte man das mit dem gefängins aufenthalt nicht so lösen das man in einen raum mit verschlossener tür und einem bett teleportiert wird und nach 7 tagen die tür aufgeht also aufgeschlossen wird?



prinzipiell Ja, aber in vergeht die Zeit zwar schon 30mal schneller als normal, nur kann ich mir nicht vorstellen, das jemand, weil er die Rate nicht bezahlt hat 5 Stunden und 40 Minuten (So lange dauern 7 Tage in MW) im Spiel die Mauer angucken möchte. Allerdings wäre das wirklich mal HardCore-Rollenspiel. Ab und an kommt ne Wache vorbei und stellt nen stinkenden Teller Essen vors Gitter.

Aber vielleicht wäre deine Idee umsetzbar falls man per Script Zugriff auf die TimeScale-Variable bekäme. Aber ich wüsste nicht wie. *grübel* vielleicht könnte man stattdessen ab und an per "set gamehour to gamehour + 1" nachhelfen (Damit kann man die Zeit inklusive Sonnenstand verstellen)???


__________________
keep on modding...



01.05.2003, 22:41 Profil von Füge  deiner Freunde-Liste hinzu Email an iladrion senden
Garak
Admin




Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9269

Garak ist offline
  Antwort mit Zitat Beitrag editieren/löschen Nach weiteren Beiträge von  suchen Diesen Beitrag einem Moderator melden        IP Adresse Zum Anfang der Seite springen

Rendel, Dein Timer funktioniert nicht, weil du ihn als Shortvariable definiert hast. GetSecondsPassed liefert normalerweise Werte unter 0,5, d.H. bei der zuweisung zu einer Short-Variable wird auf 0 abgerundet - änder die Definition des timers von short auf float und die sache läuft!

Warum modcurrenthealth nicht funktioniert ist mir unklar, schon weil modcurrentmagicka auch bei mir gut funktioniert - vieleicht etwas ähnliches wie bei getHealthGetRatio? das steht als GetHealthRatio im Helpfile und funktioniert erst mit dem "Bonus-get"... Wie wär es alternativ damit dem Player solange er auf der Platte steht einen als ability definierten Spell auferlegt, der Health und Magicka regeneriert? Adspell und Removespell sind normalerweise wenig zickig...


__________________
drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen

02.05.2003, 07:06 Profil von Füge  deiner Freunde-Liste hinzu Email an Garak senden Homepage von Garak Füge Garak in deine Contact-Liste ein
[  1  2  >  »  ]   « Vorheriges Thema Nächstes Thema »
Neues Thema erstellen Antwort erstellen
Gehe zu:

Design by: Garak - Powered by: Burning Board 1.1.1 © 2001 WoltLab GbR