zmienna okreslająca ilość obrażeń 3222 6

O temacie

Autor pawbuj

Zaczęty 26.12.2010 roku

Wyświetleń 3222

Odpowiedzi 6

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
jak w temacie czy jest zmienna określająca ilość zadawanych obrażeń i czy można ją edytować/wyswietlać.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

zmienna okreslająca ilość obrażeń
#1 2010-12-26, 12:21(Ostatnia zmiana: 2010-12-26, 12:56)
var c_item weapon; weapon = Npc_GetReadiedWeapon (self);weapon.damageTotal += 5; //zwiększanie obrażeń o 5
Print (IntToString(weapon.damageTotal));//wyświetlanie obrażeń

Ewentualnie jeśli chcesz brać pod uwagę odporność przy wyświetlaniu jest troszkę trudniej, ze względu na różne typy obrażeń i to że nie odpowiadają one bezpośrednio typom odporności, trzeba zastosować przesunięcia bitowe:
if(weapon.damageTotal >= other.protection[1 >> weapon.damagetype])
{Print (IntToString(weapon.damageTotal - other.protection[1 >> weapon.damagetype]));};
Jednak nie jestem pewien czy zapisałem to prawidłowo i czy Daedalus obsługuje zmienne jako indeksy tablic.

Można też prościej, ale mniej elegancko, korzystając z warunków:
var int damage;
if (weapon.damagetype = 1) {damage = weapon.damageTotal - other.protection[0];}
else if (weapon.damagetype = 2) {damage = weapon.damageTotal - other.protection[1];}
else if (weapon.damagetype = 4) {damage = weapon.damageTotal - other.protection[2];}
else if (weapon.damagetype = 8) {damage = weapon.damageTotal - other.protection[3];}
else if (weapon.damagetype = 16){damage = weapon.damageTotal - other.protection[4];}
else if (weapon.damagetype = 32){damage = weapon.damageTotal - other.protection[5];}
else if (weapon.damagetype = 64){damage = weapon.damageTotal - other.protection[6];}
else if (weapon.damagetype =128){damage = weapon.damageTotal - other.protection[7];}
else {Print("Niedozwolony typ obrażeń!"); damage = -1;};
if (damage >= 0) {Print(IntToString(damage));};

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Cytat: Avallach link=topic=12540.msg125770#msg125770#msg125770#msg125770 date=1293362510
var c_item weapon; weapon = Npc_GetReadiedWeapon (self);

weapon.damageTotal += 5; //zwiększanie obrażeń o 5
Print (IntToString(weapon.damageTotal));//wyświetlanie obrażeń
dzięki, mam 2 pytania:
1)jaka jest korelacja tej zmiennej z umiejętnościami 1h/2h i uderzeniami krytycznymi i czy można to edytować;
2) czy aby zwiększyć damage 4 razy moźna tak zapisać weapon.damageTotal *= 4 i czy może byc to zależne od jakiejś umiejętności (plus ważne,ze jest to melee attack);
 

orcwarrior

orcwarrior

The Modders
posty475
Propsy317
Profesjabrak
  • The Modders
Cytat: pawbuj link=topic=12540.msg125775#msg125775#msg125775#msg125775 date=1293363333
dzięki, mam 2 pytania:
1)jaka jest korelacja tej zmiennej z umiejętnościami 1h/2h i uderzeniami krytycznymi i czy można to edytować;
2) czy aby zwiększyć damage 4 razy moźna tak zapisać weapon.damageTotal *= 4 i czy może byc to zależne od jakiejś umiejętności (plus ważne,ze jest to melee attack);

1. Ogolnie, o ile się nie myle to formula na obrażenia to
Obrazenia broni + sila - obrona
w wypadku obrażen krytycznych ta wartosc jest mnożona x2
2.Z tego co sie orientuje nie bedzie to poprawione w "realtime", lepszym sposobem bylo by ustawienie zmiennej dmgMul(?) w Ikarusie dla hero (oCNpc)
 



inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

zmienna okreslająca ilość obrażeń
#4 2010-12-26, 13:05(Ostatnia zmiana: 2010-12-26, 13:29)
To co napisałem zawsze będzie działało od następnego ciosu. Nie pamiętam czy siła ma jakiś związek z obrażeniami od broni poszczególnych typów, wiem tylko że wpływa na obrażenia od pięści. Poza tym, ważne żebyś pamiętał że sposób który podałem wpływa na obrażenia od broni, co ma trzy istotne skutki. Po pierwsze, gdybyś chciał aby zmiana widoczna w opisie broni, potrzebna jest dodatkowa linijka kodu. Po drugie, działa to jednocześnie na wszystkich korzystających z tej broni. Po trzecie, trzeba pamiętać żeby przy ściąganiu damage zresetować. Dodatkowo, skrypt nie działa na bronie z kilkoma rodzajami obrażeń na raz (jak Uriziel). Nie pamiętam jak to było z obrażeniami od ognia, bo tu sprawa była dodatkowo udziwniona. Zmienna o której napisał orcwarrior to o ile się nie mylę oCNpc.damageMul.

Aha, przy krytyku obrażenia są mnożone ogólnie przez zmienną DAM_CRITICAL_MULTIPLIER, niekoniecznie musi być to 2 (można np zmienić na 1 i wprowadzić własny, alternatywny system). Taka zmiana była by w tym przypadku o tyle pożyteczna, że nie da się zwyczajnie chyba sprawdzić czy dany cios był krytyczny.

O, przychodzi mi do głowy jeszcze inna możliwość, ale nie działająca przy obrażeniach innych niż od ataku (np od upadku czy krzaka jeżyn [pozdro X17]). Otóż mógłbyś w funkcjach podpiętych do perc_assessdamage dodać funkcję wyświetlającą różnicę pomiędzy wartością zapisaną w którymś z AIVARów 43-50 i aktualnym hp, a następnie zapisującą w tymże AIVARze hp. Oczywiście trzeba by też uwzględnić korekty we wszystkich funkcjach leczących z których npc mogą korzystać żeby nie było wyników ujemnych.
Ta metoda działała by natychmiast, jednak jak wspomniałem czynniki zewnętrzne mogłyby trochę komplikować (jednak każdy tylko raz).

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Cytuj
Jednak nie jestem pewien czy zapisałem to prawidłowo i czy Daedalus obsługuje zmienne jako indeksy tablic.
To jest źle. Indeks tablicy nie może być zmienną, tylko stałą.

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
piszę o tym,  bo gram aktualnie w sagę baldurs gate i jest tam wiele fajnych innowacji ,które mogły by trafic do gothica.
 


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