nazwa itema do wyśiwetlania podczas używania b_giveinvitems 1601 10

O temacie

Autor pawbuj

Zaczęty 14.02.2014 roku

Wyświetleń 1601

Odpowiedzi 10

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
fragment skryptu, który odwołuje się do konkretnej instancji (rudy). pytanie jak zrobić, aby odwoływał się do instancji, która aktualnie podlega "przekazaniu:?

if (itemInstance == ItMiNugget)
{
concatText = ConcatStrings(IntToString(amount), _STR_MESSAGE_ORE_GIVEN);
PrintScreen (concatText, 3,_YPOS_MESSAGE_GIVEN,"FONT_OLD_10_WHITE.TGA",_TIME_MESSAGE_GIVEN);
}

 


pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
dobra, jeszcze raz grzecznie i od początku.
mamy funkcje b_giveinv items w g1. chcę, aby podczas "przechodzenia" itemu z npc1 do npc2 była wyświetlana jego nazwa.
Dodam,że wołałbym się nie odwoływać do każdego dostepnego w grze iteminstance (dla rudy jest to zrobione).

fragment, który edytuje i mi nie działa:
if (amount == 1)
   //&& (Hlp_IsValidItem(item))
    {
    itemInstance = Hlp_GetInstanceID(item);
    itemname = item.name; //wird von CreateInvItems gesetzt --> Nico
msg0 = ConcatStrings (taker.name," odebrał: ");
msg1 = ConcatStrings (msg0 ,item.name);
        //msg = ConcatStrings(IntToString(amount),_STR_MESSAGE_ITEMS_GIVEN);
    PrintScreen (msg1, 1,91,"FONT_OLD_10_WHITE.TGA",_TIME_MESSAGE_GIVEN);
}   
[code]

cały skrypt: [code]
// *****************************************************************
// B_GiveInvItems
// --------------
// wenn das Geben geklappt hat --> TRUE
// wenn nicht (Spieler hat nicht genug oder gar kein Item) --> FALSE
// *****************************************************************

func int B_GiveInvItems (var C_NPC giver, var C_NPC taker, var int itemInstance, var int amount)
{
// EXIT IF...

if (Npc_IsPlayer(giver))
{
if (amount > Npc_HasItems(giver,itemInstance))
{
return FALSE;
};
};

if (amount == 0)
{
return TRUE;
};


//FUNC

// ------ Itmes transferieren ------
Npc_RemoveInvItems (giver, itemInstance, amount);
CreateInvItems (taker, itemInstance, amount);

// ------ PrintScreen ------
var string concatText;
var string itemname;

itemname = item.name; //wird von CreateInvItems gesetzt --> Nico

if Npc_IsPlayer(giver) && (hero.attribute[ATR_HITPOINTS] > 1)
{
if (itemInstance == ItMiNugget)
{
concatText = ConcatStrings(IntToString(amount), _STR_MESSAGE_ORE_GIVEN);
PrintScreen (concatText, 3,_YPOS_MESSAGE_GIVEN,"FONT_OLD_10_WHITE.TGA",_TIME_MESSAGE_GIVEN);
}
else
{
    if amount == 1
    {
    concatText = ConcatStrings (itemname,"przekazał");
    PrintScreen (concatText, -1,_YPOS_MESSAGE_GIVEN, "FONT_OLD_10_WHITE.TGA", _TIME_MESSAGE_GIVEN);
}   
else
    {
concatText = ConcatStrings(giver.name, " oddał Ci ");
    concatText = ConcatStrings(IntToString(amount)); // "x Gegenstände gegeben"
concatText = ConcatStrings(concatText,itemname);
    concatText = ConcatStrings(concatText,"bryłek rudy");
PrintScreen (concatText, -1, _YPOS_MESSAGE_GIVEN, "FONT_OLD_10_WHITE.TGA", 2);
};   
};
}
else if Npc_IsPlayer(taker)
{
if (itemInstance == ItMiNugget)
{
concatText = ConcatStrings(IntToString(amount), "przekazał"); // "x Gold erhalten"
PrintScreen (concatText, -1, _YPOS_MESSAGE_GIVEN, "FONT_OLD_10_WHITE.TGA", 2);
}
else
{
    if amount == 1
    {

concatText = ConcatStrings (itemname,"przekazał");

PrintScreen (concatText, -1, _YPOS_MESSAGE_GIVEN, "FONT_OLD_10_WHITE.TGA", 2); // "1 Gegenstand erhalten"
}   
else
    {
    //itemInstance = Hlp_GetInstanceID(item);
    concatText = ConcatStrings(IntToString(amount),"przekazał"); // "x Gegenstände erhalten"
    concatText = ConcatStrings(concatText," (");
    concatText = ConcatStrings(concatText,itemname);
    concatText = ConcatStrings(concatText,")");
   
    PrintScreen (concatText, -1, _YPOS_MESSAGE_GIVEN, "FONT_OLD_10_WHITE.TGA", 2);
};
};
}; [code]

Post połączony: 2014-02-15, 11:17
w dużym skrócie chcę , aby  zmienna itemInstance odnosiła się do nazwy danego itema.
 


pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
przykro mi , ale niestety nie.

dodam, że skrypt jest z g2nk.ja moduję g1 - generalnie externale są raczej takie same.

mi chodzi głównie o to jak powiązać zmienną itemInstance z konkretna nazwą danego itemu.

zmienna "itemInstance" wyswietla mi się  jako ciąg czterech cyfr, ale nie otaki efekt mi chodzi.
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
itemInstance jest int`em więc musisz go rzutować na typ C_ITEM Nie wiem czy tak zadziała ale spróbuj.

var C_ITEM przedmiot;
przedmiot =  itemInstance;
potem używasz
przedmiot.name
jak nie zadziała to chyba pozostaje ikarus bo G1 z tego co pamiętam nie za za dużo funkcji zwracających C_ITEM

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
Nie potrzeba funkcji zwracających c_item, bo zamiast tego jest globalna zmienna "item", która działa analogicznie jak "self" z klasą c_npc. Z tym że użycie jej polegałoby po prostu na odczytaniu item.name, a to właśnie powinna zawierać używana w skrypcie zmienna lokalna itemname. Pawbuj, napisz konkretnie co masz na myśli przez to że ona "nie działa". Jest pusta? Zawiera dane innego itemu? Kod nie kompiluje się kiedy próbujesz jej użyć? Gra nagle crashuje jeśli jej użyłeś?

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Av, pole jest puste. sprawdzałem, czy czegoś nie chrzanię i np.itemInsatnce wyświetla się jako czterocyfrowy ciąg .


jeszcze w externalach taka funkcję znalazłem, ale wywala mi, że NIE zwraca instance. FUNC C_Item Npc_GetInvItem            (VAR C_NPC self, VAR INT itemInstance)    {};
// Ermittle ItemInstanz aus Inventory
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Nie potrzeba funkcji zwracających c_item, bo zamiast tego jest globalna zmienna "item", która działa analogicznie jak "self" z klasą c_npc.
Właśnie patrzyłem na skrypty CZ i zastanawiałem się, gdzie jest zadeklarowana zmienna item :D

Pole name może być puste, i jeśli jest to przypisz np. description, po prostu sprawdź to:
Cytuj
name = item.name; if(Hlp_StrCmp(name,"")){name = item.description;};

Możesz jeszcze dodać wyświetlenie komunikatu, że coś tam jest puste.

pawbuj, deklarowałeś gdzieś zmienną item?


pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
wystarczyło, że dodałem nast. linijkę i działa! dzięki Adanos. msg1 = ConcatStrings (msg0 ,Item.DESCRIPTION);
 


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