przenoszenie ekwipunku z dodanym wyjątkiem 2186 5

O temacie

Autor pawbuj

Zaczęty 31.12.2016 roku

Wyświetleń 2186

Odpowiedzi 5

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
z racji, że przybyło mądrych głów na forum może ktoś pomoże z tematem.

mamy skrypt usuwania/przenoszenia ekwipunku postaci . problem , w tym, że chcę , aby czyścić z wyjątkiem założonego pancerza.

dotychczas obeszłem to przez tworzenie i nakładanie pancerza w oddzielnej funkcji, ale jest to prymitywne rozwiązanie.

skrypt autorstwa bodajże Avallacha poniżej :func void Npc_ClearInventoryLoop (var c_npc npc, var int category)
{
    //PrintScreen (ConcatStrings("Czyszczenie eq: ", npc.name), yposition,yaposition,"FONT_OLD_10_WHITE.TGA",timep); //dla testu
// print(ConcatStrings("Czyszczenie eq: ", npc.name);
        var int amount;
        amount = Npc_GetInvItemBySlot (npc, category, 0);
       // print(ConcatStrings(item.name, IntToString(amount));
        if (amount>0)
        {
                NPC_RemoveInvItems (npc, Hlp_GetInstanceID (item), amount);
               
                Npc_ClearInventoryLoop(npc, category);
        }
        else if (category < INV_CAT_MAX-1)
        {
                //print(ConcatStrings("Zmiana kategorii na: ", IntToString(category+1));
                Npc_ClearInventoryLoop(npc, category+1);
        };
};


func void Npc_ClearInventory (var c_npc npc)
{

Npc_ClearInventoryLoop(npc, 0);
};

func void Npc_MoveInventoryLoop (var c_npc npc, var int category)
{
    PrintScreen (ConcatStrings("Przenoszenie eq: ", npc.name), yposition,yaposition,"FONT_OLD_10_WHITE.TGA",timep); //dla testu
// print(ConcatStrings("Czyszczenie eq: ", npc.name);
        var int amount;
        amount = Npc_GetInvItemBySlot (npc, category, 0);
       // print(ConcatStrings(item.name, IntToString(amount));
        if (amount>0)
        {
              Mob_CreateItems ("CHEST", Hlp_GetInstanceID (item), amount) ;
              Mob_CreateItems ( "OC_CHEST_LARGE2", Hlp_GetInstanceID (item), amount) ;
             
        NPC_RemoveInvItems (npc, Hlp_GetInstanceID (item), amount);
               
                Npc_MoveInventoryLoop(npc, category);
        }
        else if (category < INV_CAT_MAX-1)
        {
                //print(ConcatStrings("Zmiana kategorii na: ", IntToString(category+1));
                Npc_MoveInventoryLoop(npc, category+1);
        };
};
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Nie możesz po prostu przed wywołaniem funkcji pobrać instancje założonego pancerza i sprawdzać, czy bieżący przedmiot, który chcesz przenieść nie jest tym założonym przedmiotem?

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Nie możesz po prostu przed wywołaniem funkcji pobrać instancje założonego pancerza i sprawdzać, czy bieżący przedmiot, który chcesz przenieść nie jest tym założonym przedmiotem?

rzeczywiście byłoby to naprostsze rozwiązanie, nie wiem czy po wyczyszczeniu ekwipunku czy gothic ciągle będzie pamiętał

armor = Npc_GetEquippedArmor(npc);

dodałem taki warunek
 if (amount>0)&& (item != armor)



Post połączony: 2016-12-31, 12:06
var c_Item armor;
func void Npc_ClearInventoryLoop (var c_npc npc, var int category)
{
    //PrintScreen (ConcatStrings("Czyszczenie eq: ", npc.name), yposition,yaposition,"FONT_OLD_10_WHITE.TGA",timep); //dla testu
// print(ConcatStrings("Czyszczenie eq: ", npc.name);
        var int amount;
        amount = Npc_GetInvItemBySlot (npc, category, 0);
        armor = Npc_GetEquippedArmor(npc);
       // print(ConcatStrings(item.name, IntToString(amount));
        if (amount>0)&& (item != armor)
        {
                NPC_RemoveInvItems (npc, Hlp_GetInstanceID (item), amount);
               
                Npc_ClearInventoryLoop(npc, category);
        }
        else if (category < INV_CAT_MAX-1)
        {
                //print(ConcatStrings("Zmiana kategorii na: ", IntToString(category+1));
                Npc_ClearInventoryLoop(npc, category+1);
        };
};

Post połączony: 2016-12-31, 13:31
Niestety nie działa mimo logiki
 

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
I'm surprised Daedalus lets you compare instances. I assume they decay to their ID and thus they will never be equal. Try this:

if (Hlp_GetInstanceID(item) == Hlp_GetInstanceID(armor)) { ... }
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
I'm surprised Daedalus lets you compare instances. I assume they decay to their ID and thus they will never be equal. Try this:

if (Hlp_GetInstanceID(item) == Hlp_GetInstanceID(armor)) { ... }

this works perfectly.
 

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Robię coś podobnego i nie bardzo wiem gdzie wstawić ten warunek od Lehona.

var c_Item armor_odzyskanie;

func void Npc_MoveInventoryLoop (var c_npc PC_Hero, var int category)
{
   
        var int amount;
        amount = Npc_GetInvItemBySlot (PC_Hero, category, 0);
armor_odzyskanie  = Npc_GetEquippedArmor(PC_Hero);
        if ((Hlp_GetInstanceID(item) == Hlp_GetInstanceID(armor_odzyskanie)) && (amount>0))
        {
              Mob_CreateItems ("CHEST_MYITEMS", Hlp_GetInstanceID (item), amount) ;
 
        NPC_RemoveInvItems (PC_Hero, Hlp_GetInstanceID (item), amount);
               
                Npc_MoveInventoryLoop(PC_Hero, category);
        }
        else if (category < INV_CAT_MAX-1)
        {
 
                Npc_MoveInventoryLoop(PC_Hero, category+1);
        };

};


Ktoś pomoże?
 


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