Problem z Hlp_StrCmp i nameID 4603 17

O temacie

Autor FOgidel

Zaczęty 5.06.2016 roku

Wyświetleń 4603

Odpowiedzi 17

FOgidel

FOgidel

Użytkownicy
posty60
Propsy100
ProfesjaSkrypter
  • Użytkownicy

FOgidel

Problem z Hlp_StrCmp i nameID
2016-06-05, 23:44(Ostatnia zmiana: 2016-06-06, 00:24)
Hej
Więc mam taki problem, że taka oto funkcja mi nie działa:
func int Get_nameID_READIED()
{
var c_item Get_NameID;
Get_NameID = Npc_GetReadiedWeapon(other);
if(Hlp_StrCmp(Get_NameID.nameID, "1")) {return 1;}
else if(Hlp_StrCmp(Get_NameID.nameID, "2")) {return 2;}
else if(Hlp_StrCmp(Get_NameID.nameID, "3")) {return 3;}
else if(Hlp_StrCmp(Get_NameID.nameID, "4")) {return 4;}
else if(Hlp_StrCmp(Get_NameID.nameID, "5")) {return 5;}
else if(Hlp_StrCmp(Get_NameID.nameID, "6")) {return 6;}
else if(Hlp_StrCmp(Get_NameID.nameID, "7")) {return 7;}
else if(Hlp_StrCmp(Get_NameID.nameID, "8")) {return 8;}
else if(Hlp_StrCmp(Get_NameID.nameID, "9")) {return 9;}
else if(Hlp_StrCmp(Get_NameID.nameID, "10")) {return 10;}
else if(Hlp_StrCmp(Get_NameID.nameID, "11")) {return 11;}
else if(Hlp_StrCmp(Get_NameID.nameID, "12")) {return 12;}
else if(Hlp_StrCmp(Get_NameID.nameID, "13")) {return 13;}
else if(Hlp_StrCmp(Get_NameID.nameID, "14")) {return 14;}
else if(Hlp_StrCmp(Get_NameID.nameID, "15")) {return 15;}
else if(Hlp_StrCmp(Get_NameID.nameID, "16")) {return 16;}
else if(Hlp_StrCmp(Get_NameID.nameID, "17")) {return 17;}
else if(Hlp_StrCmp(Get_NameID.nameID, "18")) {return 18;}
else if(Hlp_StrCmp(Get_NameID.nameID, "19")) {return 19;}
else if(Hlp_StrCmp(Get_NameID.nameID, "20")) {return 20;}
else if(Hlp_StrCmp(Get_NameID.nameID, "21")) {return 21;}
else if(Hlp_StrCmp(Get_NameID.nameID, "22")) {return 22;}
else if(Hlp_StrCmp(Get_NameID.nameID, "23")) {return 23;}
else if(Hlp_StrCmp(Get_NameID.nameID, "24")) {return 24;}
else if(Hlp_StrCmp(Get_NameID.nameID, "25")) {return 25;}
else if(Hlp_StrCmp(Get_NameID.nameID, "26")) {return 26;}
else if(Hlp_StrCmp(Get_NameID.nameID, "27")) {return 27;}
else if(Hlp_StrCmp(Get_NameID.nameID, "28")) {return 28;}
else if(Hlp_StrCmp(Get_NameID.nameID, "29")) {return 29;}
else if(Hlp_StrCmp(Get_NameID.nameID, "30")) {return 30;}
else if(Hlp_StrCmp(Get_NameID.nameID, "31")) {return 31;}
else if(Hlp_StrCmp(Get_NameID.nameID, "32")) {return 32;}
else if(Hlp_StrCmp(Get_NameID.nameID, "33")) {return 33;}
else if(Hlp_StrCmp(Get_NameID.nameID, "34")) {return 34;}
else if(Hlp_StrCmp(Get_NameID.nameID, "35")) {return 35;}
else if(Hlp_StrCmp(Get_NameID.nameID, "36")) {return 36;}
else if(Hlp_StrCmp(Get_NameID.nameID, "37")) {return 37;}
else if(Hlp_StrCmp(Get_NameID.nameID, "38")) {return 38;}
else if(Hlp_StrCmp(Get_NameID.nameID, "39")) {return 39;}
else if(Hlp_StrCmp(Get_NameID.nameID, "40")) {return 40;}

else {return 0;};
};

Miało to po prostu zwracać nameID w postaci inta. W zakresie 1-40.

Problem leży w tym, że zawsze zwraca 0.

Próbowałem też to zrobić poza funkcją (zamiast return, zmienna =), ale też nie działa.

I mam 100% pewność, że problem jest w tym, że zwraca 0.

Edit: Zwykły Gothic, jakby co
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
A masz broń wyciągniętą (tzn. w ręce, gotowy do walki)?
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

FOgidel

FOgidel

Użytkownicy
posty60
Propsy100
ProfesjaSkrypter
  • Użytkownicy
No tak, to jest przy obrażeniach (takie jakby miecze runiczne)
I gdy była tylko jedna taka zmienna o dłuższej nazwie, to działało (w sensie coś w stylu mieczy srebrnych i stalowych)

EDIT:
A gdy próbowałem taki sam efekt np. zmienną weight, albo nutrition (też nieużywana, chyba do mikstur miała być) to też zwracało 0
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
func int Get_nameID_READIED(var c_npc oth)
{
var c_item Get_NameID;
Get_NameID = Npc_GetReadiedWeapon(oth);
...

Spróbuj tak. other zapewne było puste.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

FOgidel

FOgidel

Użytkownicy
posty60
Propsy100
ProfesjaSkrypter
  • Użytkownicy
No, to miało dawać efekty przy obrażeniach, więc other musi być. Poza tym i tak wtedy zrobiłbym to jako Get_nameID_READIED(other), więc wychodziło na to samo. A gdy używałem identycznej funkcji, ale takiej do dialogów i zmieniałem po prostu Readied na EquippedMelee, other na self, to też zwracało zero.

EDIT
Sprawdziłem, nie działa.
 

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
O jaki efekt ci chodzi.bo ważne jest gdzie to wywołujesz
 

FOgidel

FOgidel

Użytkownicy
posty60
Propsy100
ProfesjaSkrypter
  • Użytkownicy
Dodatkowe efekty przy trafieniu, zależne od broni. Dla jednej takiej broni (to był miecz runiczny) działało.
W G2NK to dodałoby się tylko do B_AssessDamage i B_MM_AssessDamage, ale tu zrobiłem to jak w jakimś poradniku co tu był i ten jeden miecz działał.
Czyli dodałem funkcję, która się wywołuje w odpowiednich momentach, a w niej zrobiłem, żeby mi zwracało inta, zależnie od nameID i zawsze zwraca 0.
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Tak jak mówiłem, other wynosi 0. Instancja jest niewypełniona, przez co nie ma takiego npc i zwraca 0.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

FOgidel

FOgidel

Użytkownicy
posty60
Propsy100
ProfesjaSkrypter
  • Użytkownicy
Ta funkcja wywołuje się tylko w innych funkcjach, w których jest już używane other i self
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
To w takim razie dlaczego zwraca 0?

1) Other nie jest wypełnione.
2) Nie masz wyciągniętej broni w ręce.
3) NameID wynosi 0, zawsze.
4) Wywołujesz funkcję dopiero po zakończeniu innej funkcji (zaraz po return).
5) Nie ma innej opcji.
6) Patrz na wszystkie punkty od początku do końca po kolei.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

FOgidel

FOgidel

Użytkownicy
posty60
Propsy100
ProfesjaSkrypter
  • Użytkownicy
No działa, myślałem, że jeśli funkcja jest używana wewnątrz funkcji, w której występuje other/self, to można użyć other/self.
Ale jest drugi problem:
Nie działa mi wersja z Equiped. Skrypt funkcji jest identyczny jak podany + Twoje rady (dzięki którym tamten działa), ale zamiast
Get_NameID = Npc_GetReadiedWeapon(oth);jest
Get_NameID =Npc_GetEquippedMeleeWeapon(slf);I używam jej tak:
Zmienna = GetRSINDEXEQUIPED (self);Robię to bezpośrednio w plikach dialogów, więc powinno działać, a też zwraca 0.

EDIT:
Zmienną mam zadeklarowaną osobno (poza funkcjami). Robię stałą (w funkcji dialogu) równą zmiennej i używam jej jako indeksu tablicy i zawsze jest zerowy element.


 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Nie wiem czy jest ta funkcja w G1, ale spróbuj

FUNC INT  Npc_HasEquippedWeapon (VAR C_NPC self) { return 0; };
// gibt eins zurück, wenn die abgefragte Instanz (self oder other) eine Waffe sichtbar mit sich rumträgt

Używasz tak samo, tylko dodajesz do zmiennej int.


EDIT: Nie. Jednak nie. Ty chcesz pobierać statystyki broni.

Poślij kawałek dialogu, gdzie masz to zapisane.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

FOgidel

FOgidel

Użytkownicy
posty60
Propsy100
ProfesjaSkrypter
  • Użytkownicy
Dobra, to jest skrypt funkcji:
func int Get_nameID_EQUIPED (var c_npc slf)
{
var c_item Get_NameID;
Get_NameID = Npc_GetEquippedMeleeWeapon(slf);
if(Hlp_StrCmp(Get_NameID.nameID, "1")) {return 1;}
else if(Hlp_StrCmp(Get_NameID.nameID, "2")) {return 2;}
...............
else if(Hlp_StrCmp(Get_NameID.nameID, "40")) {return 40;}

else {return 0;};
};

A to w dialogu:
var int MonologIndeksHelper;
FUNC INT PC_MonologJakiś_Condition()
{
MonologIndeksHelper = Get_nameID_EQUIPED (self);
const int MonologIndeks = MonologIndeksHelper;
if (MONOLOG == TenMONOLOG)&&(MonologIndeks>0)&&(JednaTablica[MonologIndeks] < DrugaTablica[MonologIndeks])
{
return 1;
};
};
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Dodajesz zmienną do stałej. Nie dziwię się.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

FOgidel

FOgidel

Użytkownicy
posty60
Propsy100
ProfesjaSkrypter
  • Użytkownicy
Czyli nie ma szans na to? Wydawało mi się, że gdzie indziej działało. No cóż, dzięki. A czy jest jakikolwiek sposób, żeby użyć zmiennej jako indeksu?
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Ale po co Ci takie coś?
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

FOgidel

FOgidel

Użytkownicy
posty60
Propsy100
ProfesjaSkrypter
  • Użytkownicy
Żeby zależnie od zmiennej wybrało inny indeks.
Np. właśnie po to, co chce zrobić
 

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
This is a common misconception, because Daedalus is... weird. It only allows constants as indices for arrays, which seemingly can be circumenvented by assigning a new value to the constant. However, that doesn't work at all, because the index is written into the compiled .dat statically, i.e. these two are equal:

const int CONSTANT = 1;
array[CONSTANT] = 5;

...

array[1] = 5;
They are not only similar, but exactly equal!

To use dynamic indices (e.g. vars), you have to use Ikarus:

MEM_WriteStatArr(array, index, value);
MEM_ReadStatArr(array, index);
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.


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