Najnowsze newsy ze świata Mount&Blade: ( Dodaj własny news )

Nowy trailer i gameplay z Bannerlorda z E3 2017

12.06.2017 | Dodał: Dyktator

12 czerwca 2017 zaprezentowano nowy trailer Bannerlorda w ramach targów E3 2017.   więcej

Castellans wygrywa BoB 2017

22.05.2017 | Dodał: Prusak

Pierwszy turniej LAN na Warband dobiegł końca. więcej

Battle of Bucharest 2017

07.05.2017 | Dodał: Kradus

Pierwszy turniej na Mount&Blade: Warband, w którym do wygrania nagrody pieniężne! Zapisy do 9 (...) więcej

Strona główna Mount&Blade | ukryj panel

Pokaż panel z newsami »

Polub nasz profil na facebooku! oraz dołącz do naszej Grupy STEAM

Autor Wątek: [OSP] Skrypty by Garedyr  (Przeczytany 6827 razy)

Opis tematu:

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Haazheel

  • Bibosz
  • *
  • Wiadomości: 419
  • Piwa: 13
  • Płeć: Mężczyzna
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #15 dnia: Listopad 06, 2015, 14:51:18 »
Wiem że długo nikt tu nie pisał, bo nie widzę sensu tworzenia nowego wątku w którym mam pytanie do tych skryptów. Czy jest możliwość bezpiecznej modyfikacji skryptu dodający rekrutanta w tawernach? Chodzi mi o to by zrobić tak ze jeden rekrutant zapewnia jeden lub kilka jednostek, a następny miałby coś innego do z rekrutowania.

Offline Garedyr

  • Bibosz
  • *
  • Wiadomości: 447
  • Piwa: 58
  • Płeć: Mężczyzna
  • Plz, Kazuma-san :O__O:
  • Steam ID: Mój status Steam
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #16 dnia: Listopad 06, 2015, 17:26:16 »
Wiem że długo nikt tu nie pisał, bo nie widzę sensu tworzenia nowego wątku w którym mam pytanie do tych skryptów. Czy jest możliwość bezpiecznej modyfikacji skryptu dodający rekrutanta w tawernach? Chodzi mi o to by zrobić tak ze jeden rekrutant zapewnia jeden lub kilka jednostek, a następny miałby coś innego do z rekrutowania.

Bezpiecznej w sensie pozwolenia? Jeśli o to ci chodziło, to pamiętaj, że to jest OSP. Możesz robić z tym co chcesz, byle byś dodał mnie do creditsów ;) Biorąc jednak pod uwagę to, że te skrypty są zwyczajnie stare, to proszę o zwracania się z takimi problemami na PW, a ja wtedy postaram się rozwiązać wasze problemy.


"Szukaj po omacku ch*ja w cieście" ~Prußak
"Jakbym miał pasztet to bym zjadł kanapkę z pasztetem ale nie mam chleba" ~Mat Berserker

Offline Garedyr

  • Bibosz
  • *
  • Wiadomości: 447
  • Piwa: 58
  • Płeć: Mężczyzna
  • Plz, Kazuma-san :O__O:
  • Steam ID: Mój status Steam
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #17 dnia: Listopad 29, 2015, 14:38:14 »
Nowa wersja skryptu blokowania pocisków (2.1)

Jest to nowa wersja odbijania pocisków. Stara zawierała trochę niedociągnięć i innych pierdół. Aby zablokować pocisk należy posiadać broń dwuręczną (drzewcowa się nie liczy) oraz trzymać prawy przycisk myszy. W tej wersji można blokować pociski siedząc na koniu, co nie było możliwe w starej wersji skryptu.

Co jest pociskiem:

- strzała
- bełt

Skrypt wrzucamy module_mission_templates, pod tymi linijkami
(click to show/hide)

Skrypt:

(click to show/hide)

Teraz wystarczy wkleić commona do dowolnej misji, w której chcemy mieć możliwość blokowania pocisków.

Przykład użycia w lead_charge:

(click to show/hide)

EDIT

Uwzględniłem uwagi Daedalusa. Dziękuję mu za opinię oraz podanie nowych rzeczy, które zostały olane przez Taleworlds ;)


« Ostatnia zmiana: Grudzień 01, 2015, 15:06:14 wysłana przez Garedyr »


"Szukaj po omacku ch*ja w cieście" ~Prußak
"Jakbym miał pasztet to bym zjadł kanapkę z pasztetem ale nie mam chleba" ~Mat Berserker

Offline Lew

  • Obrońca Tawerny
  • Moderator Globalny
  • Senior
  • **
  • Wiadomości: 6489
  • Piwa: 518
  • Płeć: Mężczyzna
  • Lew Rockwell
  • Steam ID: Mój status Steam
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #18 dnia: Listopad 29, 2015, 19:23:43 »
Miło, że apdejtujesz swoje stare skrypty i dzielisz się nimi z innymi userami :)
Takich wspaniałych meczów nie uświadczycie na nejtivie ~Rivet
Eh Dobra s*j za niski poziom dyakusjh no ale czego sie spodziewac po osobie ktora slucha rapu ~Kokosz

Offline Daedalus

  • Admin Emeryt
  • Błędny rycerz
  • ***
  • Wiadomości: 3853
  • Piwa: 130
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #19 dnia: Listopad 30, 2015, 18:13:29 »
Garedyr, kilka uwag:

1. Niepotrzebnie sprawdzasz atakującego. Wystarczy bowiem, aby atakujący zginął zaraz po strzale i już pocisku nie będzie się dało zablokować. Atakujący nie jest tu do niczego potrzebny, więc śmiało można go wywalić.

2. Zamiast z niepewnego reg0 lepiej po prostu skorzystać z parametru 4 (broń) lub 6 (pocisk) i tutaj sprawdzać typ przedmiotu.

3. Używanie połączenia "this_or_next" z "agent_set_animation" jest zupełnie bezcelowe, bo "agent_set_animation" to nie jest operacja warunkowa. W Twoim wypadku uruchomi się więc zawsze pierwsza linijka. Jeśli chcesz aby losowo odtwarzała się któraś z wybranych animacji (a podejrzewam, że taki był zamiar), to musisz to zrobić nieco inaczej. ;)

4. Dla bezpieczeństwa nie używałbym też (set_trigger_result, ":damage"), o ile nie modyfikujesz obrażeń poprzez skrypt. Używa się tej operacji tylko po to, by nadpisać domyślną wartość, a tutaj zostaje ona taka sama. Zatem zmienna ":damage" jest w tym skrypcie zupełnie niepotrzebna i śmiało obie linijki z nią możesz wywalić.

5. Do skryptu dodałbym jeszcze sprawdzanie pozycji, bo pewnie trochę to głupio wygląda, gdy ktoś dostaje w plecy, a mimo to odbija pocisk mieczem. ;)

Offline Garedyr

  • Bibosz
  • *
  • Wiadomości: 447
  • Piwa: 58
  • Płeć: Mężczyzna
  • Plz, Kazuma-san :O__O:
  • Steam ID: Mój status Steam
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #20 dnia: Listopad 30, 2015, 18:38:16 »
Garedyr, kilka uwag:

1. Niepotrzebnie sprawdzasz atakującego. Wystarczy bowiem, aby atakujący zginął zaraz po strzale i już pocisku nie będzie się dało zablokować. Atakujący nie jest tu do niczego potrzebny, więc śmiało można go wywalić.

2. Zamiast z niepewnego reg0 lepiej po prostu skorzystać z parametru 4 (broń) lub 6 (pocisk) i tutaj sprawdzać typ przedmiotu.

3. Używanie połączenia "this_or_next" z "agent_set_animation" jest zupełnie bezcelowe, bo "agent_set_animation" to nie jest operacja warunkowa. W Twoim wypadku uruchomi się więc zawsze pierwsza linijka. Jeśli chcesz aby losowo odtwarzała się któraś z wybranych animacji (a podejrzewam, że taki był zamiar), to musisz to zrobić nieco inaczej. ;)

4. Dla bezpieczeństwa nie używałbym też (set_trigger_result, ":damage"), o ile nie modyfikujesz obrażeń poprzez skrypt. Używa się tej operacji tylko po to, by nadpisać domyślną wartość, a tutaj zostaje ona taka sama. Zatem zmienna ":damage" jest w tym skrypcie zupełnie niepotrzebna i śmiało obie linijki z nią możesz wywalić.

5. Do skryptu dodałbym jeszcze sprawdzanie pozycji, bo pewnie trochę to głupio wygląda, gdy ktoś dostaje w plecy, a mimo to odbija pocisk mieczem. ;)

Dziękuję za uwagi, oczywiście dostosuję się do nich ;) Nie daje mi spokoju tylko 1 rzecz:

[...]lepiej po prostu skorzystać z parametru 4 (broń) lub 6 (pocisk) i tutaj sprawdzać typ przedmiotu.[...]

W moim pliku header_triggers nie ma wzmianki o parametrach 4 i 6. Czy ja mam nieaktualną wersję pliku header_triggers w moim MS 1.166, czy to ty masz jakąś pre-wersje nowego MS?

Cytuj
ti_on_agent_hit          = -28.0 #can only be used in module_mission_templates triggers
# Trigger Param 1: damage inflicted agent_id
# Trigger Param 2: damage dealer agent_id
# Trigger Param 3: inflicted damage
# Register 0: damage dealer item_id
# Position Register 0: position of the blow
#                      rotation gives the direction of the blow
# Trigger result: if returned result is greater than or equal to zero, inflicted damage is set to the value specified by the module.




"Szukaj po omacku ch*ja w cieście" ~Prußak
"Jakbym miał pasztet to bym zjadł kanapkę z pasztetem ale nie mam chleba" ~Mat Berserker

Offline Daedalus

  • Admin Emeryt
  • Błędny rycerz
  • ***
  • Wiadomości: 3853
  • Piwa: 130
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #21 dnia: Listopad 30, 2015, 19:02:22 »
Wraz z wydaniem VC doszło trochę zmian i trochę nowych operacji. Nie śledziłem angielskiego forum zbyt intensywnie przez ostatni rok, ale byłem pewien, że poinformowali ludzi o tych zmianach i nowych rzeczach. Widocznie to olali. :D

Jak będę miał chwilkę to zerknę do starego MS i porównam co dam doszło. Na razie łap ten trigger (jednak pomyliłem się z tym reg0 i parametrami 4 i 6, patrzyłem na trigger "ti_on_scene_prop_hit"):

ti_on_agent_hit          = -28.0 #can only be used in module_mission_templates triggers
# Trigger Param 1: damage inflicted agent_id
# Trigger Param 2: damage dealer agent_id
# Trigger Param 3: inflicted damage
# Trigger Param 4: hit bone
# Trigger Param 5: missile item kind no
# Register 0: damage dealer item_id
# Position Register 0: position of the blow
#                      rotation gives the direction of the blow
# Trigger result: if returned result is greater than or equal to zero, inflicted damage is set to the value specified by the module.

Offline Garedyr

  • Bibosz
  • *
  • Wiadomości: 447
  • Piwa: 58
  • Płeć: Mężczyzna
  • Plz, Kazuma-san :O__O:
  • Steam ID: Mój status Steam
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #22 dnia: Listopad 30, 2015, 19:43:29 »
Wraz z wydaniem VC doszło trochę zmian i trochę nowych operacji. Nie śledziłem angielskiego forum zbyt intensywnie przez ostatni rok, ale byłem pewien, że poinformowali ludzi o tych zmianach i nowych rzeczach. Widocznie to olali. :D

Jak będę miał chwilkę to zerknę do starego MS i porównam co dam doszło. Na razie łap ten trigger (jednak pomyliłem się z tym reg0 i parametrami 4 i 6, patrzyłem na trigger "ti_on_scene_prop_hit"):

ti_on_agent_hit          = -28.0 #can only be used in module_mission_templates triggers
# Trigger Param 1: damage inflicted agent_id
# Trigger Param 2: damage dealer agent_id
# Trigger Param 3: inflicted damage
# Trigger Param 4: hit bone
# Trigger Param 5: missile item kind no
# Register 0: damage dealer item_id
# Position Register 0: position of the blow
#                      rotation gives the direction of the blow
# Trigger result: if returned result is greater than or equal to zero, inflicted damage is set to the value specified by the module.

Jest jeszcze druga sprawa, czyli kości. Domyślnie nie są one zdefiniowane w plikach MS, a jedynie znajdują się gdzieś w folderze Data. Wystarczy zdefiniować je w header_common?


"Szukaj po omacku ch*ja w cieście" ~Prußak
"Jakbym miał pasztet to bym zjadł kanapkę z pasztetem ale nie mam chleba" ~Mat Berserker

Offline Daedalus

  • Admin Emeryt
  • Błędny rycerz
  • ***
  • Wiadomości: 3853
  • Piwa: 130
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #23 dnia: Listopad 30, 2015, 21:10:55 »
Tak, wystarczy wkleić do header_common:
#Human bones
hb_abdomen = 0
hb_thigh_l = 1
hb_calf_l = 2
hb_foot_l = 3
hb_thigh_r = 4
hb_calf_r = 5
hb_foot_r = 6
hb_spine = 7
hb_thorax = 8
hb_head = 9
hb_shoulder_l = 10
hb_upperarm_l = 11
hb_forearm_l = 12
hb_hand_l = 13
hb_item_l = 14
hb_shoulder_r = 15
hb_upperarm_r = 16
hb_forearm_r = 17
hb_hand_r = 18
hb_item_r = 19

#Horse bones
hrsb_pelvis = 0
hrsb_spine_1 = 1
hrsb_spine_2 = 2
hrsb_spine_3 = 3
hrsb_neck_1 = 4
hrsb_neck_2 = 5
hrsb_neck_3 = 6
hrsb_head = 7
hrsb_l_clavicle = 8
hrsb_l_upper_arm = 9
hrsb_l_forearm = 10
hrsb_l_hand = 11
hrsb_l_front_hoof = 12
hrsb_r_clavicle = 13
hrsb_r_upper_arm = 14
hrsb_r_forearm = 15
hrsb_r_hand = 16
hrsb_r_front_hoof = 17
hrsb_l_thigh = 18
hrsb_l_calf = 19
hrsb_l_foot = 20
hrsb_l_back_hoof = 21
hrsb_r_thigh = 22
hrsb_r_calf = 23
hrsb_r_foot = 24
hrsb_r_back_hoof = 25
hrsb_tail_1 = 26
hrsb_tail_2 = 27

Offline MadGuarang

  • Pielgrzym
  • *
  • Wiadomości: 42
  • Piwa: 8
  • Płeć: Mężczyzna
  • Autor PARADIGM WORLDS.
    • PARADIGM WORLD WARBAND MOD
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #24 dnia: Styczeń 12, 2016, 14:51:35 »
Cytuj
Nagrody za dołączenie do frakcji (jak w Nowej Ojczyźnie) napisany przeze mnie

Hej,

bardzo fajny skrypt. Mam do tego wątku pytanie. Popełniam zapewne jakiś błąd totalnego nowicjusza... Otóż skrypt działa wyśmienicie, tak długo, jak odwołuję się do przedmiotów istniejących w podstawce np.

Cytuj
(troop_add_item, "trp_player", "itm_sword_viking_1", 0),

natomiast postanowiłem rozwinąć pomysł tworząc unikatowy przedmiot. W module_items.py utworzyłem (na próbę) idealną kopię kuszy, zmieniając jedynie jej "pierwszą" nazwę na special:

Cytuj
["hunting_crossbow", "Hunting Crossbow", [("crossbow_a",0)], itp_type_crossbow |itp_merchandise|itp_primary|itp_two_handed ,itcf_shoot_crossbow|itcf_carry_crossbow_back,22 , weight(2.25)|difficulty(0)|spd_rtng(47) | shoot_speed(50) | thrust_damage(37 ,  pierce)|max_ammo(1),imodbits_crossbow ],
["special_crossbow", "Special Crossbow", [("crossbow_a",0)], itp_type_crossbow |itp_merchandise|itp_primary|itp_two_handed ,itcf_shoot_crossbow|itcf_carry_crossbow_back,22 , weight(2.25)|difficulty(0)|spd_rtng(47) | shoot_speed(50) | thrust_damage(37 ,  pierce)|max_ammo(1),imodbits_crossbow ],

potem w module_dialogs.py umieściłem jej nazwę:

Cytuj
(eq, ":fac", "fac_kingdom_2"),
   (troop_add_item, "trp_player", "special_crossbow", 0),
         (try_end),

Niestety, przy kompilacji wyskakuje błąd:
Cytuj
ERROR: unrecognized tag:specialin object: special_crossbow
ERROR: illegal identifier:special crossbow

powtarza się to przy każdej próbie dodania stworzonego przedmiotu przeze mnie, jeśli wybieram jakiś przedmiot z nativa problemu nie ma.

Podejrzewam (może źle), że nowy stworzony przeze mnie przedmiot trzeba wpisać na jakąś dodatkową listę (?), gdzieś zadeklarować, ale w żadnym tutorialu o dodawaniu przedmiotów (przynajmniej w ang i pl, które czytałem) nikt nic o takiej konieczności nie wspominał.

Będę wdzięczny za pomoc :)

Offline Lew

  • Obrońca Tawerny
  • Moderator Globalny
  • Senior
  • **
  • Wiadomości: 6489
  • Piwa: 518
  • Płeć: Mężczyzna
  • Lew Rockwell
  • Steam ID: Mój status Steam
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #25 dnia: Styczeń 12, 2016, 15:01:25 »
Umieść z przodu itm. Czyli jak dodajesz to do kodu musisz dodać to tak: itm_special_crossbow
Takich wspaniałych meczów nie uświadczycie na nejtivie ~Rivet
Eh Dobra s*j za niski poziom dyakusjh no ale czego sie spodziewac po osobie ktora slucha rapu ~Kokosz

Offline MadGuarang

  • Pielgrzym
  • *
  • Wiadomości: 42
  • Piwa: 8
  • Płeć: Mężczyzna
  • Autor PARADIGM WORLDS.
    • PARADIGM WORLD WARBAND MOD
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #26 dnia: Styczeń 12, 2016, 15:13:46 »
Wielkie dzięki za prędką i właściwą odpowiedź. Wszystko zadziałało!

Offline MadGuarang

  • Pielgrzym
  • *
  • Wiadomości: 42
  • Piwa: 8
  • Płeć: Mężczyzna
  • Autor PARADIGM WORLDS.
    • PARADIGM WORLD WARBAND MOD
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #27 dnia: Styczeń 12, 2016, 18:59:24 »
Po pozytywnym rozpatrzeniu skryptu na prezenty za wejście do frakcji przez kompilator zabrałem się za skrypt kanibalizmu. Zadziałałem wg wskazówek na Talewords ( http://forums.taleworlds.com/index.php/topic,306883.0.html ) i wszystko świetnie działa. Gratulacje za super pomysł.

Jedynie kod w module_game_menus:
 
Cytuj
[(assign, "$temp", "itm_ludzkie_mieso"),
      (try_begin),
      (troop_remove_item,"trp_player","itm_ludzkie_mieso"),
       (troop_add_item,"trp_player","itm_pieczone_ludzkie_mieso"),
       (display_message,"@You roasted some human flesh on fire.", 0x00FF00),
       (rest_for_hours, 3, 5, 1),

zamieniłem na:

Cytuj
[(assign, "$temp", "itm_ludzkie_mieso"),
      (try_begin),
     (call_script, "script_change_troop_renown", "trp_player", 2),
     (add_xp_to_troop, 250, "trp_player"),
     (assign, reg7, "$player_honor"),
         (val_add, reg7, -1),
         (display_message, "@Player honor is decreased by 1 and it is now {reg7}."),
         (val_add, "$player_honor", 1),
      (troop_remove_item,"trp_player","itm_ludzkie_mieso"),
       (troop_add_item,"trp_player","itm_pieczone_ludzkie_mieso"),
       (display_message,"@You roasted some human flesh on fire. This horrific action decreased your honour by 1 point, increased renown by 2 and made you more experienced (+250 exp).", 0x00FF00),
       (rest_for_hours, 3, 5, 1),

czyli dodałem opcję, by za każde mięso pc dostawał 250exp, +2 renomy a tracił punkt honoru - i to także zadziałało. Co bardzo mnie cieszy bo bardzo powoli, ale tą metodą małych dodatków baaaardzo powoli zaczynam coś ledwo kojarzyć ze skryptami.

Z tego też powodu - ale i dla rozbudowy tego motywu w ogóle działania z więźniami na różne sposoby - postanowiłem dodać jeszcze dwie/trzy opcje, ale wyraźnie znów brak podstawowej wiedzy daje się we znaki, także byłbym wdzięczny za pomoc.

Najpierw, co chcę osiągnąć:
 
Do rozmowy z więźniem, znajdującej się w module_dialogs chciałem dodać opcję "szybkiego okupu". Linijka PC "Dawaj ile masz kasy i spadaj" prowadzi do odpowiedzi więźnia: "Dzięki i niech Ci bogowie blablabla...", teraz losowanie liczby od 10 do 50, dodanie wylosowanej liczby do ogólnej kasy PC.

Szukałem po forum instrukcji losowania i natknałem się na coś takiego (https://forums.taleworlds.com/index.php?topic=59574.0):
Cytuj
  (store_random_in_range,reg1,0,5),
  (store_random_in_range,reg2,0,5),
  (store_random_in_range,reg3,0,5),
  (store_random_in_range,reg4,0,5),
  (store_random_in_range,reg5,0,5),
  (store_random_in_range,reg6,0,5),
  (store_random_in_range,reg7,0,5),
  (store_random_in_range,reg8,0,5),
  (store_random_in_range,reg9,0,5),
  (store_random_in_range,reg10,0,5),
  (store_random_in_range,reg11,0,5),
  (store_random_in_range,reg12,0,5),
 
  (display_message,"@ {reg1} {reg2} {reg3} {reg4} {reg5} {reg6} {reg7} {reg8} {reg9} {reg10} {reg11} {reg12}"),

czyli losowanie szybkiego okupu powinno wygladać mniej więcej tak:
Cytuj
(store_random_in_range,reg1,10,50),

oryginalna linijka "kanibalizmu" gdzie PC dostaje za zabicie więźnia sztukę mięsa wygląda tak:
Cytuj
[anyone|plyr,"prisoner_chat_6", [], "Hey, team, we have a lot of good meet here. Go get me a knife for filleting!", "close_window",[(troop_add_item, "trp_player", "itm_ludzkie_mieso", 0),(store_conversation_troop,reg(1)), (remove_troops_from_prisoners,reg(1),1),]],

czyli została w niej wykorzystana zmienna(?) reg(1) - nie wiem, czy ta sama, czy nie co w losowaniu.

Także moją wersję zapisałem pod zmienną din1 i moja linijka wygląda tak:
Cytuj
[anyone,"prisoner_chat_7", [], "Thank you! This is all I have, please take it and let the gods be with you!", "close_window",[(store_random_in_range,din1,10,50),(call_script, "script_troop_add_gold", "trp_player", {din1}),(store_conversation_troop,reg(1)), (remove_troops_from_prisoners,reg(1),1),]],

zakładam, że nie jest to właściwy sposób losowania i dodawania, bo w kompilacji wyskakuje błąd:

http://imageshack.com/a/img903/4815/ku86oh.jpg

Zmienną din1 dodałem, żeby zobaczyć czy to pozwoli mi na losowanie.

Z góry dzięki za pomoc.


Od razu zaznaczę drugi problem, a może bardziej pytanie:
idąc tym samym tropem co linijka wyżej chciałem sprawić, by za zabicie więźnia PC dostawał, powiedzmy 250exp, wkleiłem coś takiego:
Cytuj
[anyone|plyr,"prisoner_chat_8", [], "You have to die", "close_window",[(add_xp_to_troop, 250, "trp_player"),(store_conversation_troop,reg(1)), (remove_troops_from_prisoners,reg(1),1),]],

poskutkowało to tylko całą listą błędów w kompilacji. Co robię źle? Czy po prostu w module_dialogs nie powinno się umieszczać takich kodów, czy po prostu coś źle wklepałem?

i jakby ktoś miał jeszcze troszkę cierpliwości: :)

a gdybym chciał za zabicie więźnia dodać jeden losowo wybrany przedmiot z jego ekwipunku do ekwipunku PC... jakieś rady jak w ogóle się za to zabrać?


Offline Garedyr

  • Bibosz
  • *
  • Wiadomości: 447
  • Piwa: 58
  • Płeć: Mężczyzna
  • Plz, Kazuma-san :O__O:
  • Steam ID: Mój status Steam
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #28 dnia: Styczeń 12, 2016, 20:54:58 »
Także moją wersję zapisałem pod zmienną din1 i moja linijka wygląda tak:

[anyone,"prisoner_chat_7", [], "Thank you! This is all I have, please take it and let the gods be with you!", "close_window",[(store_random_in_range,din1,10,50),(call_script, "script_troop_add_gold", "trp_player", {din1}),(store_conversation_troop,reg(1)), (remove_troops_from_prisoners,reg(1),1),]],

Zacznijmy od podstaw. Istnieją dwa rodzaje zmiennych - lokalne i globalne. Lokalne zmienne są używane jedynie w pojedynczych blokach kodu, oddzielonych kwadratowymi nawiasami. Zmienne globalne są używane i rozpoznawane przez każdy plik, a nie tylko pojedynczy blok kodu.

Przykład zmiennej lokalnej:

":zmienna"
Przykład zmiennej globalnej:

"$zmienna"
Cudzysłowy są konieczne. Jak można zauważyć, zmienne globalne są poprzedzane dolarem, a nie dwukropkiem tak jak to jest w zmiennych lokalnych.

Istnieją jeszcze reguły. Są one używane jeśli chcemy gdzieś "wyświetlić" wartość reguły.

Reguły wyglądają tak:

reg1
Przy regułach nie używamy cudzysłowów. Jeśli chcemy wyświetlić wartość reguły w jakimś menu, dialogu, to musimy umieścić tam {reg1}.

Twoja zmienna din1 w tym przypadku jest lokalna, więc powinna wyglądać tak:

":din1"
czyli została w niej wykorzystana zmienna(?) reg(1) - nie wiem, czy ta sama, czy nie co w losowaniu.

reg(1) jest przykładem starych, przestarzałych reguł z podstawowego M&B. Można dalej tego używać, aczkolwiek nie jest to wskazane.

Najlepiej by było gdybyś zamienił swoją linijkę uwalniającą więźnia na tę:

[anyone,"prisoner_chat_7", [], "Thank you! This is all I have, please take it and let the gods be with you!", "close_window",[(store_random_in_range, ":din1", 10, 50),(troop_add_gold, "trp_player", ":din1"),(store_conversation_troop, ":jednostka"), (remove_troops_from_prisoners, ":jednostka", 1)]],


"Szukaj po omacku ch*ja w cieście" ~Prußak
"Jakbym miał pasztet to bym zjadł kanapkę z pasztetem ale nie mam chleba" ~Mat Berserker

Offline Mat Berserker

  • Żonglujący Pepeszami
  • Awanturnik
  • *
  • Wiadomości: 1985
  • Piwa: 81
  • Płeć: Mężczyzna
Odp: [OSP] Skrypty by Garedyr
« Odpowiedź #29 dnia: Styczeń 13, 2016, 00:47:24 »
Garedyr ogólnie dobrze gada ale chcę doprecyzować. Reg1 to nie skrót od reguły tylko od rejestru(liczbowego). I nie jest ona per se przestarzała w warbandzie co raczej ma ograniczone zastosowanie. Rejestry są w gruncie rzeczy zmiennymi globalnymi ale nie są identyfikowane poprzez nazwę("$zmienna") a poprzez numer(reg12). Można ich używać wszędzie ale nie ma gwarancji na niemodyfikowanie ich poprzez inne skrypty(zarówno wywołane jawnie poprzez call_script jak i niejawnie poprzez grę po zadaniu jednostce obrażeń itd). Aktualnie rejestry znajdują głównie zastosowanie jako dodatkowe argumenty w niektórych wyzwalaczach(triggers) oraz jako wartość zwracana przez  niektóre skrypty-funkcje. Dodatkową własnością rejestrów jest to że silnik gry umie podstawiać je pod markery w napisach. Gdy wypisujesz gdzieś wiadomość o treści "@Wynik to: {reg10} i bardzo mnie to cieszy" to wartość liczbowa zawarta w rejestrze reg10 zostanie automatycznie umieszczona w napisie. Gdy zawartość rejestru wynosi 123 wo wynikowy napis będzie brzmiał "Wynik to: 123 i bardzo mnie to cieszy".
Przykład takiego działania wysłałeś tutaj:
  (store_random_in_range,reg1,0,5),
  (store_random_in_range,reg2,0,5),
  (store_random_in_range,reg3,0,5),
  (store_random_in_range,reg4,0,5),
  (store_random_in_range,reg5,0,5),
  (store_random_in_range,reg6,0,5),
  (store_random_in_range,reg7,0,5),
  (store_random_in_range,reg8,0,5),
  (store_random_in_range,reg9,0,5),
  (store_random_in_range,reg10,0,5),
  (store_random_in_range,reg11,0,5),
  (store_random_in_range,reg12,0,5),
 
  (display_message,"@ {reg1} {reg2} {reg3} {reg4} {reg5} {reg6} {reg7} {reg8} {reg9} {reg10} {reg11} {reg12}"),

Aby poszerzyć temat dodam że oprócz rejestrów liczbowych(reg0,reg1,...,reg12,...) istnieją też rejestry napisowe(str0,str1,...,str12,...) jak i pozycyjne(pos0,pos1,...,pos12,...) co do których stosują się te same ograniczenia i wady. Jednak w ich przypadku nie ma alternatywy w postaci nazywanych zmiennych co może powodować wiele bugów.