Zmiana parametrów przedmiotu w trakcie gry 505 21

O temacie

Autor BlackSwordsman

Zaczęty 1.01.2017 roku

Wyświetleń 505

Odpowiedzi 21

BlackSwordsman

BlackSwordsman

Użytkownicy
posty22
Propsy2
Profesjabrak
  • Użytkownicy

Mam problem mianowicie chciałem zastosować w swoim modzie zmienny kosztu mana przy runach/zwojach, ale nie działa tak jak trzeba. Chodzi o to że jeżeli chodzi o realny koszt to wszystko jest ok(podczas rzucania czaru), ale nie wyświetlają się prawidłowa wartość w eq. Działa tak że wyświetla się wartość z początku gry, bez uwzględnienia zmiennej.
INSTANCE ItArScrollLight (C_Item)
{
name = NAME_Spruchrolle;

mainflag = ITEM_KAT_RUNE;
flags = ITEM_MULTI;

value = 5;

visual = "ItAr_Scroll_32.3DS";
material = MAT_STONE;

spell_parm ();

spell = SPL_LIGHT;
cond_atr[2]    = ATR_MANA_MAX;
cond_value[2]  = SPL_SENDCAST_LIGHT;

description = "Światło";
//TEXT [0] = NAME_Mag_Circle; COUNT [0] = mag_circle;
TEXT [1] = NAME_Manakosten; COUNT [1] = SPL_SENDCAST_LIGHT;
//TEXT [2] = ""; COUNT [2] = ;
//TEXT [3] = ""; COUNT [3] = ;
//TEXT [4] = ""; COUNT [4] = ;
TEXT [5] = NAME_Value; COUNT [5] = value;
};
func void spell_parm ()
{
SPL_SENDCAST_LIGHT=10*100/((Npc_GetTalentValue(hero, NPC_TALENT_MAGE)/2)+100);

};

Mam nadzeje że rozumie cie o co chodzi?
I pytanie brzmi czy jest jakiś sposób by zmieniać parametry przedmiotu w trakcie gry?
Podkreślam, technicznie wszystko działa ok chodzi tylko o wartość w eq.
 

Mark56

Mark56

Moderator
som veľký magič
posty1598
Propsy1740
ProfesjaAnimator
  • Moderator
  • som veľký magič
ikarusem, albo tradycyjnie, dodaj on_equip i on_unequip, który zrobi przeliczenie tej wartości .
spell_parm ();
COUNT [1] = SPL_SENDCAST_LIGHT;

Wiesz ze twój zmienny koszt many jest prawdopodobnie taki sam dla wszystkich npc ?
 


BlackSwordsman

BlackSwordsman

Użytkownicy
posty22
Propsy2
Profesjabrak
  • Użytkownicy
Nie działa niestety przy on_equip/on_unequip. Jeżeli chodzi o npc to wiem na pewno, że koszt będzie zmienny także dla nich, ale to nie będzie problemem. Wiesz może w jaki sposób to zrobić za pomocą ikarusa? Ogarniasz go?

Może wystarczy wrzucić spell_parm (); do funkcji gdzie otwiera się eq? Tylko która to?
 

BlackSwordsman

BlackSwordsman

Użytkownicy
posty22
Propsy2
Profesjabrak
  • Użytkownicy
Ma jakaś mądra głowa pomysł na to? Jak to zrobić? Może wystarczy tylko w odpowiednie miejsce wrzucić spell_parm ();!
 

Siemekk

Siemekk

Złote Wrota
Szlachcic
posty1820
Propsy632
ProfesjaSkrypter
  • Złote Wrota
  • Szlachcic
Zmień stałe które określają koszt many na zmienne. Jeśli jesteś bystry to z resztą sobie poradzisz sam ;)
 

BlackSwordsman

BlackSwordsman

Użytkownicy
posty22
Propsy2
Profesjabrak
  • Użytkownicy
Jeżeli jesteś bystry to zauważyłeś że już to zrobiłem i przy rzucaniu czarów działa jak trzeba. Problem jest tylko z wyświetlaniem tej zmiennej przy parametrach przedmiotu. Wyświetla pierwszą zmienną wrzuconą do
Cytuj
STARTUP_WORLD ()
i się nie zmienia. Już wiesz o co chodzi mistrzu? Na tym polega mój problem.
 

K4R0L111

K4R0L111

Użytkownicy
posty36
Propsy13
ProfesjaSkrypter
  • Zbanowany
No to musisz zrobić coś takiego.
var C_Item przedmiot; //Tworzysz zmienną
przedmiot = xxx; //Tu musisz przypisać przedmiot do zmiennej
przedmiot.text[2] = 10; //Tu ustawiasz wyświetlaną wartość. :)

Co do tej funkcji to znalazłem taką ale ona CHYBA zwraca instance czaru a nie przedmiotu.
func int      Npc_GetActiveSpell                 (var instance n0)                               

Poszukaj w externals.d to może znajdziesz funkcję która zwraca instance przedmiotu.
Jeśli nie to wystarczy kilka if'ów i da radę zrobić.

BlackSwordsman

BlackSwordsman

Użytkownicy
posty22
Propsy2
Profesjabrak
  • Użytkownicy
Wiem o co chodzi, ale przy:
var C_Item slight;

slight = Hlp_IsItem (item, ItArScrollLight);
slight.text[2] = MANACOST_LIGHT;
wyskakuje błąd i wywala do pulpitu.
 

K4R0L111

K4R0L111

Użytkownicy
posty36
Propsy13
ProfesjaSkrypter
  • Zbanowany
slight.text[2] to string a ty przypisujesz zmienną która jest int'em.
Użyj slight.count[2] :)

Ja wyżej podałem tylko przykład :)

Splash

Splash

Gry (themodders@telegram)
And i said...
posty3606
Propsy2672
ProfesjaNierób
  • Gry (themodders@telegram)
  • online
  • And i said...
A funkcja Hlp_IsItem zwraca 1 lub 0 w zależności od podanej instancji.
 
Nie, nie pomogę ci z GMP.

BlackSwordsman

BlackSwordsman

Użytkownicy
posty22
Propsy2
Profesjabrak
  • Użytkownicy
To której funkcji użyć? Nie da rady aktywnego czaru bo wtedy zmieni się tylko jeden czar i to tylko jak będzie aktywny, a ja potrzebuje żeby w jednej chwili zmieniać parametry wszystkich run/zwojów nawet tych nieużywanych. Nawet takich których nie ma jeszcze w eq. Chce żeby wszystko aktualizowało się razem ze zmienną.


Może lepiej wrzucić gdzieś spell_parm (); na przykład do funkcji gdzie się otwiera eq tabem?
Jak coś mam ikarusa i lego.
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1752
Propsy480
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Przedmiot w ekwipunku i więcej niż 1 przedmiot:
Npc_GetInvItem(hero, ItemInstance);
item.text[Number] = "twój tekst";
item.count[number] = Variable;


Opcja druga: Przedmiot jeden na całą grę:
var C_Item itm; itm = Hlp_GetInstanceID(itemInstance);//w sumie, nawet bez tego da radę
itm.text[Number] = "twój tekst";
item.count[Number] = Variable;

Fakt. Splash ma rację. Opcja nr. 1 albo nr. 2 bez Hlp_GetInstanceID.
 
: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.

Splash

Splash

Gry (themodders@telegram)
And i said...
posty3606
Propsy2672
ProfesjaNierób
  • Gry (themodders@telegram)
  • online
  • And i said...
Opcja druga jest zła, bo funkcja Hłp_GetInstanceID zwraca instancję w formie inta.
 
Nie, nie pomogę ci z GMP.

Siemekk

Siemekk

Złote Wrota
Szlachcic
posty1820
Propsy632
ProfesjaSkrypter
  • Złote Wrota
  • Szlachcic
Jeżeli znasz się na Ikarusie to można to zrobić w np. taki sposób:
//v1
var c_item it; it = _^(_@(itru_massdeath)); //Nie jestem pewny, nigdy czegoś takiego nie używałem
it.count[1] = 12;
//v2
var int ptr; ptr = MEM_InstGetOffset(runa);
MEM_WriteInt(ptr+ rozmiar obiektu, wartość);
 

BlackSwordsman

BlackSwordsman

Użytkownicy
posty22
Propsy2
Profesjabrak
  • Użytkownicy
Bogdan Zwei
1. To co napisałeś dodaje tylko kolejny przedmiot do eq.
2. Już próbowałem nie działa.

Siemekk
1. Gra odpala, ale po wybraniu nowej gry wywala access violation.
2. Co wpisać w "rozmiar obiektu, watość"?

var int slight; slight = MEM_InstGetOffset(ItArScrollLight);
MEM_WriteInt(slight+ COUNT[2], MANACOST_LIGHT);
???

Generalnie chodzi o to że mają się zmieniać parametry wszystkich przedmiotów run/zwojów. Np. wszystkie kule ognia runy/zwoje mają mieć takie same parametry. Wszystko zależy od zmiennych z funkcji spell_parm (); wszędzie gdzie potrzeba dałem odniesienia i techniczne wszystko działa ok(podczas rzucania czaru odejmuje odpowiednią ilość mana oraz zadaje obrażeń tyle ile powinno), ale parametry przedmiotu się nie zmieniają i wyświetla się tylko pierwsza wartość tak jakby postać się wogóle nie rozwijała. Nie jestem fachowcem, ale może wystarczy tylko spell_parm (); wrzucić w odpowiednie miejsca?
 

Siemekk

Siemekk

Złote Wrota
Szlachcic
posty1820
Propsy632
ProfesjaSkrypter
  • Złote Wrota
  • Szlachcic
Pointer, zapisany w postaci int'a. Trzeba go wyliczyć ręcznie. Chyba będzie to:
MEM_WriteInt(slight+ 776], MANACOST_LIGHT);
Co do tego 2. Stwórz funkcję  gdzie podasz instancję runy oraz wartość, a argumentami zastąpisz itru_massdeath i MANACOST_LIGHT.
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1752
Propsy480
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Bogdan Zwei
1. To co napisałeś dodaje tylko kolejny przedmiot do eq.

Really? REALLY? Po co ja Ci pomagam, skoro ty nawet nie wiesz co ta funkcja robi...  :F
 
: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.

BlackSwordsman

BlackSwordsman

Użytkownicy
posty22
Propsy2
Profesjabrak
  • Użytkownicy
Niestety przy var int slight; slight = MEM_InstGetOffset(ItArScrollLight);
MEM_WriteInt(slight+ 776, MANACOST_LIGHT);
znowu wywala access violation.

2. Widzisz jak by to było takie proste to już bym to zrobił.
var C_Item slight;

slight = Hlp_GetInstanceID (ItArScrollLight);
slight.count[2] = MANACOST_LIGHT;

Zamiast Hlp_GetInstanceID próbowałem już kilkanaście różnych opcji. Męczę się drugi dzień z tym. W końcu gra musi wiedzieć przy slight o który przedmiot chodzi konkretnie podobnie jak:
Hlp_GetNpc(JakisNPC)Przy NPC.

Bogdan Zwei
No dobra ok, ale skąd gra ma wiedzieć który przedmiot to item. ?
 

Siemekk

Siemekk

Złote Wrota
Szlachcic
posty1820
Propsy632
ProfesjaSkrypter
  • Złote Wrota
  • Szlachcic
Bogdan dobrze gada. Ta funkcja jakoś dziwnie działa, ale działa! Wiem to z własnego doświadczenia.
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1752
Propsy480
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Npc_GetInvItem przypisuje dane itemu do zmiennej "item". Ot i cała filozofia.
 
: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.


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