NPC ma używać tylko łuku 6313 19

O temacie

Autor TheKetrab

Zaczęty 16.04.2016 roku

Wyświetleń 6313

Odpowiedzi 19

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy

TheKetrab

NPC ma używać tylko łuku
2016-04-16, 19:11(Ostatnia zmiana: 2016-04-22, 21:54)
Cześć,
w fabule mojego moda natknąłem się na etap, w którym potrzebuję ustawić coś takiego, żeby npc TYLKO strzelał z łuku. Jak to zrobić? Gdzie edytuje się... właściwości (?) poszczególnych aiwarów? To co można ustawić jest w AI_Constants, no ale gdzieś to jest chyba bardziej dogłębnie definiowane?
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Zmień talent walki na FAI_RANGED. Powinno być dobrze.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Zucklov

Zucklov

Quest Pack Team
Sztywniutko
posty1220
Propsy1241
ProfesjaSkrypter
  • Quest Pack Team
  • Sztywniutko
Zmień talent walki na FAI_RANGED. Powinno być dobrze.
Takie FAI nie istnieje w Gothic 2.
 
Lieb Vaterland magst ruhig sein

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Próbowałem tak: dodałem aivara
const int AIV_OnlyBow = 89;
W pliku B_SelectWeapon:
if (slf[AIV_OnlyBow] == TRUE)
{
AI_ReadyRangedWeapon (slf);
return;
}

No i gościowi wpisuje tego aivara oczywiście.
Po zaatakowaniu npc wyjmuje broń (łuk), ale nie strzela.
Co mam zrobić, żeby strzelał?
 

KornikS

KornikS

Użytkownicy
posty104
Propsy72
NagrodyV
ProfesjaGrafik 2D
  • Użytkownicy
A ma chociaż jedną strzałę w ekwipunku? :v
 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Pewnie. Akurat próbowałem na kuszy i bełtach, ale to i tak RANGED_WEAPON :P
 

Draks

Draks

Użytkownicy
Gothic 2 Nowy porządek
posty1715
Propsy766
ProfesjaGrafik 3D
  • Użytkownicy
  • Gothic 2 Nowy porządek
Ale możesz ustawić chyba tylko FAI_NADED coś takiego :D
 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Ja nie wiem skąd ty wziąłeś takie FAI, ale nie działa.
 

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Tak więc nie będę ci mówił co masz źle bo nie podałeś skryptu. ale masz w prezencie to: instance Test (Npc_Default)
{
// ------ NSC ------
name = "TestUżyciaŁukuIKuszy";
guild = GIL_VLK;
id = 413;
voice = 11;
flags       = NPC_FLAG_IMMORTAL;
npctype = NPCTYPE_MAIN;

// ------ Attribute ------
attribute[ATR_STRENGTH] = 90;
attribute[ATR_DEXTERITY] = 90;
attribute[ATR_MANA_MAX] = 0;
attribute[ATR_MANA] = 0;
attribute[ATR_HITPOINTS_MAX] = 40;
attribute[ATR_HITPOINTS] = 40;

// ------ Kampf-Taktik ------
fight_tactic = FAI_HUMAN_STRONG;

// ------ Equippte Waffen ------
EquipItem (self, ItRw_Mil_Crossbow);
CreateInvItems (self, ItRw_Bolt, 20);


// ------ visuals ------
B_SetNpcVisual (self, MALE, "Hum_Head_FatBald.", Face_L_Tough_Santino, BodyTex_L,ITAR_LEATHER_L );

Mdl_SetModelFatness (self, 0.8);
Mdl_ApplyOverlayMds (self, "Humans_Relaxed.mds");

// ------ NSC-relevante Talente vergeben ------
B_GiveNpcTalents (self);

// ------ Kampf-Talente ------
B_SetFightSkills (self, 35);

// ------ TA anmelden ------
daily_routine = Rtn_Start_413;
};

FUNC VOID Rtn_Start_413 ()
{
TA_Stand_Guarding (05,00,00,00,"EROL_IDZIE3");
TA_Stand_Guarding (00,00,05,00,"EROL_IDZIE3");
};

Wzoruj się na tym, a twoje npc będą używać kuszy czy tam łuku, dodam że między innymi ważne jest aby miały wystarczającą ilość siły/zręczności do użycia danego łuku/kuszy.
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Picu glancu :D W ten sposób npc będzie miał tylko kuszę. Zawsze. Na co mi do tego byłby aivar i skrypty typu B_SelectWeapon? Nie nie, nie grzebałbym tak :P Chodzi mi o to, aby npc normalnie używał miecza i łuku, ale na pewnym etapie gry ma stać na murze i strzelać do orków. WTEDY ma używać tylko łuku. Bo w chwili obecnej wyciąga miecz i zeskakuje z muru. Mam na czas tego 'oblężenia' usunąć mu miecz, a po znowu dodać?
 

KornikS

KornikS

Użytkownicy
posty104
Propsy72
NagrodyV
ProfesjaGrafik 2D
  • Użytkownicy
Usunąć, albo zrobić coś, żeby nie mógł go użyć. Zwiększyć wymogi, lub coś w tym stylu.
 

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Ja bym zrobił coś w stylu (w dialogu)) że jeśli hero skończył gadać na jakiś owocny temat to wtedy zmienna jest true i npc ma zamiast miecza kuszę/łuk i nakurwia.... aa btw zamiast CreateInvItem (self, JakiśItem); jebnąl bym CreateInvItem (self, zmienna); a wyżej że zmienna = dany miecz; a p danym dialogu zmienna = dana kusza/łuk; :D
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Okej no to tak to można obejść,
a ork kusznik? Bazując się skryptem orka szamana, który z odległości wali w nas kulami ognia, a z bliska wyciąga miecz. Jak poradzić sobie, żeby ork z daleka walił z kuszy a z bliska wyciągał broń?
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Plik b_selectspell tam szukaj odpowiedzi :ok:
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Siemaczy ma racje, skoro przedewszytkim na starcir tematu nie podałeś o chuj ci chodzi, to rozkminiaj. masz tu temat bardziej pomocny z zrozumienu b_select_spell: http://themodders.org/index.php?topic=26045.0

Btw nie znajdziesz tutaj nic typu kopiuj/wklej chodzi o to żebyś coś złapał :)
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
SelectSpell ogarniam, no ale w sumie dobry pomysł to był -> wzorując się na tym, zrobiłem orka kusznika.
Jeśli chodzi o sposób z usunięciem miecza - działa. Skrypt w SelectWeapon jest taki:

if (slf.aivar[AIV_MM_REAL_ID] == ID_ORCSCOUT)
{
if (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_MELEE)
{
AI_ReadyRangedWeapon (slf); //FK-Waffe ziehen
return;
}
else
{
AI_RemoveWeapon (slf);
AI_ReadyMeleeWeapon (slf);
return;
};
};

if (slf.aivar[AIV_OnlyBow] == TRUE)
{
if (Npc_GetDistToNpc(slf,oth) > 0)
{
AI_ReadyRangedWeapon (slf); //FK-Waffe ziehen
return;
};
};

Tak jak mówię ork scout działa. Ale gościu z aivarem OnlyBow tylko wyciąga kuszę - nie pociąga za spust. Dlaczego, skoro przecież jest 'return'?
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
A dałeś mu bełty :F?  Jak chcesz mogę ci przesłać skrypt Szkieleta lucznika z r2.0 i zobaczysz jak to tam działa.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Tak, pewnie. Bełty ma. Testowałem na nim wlasnie ten sposób z usunięciem miecza. Cóż, pokaż ten skrypt. Może coś wykminię.
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
instance Skeleton_Bow(Npc_Default)
{
name[0] = "Przeklęty szkielet";
guild = GIL_DMT;
aivar[AIV_MM_REAL_ID] = ID_SKELETON;
id = 1258;
voice = 18;
flags = 0;
level = 150;
npcType = npctype_main;
aivar[AIV_Gender] = MALE;
bodyStateInterruptableOverride = TRUE;
B_SetAttributesToChapter(self,4);
attribute[ATR_MANA] = 6666;
attribute[ATR_MANA_MAX] = 6666;
fight_tactic = FAI_HUMAN_COWARD;
EquipItem(self,ITMW_1H_DOOMSWORD);
EquipItem(self,ItRw_Undead);
effect = "SPELLFX_WHITEEYES";
CreateInvItems(self,ItRw_Arrow,10);
Mdl_SetVisual(self,"HumanS.mds");
Mdl_SetVisualBody(self,"Ske_Body",DEFAULT,DEFAULT,"Ske_Head",6,6,itar_skel_war);
Mdl_ApplyOverlayMds(self,"Humans_Militia.mds");
Mdl_ApplyOverlayMds(self,"humans_skeleton.mds");
B_GiveNpcTalents(self);
B_SetFightSkills(self,60);
HitChance[NPC_TALENT_BOW] = 100;
HitChance[NPC_TALENT_CROSSBOW] = 100;
senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
senses_range = PERC_DIST_MONSTER_ACTIVE_MAX;
start_aistate = ZS_Stand_Dementor;
};
Nie widzę tu nic ciekawego związanego z AiVarem. Przeszukałem w dodatku wszystkie skrypty i nic nie ma :F
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
W sumie ten łucznik niczego nie daje... Ork już strzela jak należy, ale ciągle problemy z ludźmi.
Próbowałem sztucznie wymusić atak:

if (slf.aivar[AIV_OnlyBow] == TRUE)
{
if (Npc_GetDistToNpc(slf,oth) > 0)
{
AI_ReadyRangedWeapon (slf); //FK-Waffe ziehen
B_Attack (slf, oth, AR_NONE, 1);
};
};

W efekcie npc z daleka wyciągał łuk i nie strzelał, a jak do niego podszedłem to wyciągał miecz i bił.
Okej, wróciłem do starej wersji. Posprawdzałem to lepiej, co i jak mam. Okazało się, że łucznik po zaatakowaniu z odległości wyciąga łuk i strzela, natomiast po podejściu do niego na odległość, z której normalnie wyciągnąłby miecz, stoi tylko z wyciągniętym łukiem i już nie strzela. Zamieszczam poniżej skrypt B_SelectWeapon.

Spoiler
// *******************************************
// B_SelectWeapon
// --------------
// Bei Fernkämpfern wird Muni ins Inv gemogelt
// *******************************************

func void B_SelectWeapon(var C_NPC slf, var C_NPC oth)
{
// EXIT IF...

// ------ NSC im Wasser / beim Fallen ------
if (C_BodyStateContains(slf,BS_FALL))
|| (C_BodyStateContains(slf,BS_SWIM))
|| (C_BodyStateContains(slf,BS_DIVE))
{
return;
};

// ------ Magie wählen oder behalten ------
if (B_SelectSpell (slf, oth)) //bei HUMANS wählen nur Magier, Paladine oder Dementoren Magie
{
return; //Magie gewählt!
};

if (Npc_IsInFightMode(slf,FMODE_MAGIC)) //Habe Magie gezogen, will aber keine benutzen!!!
{
if (!Npc_IsInFightMode(slf, FMODE_NONE)) //irgendeine ANDERE Waffe gezogen
{
AI_RemoveWeapon (slf);
};

AI_ReadyMeleeWeapon (slf); //Schwert ziehen, sonst Fäuste
return;
};

// ------ Fernkampfwaffe behalten ------
if (Npc_IsInFightMode(slf,FMODE_FAR))
{
if (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_RANGED_INNER)
|| (!Npc_HasEquippedMeleeWeapon(slf))

{
return;
};
};

// ------ Nahkampfwaffe behalten ------
if (Npc_IsInFightMode(slf,FMODE_MELEE))
{
if (Npc_GetDistToNpc(slf,oth) <= FIGHT_DIST_RANGED_OUTER)
|| (!Npc_HasEquippedRangedWeapon(slf))

{
return;
};
};


// FUNC

if (slf.aivar[AIV_MM_REAL_ID] == ID_ORCSCOUT)
{
if (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_MELEE)
{
AI_ReadyRangedWeapon (slf); //FK-Waffe ziehen
return;
}
else
{
AI_RemoveWeapon (slf);
AI_ReadyMeleeWeapon (slf);
return;
};
};

if (slf.aivar[AIV_OnlyBow] == TRUE)
{
if (Npc_GetDistToNpc(slf,oth) > 0)
{
AI_ReadyRangedWeapon (slf); //FK-Waffe ziehen
return;

};
};

// ------ NK-Waffe ziehen ------
if (Npc_HasEquippedMeleeWeapon(slf))
&& (Npc_GetDistToNpc(slf,oth) <= FIGHT_DIST_RANGED_OUTER)
{
if (!Npc_IsInFightMode(slf, FMODE_NONE)) //irgendeine ANDERE Waffe gezogen
{
AI_RemoveWeapon (slf);
};

AI_ReadyMeleeWeapon (slf); //Schwert ziehen, sonst Fäuste
return;
};

// ------ Bogen ziehen ------
if (Npc_HasEquippedRangedWeapon(slf))
&& (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_RANGED_INNER)
&& (C_NpcHasAttackReasonToKill (slf))
{
if (!Npc_IsInFightMode(slf, FMODE_NONE)) //irgendeine ANDERE Waffe gezogen
{
AI_RemoveWeapon (slf);
};

AI_ReadyRangedWeapon (slf); //FK-Waffe ziehen
return;
};

// ------ immer noch keine Waffe ------
if (Npc_IsInFightMode (slf,FMODE_NONE))
{
// ------ dann Schwert, egal welche Distanz ------
if (Npc_HasEquippedMeleeWeapon(slf))
{
AI_ReadyMeleeWeapon (slf); //Schwert ziehen
return;
};

// ------ wenn kein Schwert, dann Bogen, egal welche Distanz ------
if (Npc_HasEquippedRangedWeapon(slf))
{
AI_ReadyRangedWeapon (slf); //FK-Waffe ziehen
return;
};

// ----- wenn gar keine Waffe: Default (Fäuste) ------
AI_ReadyMeleeWeapon (slf);
return;
};

return;
};


Co może być przyczyną tego, że npc wciąż nie strzela (z bliska) (bo z daleka strzela)?
 


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