Usunięcie przedmiotu z ekwipunku 6750 15

O temacie

Autor Gornos

Zaczęty 16.05.2014 roku

Wyświetleń 6750

Odpowiedzi 15

Gornos

Gornos

Quest Pack Team
posty90
Propsy87
ProfesjaLvl designer
  • Quest Pack Team

Gornos
Quest Pack Team

Usunięcie przedmiotu z ekwipunku
2014-05-16, 19:23(Ostatnia zmiana: 2014-05-16, 19:30)
Witam wszystkich. Przechodząc do sedna sprawy. Zrobiłem sobie zen, w którym umieściłem platformę teleportacyjną, taką jak te w Jarkendarze. Wszystko fajnie, platforma działa i do niej zastrzeżeń nie mam żadnych. Problem pojawia się w piedestale, który teleport aktywuje. Z założenia miał on swój przycisk, który po wciśnięciu uruchamiał TriggerMover, który był teleportem i jednocześnie skrypt, który uruchamiał efekt dźwiękowy i miał zabrać kamień ogniskujący z naszego ekwipunku. No właśnie - miał, ale tego nie robi. Dźwięk pięknie jest odtworzony, wszystko pozostałe działa, ale kamień ogniskujący w ekwipunku zostaje choćbym wcisnął ten przycisk 100 razy. Powiedzcie mi co może nie działać w skrypcie poniżej, że kamień nie znika:

func void LAB_ZABRANIE_KAMIENIA ()
{
Npc_RemoveInvItems (hero ,ItMi_Focus, 1);
Snd_Play ("MFX_TELEKINESIS_STARTINVEST");
};

Jest on umieszczony w folderze Scripts/Content/Story/Events w osobnym pliku .d no i tak jak mówię, dźwięk jest pięknie odtwarzany, ale kamień nie znika. Na podobnej zasadzie był zrobiony skrypt z G2NK, który tak samo zabierał kamień, tylko że różnica polega na tym, że w oryginale zabiera, a w mojej wersji nie chce. Oczywiście przeanalizowałem cały ten skrypt (a konkretniej  jest to EVT_TELEPORTSTATION_FUNC gdyby ktoś chciał zobaczyć), ale tak właściwie są tam tylko funkcje teleportacji po wejściu w oCTriggerScript, czy dodawania +1 do każdego uruchomionego piedestału, czyli coś co mnie akurat potrzebne nie jest.

I jeszcze jeden problem, który tyczy się zupełnie czegoś innego, aczkolwiek w razie niepowodzenia z tego po prostu zrezygnuję.
Duża część osób tu przebywających korzystała nie raz z pakietu LeGO. Jest w nim skrypt dotyczący kolorów NPC w zależności od nastawienia do nas. Pewnie nie jedna osoba zauważyła, że po najechaniu "celownikiem" na takiego kolorowego NPC i najechaniu na jakiś przedmiot bądź skrzynię, jest on/ona koloru NPCta na którego przed chwilą najechaliśmy. Moje pytanie brzmi - co musiałbym napisać, aby to wyeliminować. Ostatnio widziałem tu na forum jakiś skrypt z kolorem skrzyń w zależności od tego czy jest zamknięta, otwarta bądź czy jest otwarta i coś jest w środku. Oczywiście nie ukrywam, że z miłą chęcią bym coś takiego wykorzystał, ale gdyby nie dało rady to mogę z tego zrezygnować, byleby ich kolor nie był zależny od koloru NPC na którego najechaliśmy. No i to samo tyczy się przedmiotów, tyle że w tym wypadku wystarczy zwykły biały kolor.


Trochę dużo i chaotycznie, ale mam nadzieję, że zostanę zrozumiany. W razie czego wyjaśnię konkretniej o co mi chodzi. Z góry dziękuję za wszelką pomoc  :)

EDIT: Zapomniałem dodać, że problem dotyczy Gothic 2 Noc Kruka, aczkolwiek myślę, że ogarniający temat wiedzieli to od razu.
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Cytuj
Witam wszystkich. Przechodząc do sedna sprawy. Zrobiłem sobie zen, w którym umieściłem platformę teleportacyjną, taką jak te w Jarkendarze.
Wszystko fajnie, platforma działa i do niej zastrzeżeń nie mam żadnych.
Problem pojawia się w piedestale, który teleport aktywuje. Z założenia
miał on swój przycisk, który po wciśnięciu uruchamiał TriggerMover,
który był teleportem i jednocześnie skrypt, który uruchamiał efekt
dźwiękowy i miał zabrać kamień ogniskujący z naszego ekwipunku. No
właśnie - miał, ale tego nie robi. Dźwięk pięknie jest odtworzony,
wszystko pozostałe działa, ale kamień ogniskujący w ekwipunku zostaje
choćbym wcisnął ten przycisk 100 razy. Powiedzcie mi co może nie działać
 w skrypcie poniżej, że kamień nie znika:

Kod: [Zaznacz]
func void LAB_ZABRANIE_KAMIENIA ()
{   
   Npc_RemoveInvItems   (hero ,ItMi_Focus, 1);
   Snd_Play ("MFX_TELEKINESIS_STARTINVEST");
};
Jest on umieszczony w folderze Scripts/Content/Story/Events w osobnym pliku
.d no i tak jak mówię, dźwięk jest pięknie odtwarzany, ale kamień nie
znika. Na podobnej zasadzie był zrobiony skrypt z G2NK, który tak samo
zabierał kamień, tylko że różnica polega na tym, że w oryginale zabiera,
 a w mojej wersji nie chce. Oczywiście przeanalizowałem cały ten skrypt
(a konkretniej  jest to EVT_TELEPORTSTATION_FUNC gdyby ktoś chciał
zobaczyć), ale tak właściwie są tam tylko funkcje teleportacji po
wejściu w oCTriggerScript, czy dodawania +1 do każdego uruchomionego
piedestału, czyli coś co mnie akurat potrzebne nie jest.
Instance się zgadza z przedmiotem? Sprawdź.
Cytuj

I jeszcze jeden problem, który tyczy się zupełnie czegoś innego, aczkolwiek w razie niepowodzenia z tego po prostu zrezygnuję.
Duża część osób tu przebywających korzystała nie raz z pakietu LeGO. Jest w
nim skrypt dotyczący kolorów NPC w zależności od nastawienia do nas.
Pewnie nie jedna osoba zauważyła, że po najechaniu "celownikiem" na
takiego kolorowego NPC i najechaniu na jakiś przedmiot bądź skrzynię,
jest on/ona koloru NPCta na którego przed chwilą najechaliśmy. Moje
pytanie brzmi - co musiałbym napisać, aby to wyeliminować. Ostatnio
widziałem tu na forum jakiś skrypt z kolorem skrzyń w zależności od tego
 czy jest zamknięta, otwarta bądź czy jest otwarta i coś jest w środku.
Oczywiście nie ukrywam, że z miłą chęcią bym coś takiego wykorzystał,
ale gdyby nie dało rady to mogę z tego zrezygnować, byleby ich kolor nie
 był zależny od koloru NPC na którego najechaliśmy. No i to samo tyczy
się przedmiotów, tyle że w tym wypadku wystarczy zwykły biały kolor.


Trochę dużo i chaotycznie, ale mam nadzieję, że zostanę zrozumiany. W razie
czego wyjaśnię konkretniej o co mi chodzi. Z góry dziękuję za wszelką
pomoc 
Oczywiście, że da rade. Chcesz gotowca czy mam Ci wytłumaczyć jak napisać?

Gornos

Gornos

Quest Pack Team
posty90
Propsy87
ProfesjaLvl designer
  • Quest Pack Team
Instance oczywiście jest poprawne (sprawdzane kilkakrotnie). Co do skryptu - może być gotowiec, bo nie jest dla mnie problemem przeanalizowanie czegoś takiego, żeby wiedzieć jak działa, tak więc jeśli byś mógł, to z miłą chęcią bym go przyjął :)
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Kolor nastawienia
Cytuj
func void Focusnames() {
    var int col;
    var oCNpc her; her = Hlp_GetNpc(hero);

    if(Hlp_Is_oCNpc(her.focus_vob))
    {
        var c_npc oth; oth = MEM_PtrToInst(her.focus_vob);
        var int att; att = Npc_GetPermAttitude(hero, oth);
        if     (att == ATT_FRIENDLY) { col = Focusnames_Color_Friendly(); }
        else if(att == ATT_NEUTRAL)  { col = Focusnames_Color_Neutral();  }
        else if(att == ATT_ANGRY)    { col = Focusnames_Color_Angry();    }
        else if(att == ATT_HOSTILE)  { col = Focusnames_Color_Hostile();  };
    }
    else if(!Hlp_Is_oCNpc(her.focus_vob))
    {
        col = Focusnames_Color_Neutral();
    };
   
    var int ptr; ptr = MEM_Alloc(4);
    MEM_WriteInt(ptr, col);
    CALL_IntParam(ptr);
    CALL__thiscall(MEM_ReadInt(screen_offset), zCView__SetFontColor);
    MEM_Free(ptr);
}
A co do przedmiotu to zaraz zedyuję posta

Gornos

Gornos

Quest Pack Team
posty90
Propsy87
ProfesjaLvl designer
  • Quest Pack Team
Skrypt działa rewelacyjnie, bardzo dziękuję. Są dwa maluśkie błędy w nim, ale nie jest to nie do zauważenia. Co do usuwanego przedmiotu z ekwipunku, to dalej czekam na jakąś pomoc czy jakąkolwiek podpowiedź.

Dobra, to jeszcze przypomniał mi się jeden mały problemik. Niby nic, ale jednak bardzo denerwuje. Zrobiłem sobie własne teleporty w swoim świecie i działają pięknie, przenoszą jak powinny, ale jest mały problem. W świecie, w którym one działają jest napis po użyciu "Za daleko" mimo że teleportuje do waypointu. Skrypt samej teleportacji wygląda tak:

// ------ Główny Portal------
func int Spell_Logic_TeleportToMainPortal (var int manaInvested)
{
   if (Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
   {
      return SPL_SENDCAST;
   }
   else if (self.attribute[ATR_MANA] >= SPL_Cost_StoneTeleport)
   {
      return SPL_SENDCAST;
   };
   
   return SPL_NEXTLEVEL;
};
func void Spell_Cast_TeleportToMainPortal()
{
   B_PrintTeleportTooFarAway (LABIRYNT_ZEN);
   
   if (Npc_GetActiveSpellIsScroll(self))
   {
      self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Scroll;
   }
   else
   {
      self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_StoneTeleport;
   };
   AI_Teleport      (self, "WAYPOINT_LABIRYNT");
   AI_PlayAni      (self, "T_HEASHOOT_2_STAND" );
};

(jest to oczywiście jeden z kilku teleportów, ale reszta nie jest potrzebna, bo jest praktycznie taka sama tylko waypoint się różni i funkcja Spell_Logic)

Zdefiniowałem także LABIRYNT_ZEN w pliku Constants.d ale to wciąż za mało i dalej wywala "Za daleko". Czy poza tym plikiem powinienem zdefiniować LABIRYNT_ZEN gdzieś jeszcze?
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Do startup.d w
func void Startup_Labirynt()
dodaj to
CurrentLevel = LABIRYNT_ZEN;

Gornos

Gornos

Quest Pack Team
posty90
Propsy87
ProfesjaLvl designer
  • Quest Pack Team
Wielkie dzięki. To teraz jedyne co mi pozostało to ten nieszczęsny przedmiot z ekwipunku :\
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Wątpię czy to pomoże:
Cytuj
func void LAB_ZABRANIE_KAMIENIA ()
{   
         var C_NPC her; her = Hlp_GetNpc(PC_Hero);
   Npc_RemoveInvItem   (her ,ItMi_Focus);
   Snd_Play ("MFX_TELEKINESIS_STARTINVEST");
};

Gornos

Gornos

Quest Pack Team
posty90
Propsy87
ProfesjaLvl designer
  • Quest Pack Team
Niestety nie pomogło.
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Pokaz triggery zwiazane z tym skryptem

Gornos

Gornos

Quest Pack Team
posty90
Propsy87
ProfesjaLvl designer
  • Quest Pack Team
Przepraszam, że dopiero teraz, ale nie zauważyłem, że była umieszczona odpowiedź.

Spoiler
Trigger Script



Przycisk wywołujący


Raczej wątpię, że to wina triggerów, ponieważ tak jak wspomniałem, dźwięk się uruchamia, tylko kamień nie zostaje zabrany z ekwipunku.
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Samo useWithItem:ITMI_FOCUS powinno wystarczyć. Wtedy i tak zabierze nam rzecz, skryptowo nie trzeba usuwać tego przedmiotu.

Gornos

Gornos

Quest Pack Team
posty90
Propsy87
ProfesjaLvl designer
  • Quest Pack Team
Niestety tu muszę cię zmartwić, ale nie. useWithItem służy tylko do tego by jakiegokolwiek moba można było użyć za pomocą wyznaczonego przedmiotu. Wtedy bezi mówi coś ala "Nie mam odpowiedniego przedmiotu aby tego użyć", lub jeśli posiadasz item to moba używasz, ale przedmiot zostaje w ekwipunku.
 

RiPPerMAN

RiPPerMAN

Użytkownicy
FapTeam Studios
posty222
Propsy25
ProfesjaScenarzysta
  • Użytkownicy
  • FapTeam Studios
Spróbuj z tym, że zamiast znikania Kamienia, oddajesz go jakiemuś npc :Ok:
 
"Nie żałuj umarłych, żałuj żywych, a szczególnie tych, którzy żyją bez miłości"
~ Albus Parcival Wulfryk Brian Dumbledore

Atak Dzieci NEO
http://themodders.org/index.php?topic=21709.0

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
ja widze jeszcze jedno rozwiązanie, przy on state moba (przycisku) daj funkcję w skryptach np. portal_s1, która będzie usuwać przedmiot. działa na 100%.
 

Gornos

Gornos

Quest Pack Team
posty90
Propsy87
ProfesjaLvl designer
  • Quest Pack Team
Poradziłem sobie z problemem. Okazał się prostszy niż można się było tego spodziewać  :facepalm:  :lol2: Na początku napisałem sobie monolog, który zabierał kamień. Ale i on miał problemy z działaniem, gdyż trzeba było mieć w eq 2 kamienie ogniskujące żeby zabrał chociaż jeden, mimo iż w if'ie było podane że wystarczy mieć jeden. Ale naprowadziło mnie to na błąd, który okazał się jednak w samym oCMobInterSwitch. Chodzi konkretnie o funkcję useWithItem - nie może być w nim wpisany instance przedmiotu, który ma być zabrany (jeśli w ekwipunku znajduje się tylko jeden jego egzemplarz). Nie wiem czemu tak jest, najwidoczniej Gothic myśli inaczej niż można się tego w ogóle spodziewać. W każdym bądź razie dziękuję za waszą wszelką pomoc. Bez niej nie dałbym sobie rady, no i mam nadzieję, że ten temat pomoże innym osobom. Do zamknięcia.
 


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