unikalny miecz 13821 39

O temacie

Autor ShadowR

Zaczęty 20.12.2009 roku

Wyświetleń 13821

Odpowiedzi 39

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

unikalny miecz
#20 2009-12-21, 17:43(Ostatnia zmiana: 2009-12-21, 17:43)
a dokładniej, jak czip to zrobił bo oglądałem filmik i jestem pod wrażeniem
Albo użył tej metody co ja, albo co bardziej prawdopodobne funkcji sprawdzającej przy trafieniu z jakiej broni korzysta przeciwnik i kto jest ofiarą (wskazuje na to efekt wizualny przy trafieniu wrzoda). Jednak to rozwiązanie ma tą wadę, że nie mamy tak na prawdę kontroli nad ilością zadawanych obrażeń. Można co najwyżej dodatkowo "odjąć" przeciwnikowi punkty życia, jednak wtedy skrypt nie bierze pod uwagę pancerza ofiary, a to jest nierealistyczne. Poza tym trzeba by wtedy dodać warunek który sprawdza czy ofiara nie jest nieśmiertelna, inaczej raniło by każdego.

ShadowR

ShadowR

Użytkownicy
posty21
  • Użytkownicy
błąd ; ] twój sposób nie działa ..

Func does not  return an instance

jeszcze pokombinuje
 

Axel

Axel

Użytkownicy
Król Mount & Blade
posty244
Propsy2
  • Użytkownicy
  • Król Mount & Blade
Co do tego Wrzoda i patelni , z jednego komentarza można wywnioskować , że patelnia z takim efetkem działa na każdego , ale efekt wyzwala się przy zabiciu (a Wrzoda miał na strzała :/  )
 
Mount & Blade i Dofus wymiatają :D

Jeżeli ktoś gra w Dofusa niech napisze do mnie na pw !



Wie is ezel? Ik.

Item editor - M&B

Kito

Kito

Użytkownicy
posty162
Propsy17
  • Użytkownicy

Kito

unikalny miecz
#23 2009-12-21, 19:32(Ostatnia zmiana: 2009-12-21, 21:48)
a nie mógł by porostu "zerżnąć" z golema przed wieżą xardasa skryptu? tylko bez skojażeń xD

EDIT

OK przekonałeś mnie xD
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

unikalny miecz
#24 2009-12-21, 19:37(Ostatnia zmiana: 2009-12-21, 19:52)
a nie mógł by porostu "zerżnąć" z golema przed wieżą xardasa skryptu? tylko bez skojażeń xD
Tam użyto po prostu paramentu obrony przed konkretnymi typami obrażeń, a ilość niewykorzystanych typów jest ograniczona. Poza tym, musiałbyś robić bronie korzystające z takich typów, a to mogłoby dawać takie efekty jak "odlot" trafionego przeciwnika, co wygląda dość nierealistycznie. W razie czego tutaj masz listę typów obrażeń wraz z przetłumaczonymi komentarzami programisty, część z nich rozpoznasz po samej angielskiej nazwie:
  • DAM_INVALID - nie używać, jest tu zdefiniowane tylko dla uzupełnienia kompletu (jakiś "błędny", źle zrobiony typ)
  • DAM_BARRIER - nie używać, jest tu zdefiniowane tylko dla uzupełnienia kompletu (obrażenia od bariery)
  • DAM_BLUNT - tępe (broń obuchowa)
  • DAM_EDGE - krawędź (obrażenia od ostrza)
  • DAM_FIRE - ogień (od magii ognia, golemów ognistych, Śniącego i naładowanego Uriziela)
  • DAM_FLY - lot (odrzut, używają go golemy)
  • DAM_MAGIC - magia (zaklęcia kręgu wody)
  • DAM_POINT - punktowe (obrażenia od broni dystansowej)
  • DAM_FALL - nie używać, jest tu zdefiniowane tylko dla uzupełnienia kompletu (obrażenia od upadku)

gafciozielarz

gafciozielarz

Użytkownicy
posty9
  • Użytkownicy
eee...
To jest do gothic 1 czy dwa?
 

jendrzejs

jendrzejs

Użytkownicy
posty586
Propsy31
Profesjabrak
  • Użytkownicy
Powinno zadziałac też w GIINk i G1
 

zommer

zommer

Użytkownicy
posty135
Propsy25
ProfesjaNierób
  • Użytkownicy
A przechodząc do tego flags to w zawsze jest błąd z tym. Jak dojdę w czym błąd to dam znać.
 

maciejG

maciejG

Użytkownicy
posty450
Propsy1
  • Użytkownicy

maciejG

unikalny miecz
#28 2009-12-27, 20:13(Ostatnia zmiana: 2009-12-27, 20:14)
var C_NPC specjalwilk;
specjalwilk = Hlp_GetNpc(specjalny_wilk);
specjalwilk.flags = 0;
Próbowałeś tego?
EDIT:
No tak, to już było pisane. :/
 
Spoiler

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

unikalny miecz
#29 2009-12-27, 20:26(Ostatnia zmiana: 2009-12-27, 20:29)
var C_NPC specjalwilk;
specjalwilk = Hlp_GetNpc(specjalny_wilk);
specjalwilk.flags = 0;
Próbowałeś tego?
EDIT:
No tak, to już było pisane. :/

Rzeczywiście pisałem w TYM poście, jednak chyba pomyliłem funkcje, napisałem Hlp_GetInstanceID, a prawdopodobnie prawidłowo by było tak jak ty, czyli Hlp_GetNpc :D
Czyli jednak warto spróbować ;p

Jeśli resztę skryptów kopiowałeś z moich postów, to użyj tego:
VAR C_NPC special_monster;
special_monster = Hlp_GetNpc(special_wolf);
special_monster.flags = 0;

ShadowR

ShadowR

Użytkownicy
posty21
  • Użytkownicy

ShadowR

unikalny miecz
#30 2009-12-30, 22:31(Ostatnia zmiana: 2009-12-31, 09:43)
wracajac do tematu zrobilem juz cos takiego ; ]
zademonstruje wam moje pierwsze prymitywne rozwiązanie

INSTANCE for_monsters (C_Item)
{
name = "test miecza";  

mainflag = ITEM_KAT_NF;
flags = ITEM_2HD_AXE;
material = MAT_WOOD;

value = 4060;

damageTotal = 98;
damagetype = DAM_EDGE;
range =  150;

cond_atr[2]   = ATR_STRENGTH;
cond_value[2]  = 5;
visual = "ItMw_2H_Axe_Heavy_03.3DS";

on_equip = Equip_for_monsters;
on_unequip = UnEquip_for_monsters;

description = name;
TEXT[1] = "Ten miecz skuteczny jest potwora.";
TEXT[2] = NAME_Damage; COUNT[2] = damageTotal;
TEXT[3] = NAME_Str_needed; COUNT[3] = cond_value[2];
TEXT[4] = NAME_TwoHanded;
TEXT[5] = NAME_Value; COUNT[5] = value;
};
FUNC VOID Equip_for_monsters()
{
Npc_ChangeAttribute(instance_potwora,ATR_HITPOINTS_MAX,-1500);
};


FUNC VOID UnEquip_for_monsters()
{
Npc_ChangeAttribute(instance_potwora,ATR_HITPOINTS_MAX,+1500);
};

ale tak nawiasem :D  wasze tez działa

Jednak  poszerzajac swoja wiedze trafilem na "kamien" :lol2:
nie działa mi ten miecz z tutka Zyska (ten magiczny  w G1)
wszystko się elegancko kompiluje a nie ma efektu


link to kodu

INSTANCE asdtest (C_Item)
{
name = "asd miecz test";

mainflag = ITEM_KAT_NF;
flags = ITEM_2HD_SWD;
material = MAT_METAL;

value = 4500;

damageTotal = 150;
damagetype = DAM_EDGE;
range =  140;

cond_atr[2]   = ATR_STRENGTH;
cond_value[2]  = 5;

visual = "ItMw_2H_Sword_Heavy_03.3DS";

description = name;
TEXT[1] = "test micza";
TEXT[2] = NAME_Damage; COUNT[2] = damageTotal;
TEXT[3] = NAME_Str_needed; COUNT[3] = cond_value[2];
TEXT[4] = NAME_TwoHanded;
TEXT[5] = NAME_Value; COUNT[5] = value;
};

//////////////////////////////////////////////////////////////////////////

func void weaponreaction(var c_npc attacker,var c_npc defender)
{
if(!Npc_IsInFightMode(attacker,FMODE_MELEE))
{return;};
var c_item weapon;
weapon=Npc_GetReadiedWeapon(attacker);
if(Hlp_IsItem(weapon,asdtest))
{
Wld_PlayEffect("spellFX_IceCube",attacker,defender,0,0,0,FALSE);
PrintDebugNpc( PD_MAGIC, "B_AssessMagic ...IceCube oder IceWave" );
Npc_SendPassivePerc(defender, PERC_ASSESSFIGHTSOUND, defender, other);

if ( !( (defender.guild == GIL_SLF) ||
(defender.guild == GIL_DEMON) ||
(defender.guild == GIL_GOLEM) ||
(defender.guild == GIL_SWAMPSHARK) ||
(defender.guild == GIL_TROLL)  ) ) &&
( ! (C_BodystateContains(defender,BS_SWIM)) || (C_BodystateContains(defender,BS_DIVE)) )

{
Npc_ClearAIQueue(defender);
AI_StartState (defender, ZS_MagicFreeze, 0, "");
};
}
else
{
return;

};
};

//////////////////////////////////////////////////////////////////////////

func int CmpNpc(var c_npc p1,var c_npc p2)
{
var int old1;
var int old2;
var int result;
old1=p1.aivar[0];
old2=p2.aivar[0];
p1.aivar[0]=0;
p2.aivar[0]=1;
result=p1.aivar[0];
p1.aivar[0]=old1;
p2.aivar[0]=old2;
return result;
};

//////////////////////////////////////////////////////////////////////////

func void Sbd_is_damaged()
{
if(Npc_IsPlayer(victim)&&CmpNpc(self,other))
{weaponreaction(self,hero);};
};

//////////////////////////////////////////////////////////////////////////

func void B_Orc_AssessCombatDamage()
{
weaponreaction(other,self);
};

co mi sie wydaje ze nie zrozumalem tego dobrze ;/
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Przecież to to samo co zaleciłem, tylko nie zmieniasz parametru odpowiedzialnego za śmiertelność, a jedynie za HP. Tak samo mogłeś zrobić z którąś odpornością, działałoby nawet lepiej.

ShadowR

ShadowR

Użytkownicy
posty21
  • Użytkownicy

ShadowR

unikalny miecz
#32 2009-12-31, 10:34(Ostatnia zmiana: 2009-12-31, 10:38)
Avallach

jak by ci sie chciało ; ]
looknij na ten drugi miecz  
co tam mam nie tak?
(dodałem linijke do ZS_orc_attack)

func void ZS_Orc_Attack ()
{
PrintDebugNpc (PD_ORC_FRAME, "Orc_Attack!" );

Npc_SetTarget (self, other );

Npc_PercEnable (self, PERC_ASSESSDAMAGE, B_Orc_AssessCombatDamage )  // ta linijke
Npc_PercEnable (self, PERC_ASSESSMAGIC,  B_AssessMagic);
Npc_PercEnable (self, PERC_ASSESSMURDER, B_Orc_AssessMurder );
Npc_PercEnable (self, PERC_ASSESSDEFEAT, B_Orc_AssessDefeat );
 


ShadowR

ShadowR

Użytkownicy
posty21
  • Użytkownicy
Cytat: Avallach link=topic=8111.msg76286#msg76286 date=Dec 31 2009, 11:00 AM\'
Banalny błąd - brak ";" na końcu linijki :lol2:


akurat to nie to : D
tylko zle skopiowałem..
ale wszytko ok reparsuje się (soz jak złe to napisałem )
tylko efektu nie ma ;/
 


ShadowR

ShadowR

Użytkownicy
posty21
  • Użytkownicy
zrobilem pare zmian w kodzie...
i jest  tak :

uderzam kolesia, pokazuje sie fala mrozu
i zamrarza go, nastepny cios i nie ma juz fali ; /
dopiero jak sie odmrozi koles to jest nastepna fala
i jak koleś jest zamrożony to nie ma na nim lodu.

func int CmpNpc(var c_npc p1,var c_npc p2)
{
var int old1;
var int old2;
var int result;

old1=p1.aivar[0];
old2=p2.aivar[0];
p1.aivar[0]=0;
p2.aivar[0]=1;
result=p1.aivar[0];
p1.aivar[0]=old1;p2.aivar[0]=old2;
return result;
};

//////////////////////////////////////////////////////////////

func void weaponreaction(var c_npc Hero,var c_npc Self)
{
if(!Npc_IsInFightMode(hero,FMODE_MELEE))
{
return;
};

var c_item weapon;
var c_item eqweapon;
weapon=Npc_GetReadiedWeapon(hero);
eqweapon=Npc_GetEquippedMeleeWeapon(hero);
if(Hlp_IsItem(weapon,asdtest))
{
Wld_PlayEffect("SPELLFX_ICEWAVE",self,self,0,50,DAM_MAGIC,FALSE);
PrintDebugNpc( PD_MAGIC, "B_AssessMagic ...IceCube oder IceWave" );
Npc_SendPassivePerc(self, PERC_ASSESSFIGHTSOUND, self, other);


if ( !( (self.guild == GIL_SLF) ||
(self.guild == GIL_DEMON) ||
(self.guild == GIL_GOLEM) ||
(self.guild == GIL_SWAMPSHARK) ||
(self.guild == GIL_TROLL)) ) &&
( ! (C_BodystateContains(self,BS_SWIM)) || (C_BodystateContains(self,BS_DIVE)) )

{
Npc_ClearAIQueue(self);
AI_StartState (self, ZS_MagicFreeze, 0, "");
};

}
else if (Hlp_IsItem(eqweapon,asdtest))
{
Wld_SendTrigger("weaponreaction");
};
};

///////////////////////////////////////////////////////////////////////////////

func void Sbd_is_damaged()
{
if (self==other&&hero==victim)
{
if(Npc_IsPlayer(victim)&&CmpNpc(self,other))
{
weaponreaction(self,hero);
};
};
};


//-----------------------------------------------------------
//MIECZ
//-----------------------------------------------------------

INSTANCE asdtest (C_Item)
{
name = "asdtest miecza";

mainflag = ITEM_KAT_NF;
flags = ITEM_SWD;
material = MAT_METAL;

value = 2500;

damageTotal = 110;
damagetype = DAM_EDGE;
range = 130;

cond_atr[2] = ATR_STRENGTH;
cond_value[2] = 5;

visual = "ItMw_1H_Sword_Bastard_04.3DS";

description = name;
TEXT[2] = NAME_Damage; COUNT[2] = damageTotal;
TEXT[3] = NAME_Str_needed; COUNT[3] = cond_value[2];
TEXT[4] = NAME_TwoHanded;
TEXT[5] = NAME_Value; COUNT[5] = value;
};
 


ShadowR

ShadowR

Użytkownicy
posty21
  • Użytkownicy
Sam lód to osobny efekt, poszukaj go na liście istniejących.


ok poszukam ; ]
btw do czego jest funkcja

PrintDebug lub PrintDebugNPC  ?
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Powoduje że w zSpy jest napisane co się w tej chwili stało. Nie ma to żadnej wartości praktycznej z punktu widzenia gracza i jest niezauważalne, służy jedynie do nadzorowania działania gry.


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