Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - Vesemir

Strony: [1] 2 3
1
Witam
Próbowałem stworzyć czar przemiany w chrząszcza w formie zwoju. O dziwo w G2NK go nie ma.
Jednak mimo starań nie działa. Bezimienny bierze zwój i rozpoczyna animację przemiany ale nie zmienia się w chrząszcza tylko klęczy na kolanie po czym wstaje.
Byłbym wdzięczy za pomoc we wskazaniu co zrobiłem źle, co przeoczyłem  :)
I jak mogę to naprawić.


W pliku Constants.d  wykorzystałem SPL_Reserved_90
Spoiler
const int SPELL_GOOD = 0;
const int SPELL_NEUTRAL = 1;
const int SPELL_BAD = 2;
const int SPL_DONTINVEST = 0;
const int SPL_RECEIVEINVEST = 1;
const int SPL_SENDCAST = 2;
const int SPL_SENDSTOP = 3;
const int SPL_NEXTLEVEL = 4;
const int SPL_STATUS_CANINVEST_NO_MANADEC = 8;
const int SPL_FORCEINVEST = 1 << 16;
const int TARGET_COLLECT_NONE = 0;
const int TARGET_COLLECT_CASTER = 1;
const int TARGET_COLLECT_FOCUS = 2;
const int TARGET_COLLECT_ALL = 3;
const int TARGET_COLLECT_FOCUS_FALLBACK_NONE = 4;
const int TARGET_COLLECT_FOCUS_FALLBACK_CASTER = 5;
const int TARGET_COLLECT_ALL_FALLBACK_NONE = 6;
const int TARGET_COLLECT_ALL_FALLBACK_CASTER = 7;
const int TARGET_TYPE_ALL = 1;
const int TARGET_TYPE_ITEMS = 2;
const int TARGET_TYPE_NPCS = 4;
const int TARGET_TYPE_ORCS = 8;
const int TARGET_TYPE_HUMANS = 16;
const int TARGET_TYPE_UNDEAD = 32;
const int SPL_PalLight = 0;
const int SPL_PalLightHeal = 1;
const int SPL_PalHolyBolt = 2;
const int SPL_PalMediumHeal = 3;
const int SPL_PalRepelEvil = 4;
const int SPL_PalFullHeal = 5;
const int SPL_PalDestroyEvil = 6;
const int SPL_PalTeleportSecret = 7;
const int SPL_TeleportSeaport = 8;
const int SPL_TeleportMonastery = 9;
const int SPL_TeleportFarm = 10;
const int SPL_TeleportXardas = 11;
const int SPL_TeleportPassNW = 12;
const int SPL_TeleportPassOW = 13;
const int SPL_TeleportOC = 14;
const int SPL_TeleportOWDemonTower = 15;
const int SPL_TeleportTaverne = 16;
const int SPL_Teleport_3 = 17;
const int SPL_Light = 18;
const int SPL_Firebolt = 19;
const int SPL_Icebolt = 20;
const int SPL_LightHeal = 21;
const int SPL_SummonGoblinSkeleton = 22;
const int SPL_InstantFireball = 23;
const int SPL_Zap = 24;
const int SPL_SummonWolf = 25;
const int SPL_WindFist = 26;
const int SPL_Sleep = 27;
const int SPL_MediumHeal = 28;
const int SPL_LightningFlash = 29;
const int SPL_ChargeFireball = 30;
const int SPL_SummonSkeleton = 31;
const int SPL_Fear = 32;
const int SPL_IceCube = 33;
const int SPL_ChargeZap = 34;
const int SPL_SummonGolem = 35;
const int SPL_DestroyUndead = 36;
const int SPL_Pyrokinesis = 37;
const int SPL_Firestorm = 38;
const int SPL_IceWave = 39;
const int SPL_SummonDemon = 40;
const int SPL_FullHeal = 41;
const int SPL_Firerain = 42;
const int SPL_BreathOfDeath = 43;
const int SPL_MassDeath = 44;
const int SPL_ArmyOfDarkness = 45;
const int SPL_Shrink = 46;
const int SPL_TrfSheep = 47;
const int SPL_TrfScavenger = 48;
const int SPL_TrfGiantRat = 49;
const int SPL_TrfGiantBug = 50;
const int SPL_TrfWolf = 51;
const int SPL_TrfWaran = 52;
const int SPL_TrfSnapper = 53;
const int SPL_TrfWarg = 54;
const int SPL_TrfFireWaran = 55;
const int SPL_TrfLurker = 56;
const int SPL_TrfShadowbeast = 57;
const int SPL_TrfDragonSnapper = 58;
const int SPL_Charm = 59;
const int SPL_MasterOfDisaster = 60;
const int SPL_Deathbolt = 61;
const int SPL_Deathball = 62;
const int SPL_ConcussionBolt = 63;
const int SPL_Reserved_64 = 64;
const int SPL_Reserved_65 = 65;
const int SPL_Reserved_66 = 66;
const int SPL_Reserved_67 = 67;
const int SPL_Reserved_68 = 68;
const int SPL_Reserved_69 = 69;
const int SPL_Thunderstorm = 70;
const int SPL_Whirlwind = 71;
const int SPL_WaterFist = 72;
const int SPL_IceLance = 73;
const int SPL_Inflate = 74;
const int SPL_Geyser = 75;
const int SPL_Waterwall = 76;
const int SPL_Reserved_77 = 77;
const int SPL_Reserved_78 = 78;
const int SPL_Reserved_79 = 79;
const int SPL_Plague = 80;
const int SPL_Swarm = 81;
const int SPL_GreenTentacle = 82;
const int SPL_Earthquake = 83;
const int SPL_SummonGuardian = 84;
const int SPL_Energyball = 85;
const int SPL_SuckEnergy = 86;
const int SPL_Skull = 87;
const int SPL_SummonZombie = 88;
const int SPL_SummonMud = 89;
const int SPL_Reserved_90 = 90;
const int SPL_Reserved_91 = 91;
const int SPL_Reserved_92 = 92;
const int SPL_Reserved_93 = 93;
const int SPL_Reserved_94 = 94;
const int SPL_Reserved_95 = 95;
const int SPL_Reserved_96 = 96;
const int SPL_Reserved_97 = 97;
const int SPL_Reserved_98 = 98;
const int SPL_Reserved_99 = 99;
const int MAX_SPELL = 100;


const string spellFxInstanceNames[100] =
{
"PalLight",
"PalHeal",
"PalHolyBolt",
"PalHeal",
"PalRepelEvil",
"PalHeal",
"PalDestroyEvil",
"Teleport",
"Teleport",
"Teleport",
"Teleport",
"Teleport",
"Teleport",
"Teleport",
"Teleport",
"Teleport",
"Teleport",
"Teleport",
"Light",
"Firebolt",
"Icebolt",
"Heal",
"SummonGoblinSkeleton",
"InstantFireball",
"Zap",
"SummonWolf",
"WindFist",
"Sleep",
"Heal",
"LightningFlash",
"ChargeFireball",
"SummonSkeleton",
"Fear",
"Icecube",
"ChargeZap",
"SummonGolem",
"DestroyUndead",
"Pyrokinesis",
"Firestorm",
"Icewave",
"SummonDemon",
"Heal",
"Firerain",
"BreathOfDeath",
"MassDeath",
"ArmyOfDarkness",
"Shrink",
"Transform",
"Transform",
"Transform",
"Transform",
"Transform",
"Transform",
"Transform",
"Transform",
"Transform",
"Transform",
"Transform",
"Transform",
"Charm",
"MasterOfDisaster",
"Deathbolt",
"Deathball",
"Concussionbolt",
"Light",
"Light",
"Light",
"Light",
"Light",
"Light",
"Thunderstorm",
"Whirlwind",
"Waterfist",
"IceLance",
"Sleep",
"Geyser",
"Firerain",
"Light",
"Light",
"Light",
"Fear",
"Swarm",
"Greententacle",
"Firerain",
"SummonGuardian",
"Energyball",
"SuckEnergy",
"Skull",
"SummonZombie",
"SummonMud",
"Transform",
"Light",
"Light",
"Light",
"Light",
"Light",
"Light",
"Light",
"Light",
"Light"
};

const string spellFxAniLetters[100] =
{
"SLE",
"HEA",
"FBT",
"HEA",
"FBT",
"HEA",
"FIB",
"HEA",
"HEA",
"HEA",
"HEA",
"HEA",
"HEA",
"HEA",
"HEA",
"HEA",
"HEA",
"HEA",
"SLE",
"FBT",
"FBT",
"HEA",
"SUM",
"FBT",
"FBT",
"SUM",
"WND",
"SLE",
"HEA",
"WND",
"FIB",
"SUM",
"FEA",
"FRZ",
"FIB",
"SUM",
"FIB",
"FIB",
"FIB",
"FEA",
"SUM",
"HEA",
"FEA",
"FIB",
"MSD",
"SUM",
"SLE",
"TRF",
"TRF",
"TRF",
"TRF",
"TRF",
"TRF",
"TRF",
"TRF",
"TRF",
"TRF",
"TRF",
"TRF",
"FIB",
"FIB",
"FBT",
"FBT",
"FBT",
"XXX",
"XXX",
"XXX",
"XXX",
"XXX",
"XXX",
"STM",
"WHI",
"WND",
"FBT",
"SLE",
"WND",
"FEA",
"XXX",
"XXX",
"XXX",
"FBT",
"FBT",
"FRZ",
"FEA",
"SUM",
"WND",
"WND",
"WND",
"SUM",
"SUM",
"TRF",
"XXX",
"XXX",
"XXX",
"XXX",
"XXX",
"XXX",
"XXX",
"XXX",
"XXX"
};



W const string spellFxInstanceNames zmieniłem "Light" na "Transform"
W const string spellFxAniLetters[100] zmieniłem "XXX" na "TRF",

Dzięki czemu po wybraniu zwoju w ręku Beziego jest właściwy efekt czaru przemiany

W Spell_ProcesMana.d na końcu dopisałem

Spoiler
        if(activeSpell == SPL_Reserved_90)
{
return Spell_Logic_Reserved_90(manaInvested);
};
return FALSE;


Po użyciu zwoju mana zostaje prawidłowo zużyta z zasobów many beziego.

W Spell_Transform.d wpisałem
Spoiler

const int SPL_Cost_TrfMeatBug = 10;  <----- To na początku pliku



func int Spell_Logic_Reserved_90(var int manaInvested)       <----- To na końcu pliku
{
if((Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll)) || (self.attribute[ATR_MANA] >= SPL_Cost_TrfMeatBug))
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_TrfMeatBug;
Npc_SetActiveSpellInfo(self,Meatbug);
return SPL_SENDCAST;
}
else
{
return SPL_SENDSTOP;
};
};



Dla pewności dodałem jeszcze w Spell_Transform_Alle.d
Spoiler

const int SPL_Cost_TrfMeatBug = 10; <----- To na początku pliku


func int Spell_Logic_Reserved_90 (var int manaInvested)      <----- To na końcu pliku
{
if ((Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll)))
|| (self.attribute[ATR_MANA] >= SPL_Cost_TrfMeatBug)
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_TrfMeatBug;

Npc_SetActiveSpellInfo(self, Meatbug);
return SPL_SENDCAST;
}
else
{
return SPL_SENDSTOP;
};
};



W pliku IT_Addon_Scrolls.d zdefiniowałem zwój
Spoiler
instance ItSc_TrfMeatBug(C_Item)
{
name = NAME_Spruchrolle;
mainflag = ITEM_KAT_RUNE;
flags = ITEM_MULTI;
value = Value_Sc_TrfMeatBug;
visual = "ItSc_TrfMeatBug.3DS";
material = MAT_LEATHER;
spell = SPL_Reserved_90;
cond_atr[2] = ATR_MANA_MAX;
cond_value[2] = SPL_Cost_Scroll;
wear = WEAR_EFFECT;
effect = "SPELLFX_WEAKGLIMMER";
description = NAME_SPL_Reserved_90;
text[0] = NAME_MageScroll;
text[1] = NAME_Mana_needed;
count[1] = SPL_Cost_Scroll;
text[5] = NAME_Value;
count[5] = value;
};



Już pomijam że w pliku Text.d wpisałem nazwy i opisy bo to szczegół.

2
Witam
Czy jest możliwość wyciągnięcia z G1 animacji jak Bezi zapala obozowe latarnie pochodnią ?
Bo w G2NK wstawiłem latarnie dałem w usewithitem ITLSTORCHBURNING ale przy próbie odpalenia nic się nie dzieje

3
Spacer / [G2NK] AbandonedMine.ZEN
« dnia: 2021-12-05, 07:27 »
Hmm, racja. Teraz zastanawiam się, skąd je wziąłem :D

Tego nie wiem. Ale nawet mając tego 3ds'a nie wiedziałbym zbytnio co z nim robić.
https://www.worldofgothic.de/?go=moddb&action=view&fileID=405&cat=18&page=2&order=0
Tu niby jest przekonwertowana kopalnia dla G2 ale to samo jest co z poprzednią wiec chyba guzik a nie przekonwertowana.

4
Spacer / [G2NK] AbandonedMine.ZEN
« dnia: 2021-12-04, 20:29 »
Wypakować z Meshes.vdf. Do operacji o których mowilem nie trzeba bledera.

W Meshes.vdf nie ma nic takiego jak AbandonedMine.3ds
Tak samo w Worlds.vdf

5
Spacer / [G2NK] AbandonedMine.ZEN
« dnia: 2021-12-04, 17:48 »
ZEN z WoGa na pewno działa pod G1, więc prawdopodobnie jest pod niego skompilowany. Próbowałeś zamiast tego otworzyć .3ds, potem w dwójce go skompilować jako indoor?
Druga kwestia: być może brak tekstur, albo są one inaczej nazwane w G1. Sprawdź w blenderze skąd model bierze tekstury i zobacz czy są takie pliki.

Zapewne masz rację ale na obsłudze blendera kompletnie się nie znam. I nie wiem nawet skąd wziąć tego całego 3ds'a  :hmmm:

6
Spacer / [G2NK] AbandonedMine.ZEN
« dnia: 2021-11-21, 08:47 »
Witam
Od kilku lat pracuje nad patchem do G2NK i chciałbym dodać możliwość wejścia do opuszczonej kopalni przy przechodzeniu do górniczej doliny. Pobrałem już ZENa z WoGa próbuje otworzyć Zena w Spacerze ale po wczytaniu jest cały czarny i widać tylko znaczniki świateł i waypointy nie widać co jest podłogą co sufitem i gdzie są ściany. Byłbym wdzięczny za pomoc bo nie wiem co z tym zrobić. Jak i późniejsze wskazówki które skrypty edytować aby mapa się poprawnie ładowała w grze.

Przejrzałem również poniższe wątki na forum ale niezbyt mi pomogły.
https://themodders.org/index.php?topic=29993.msg1353022#msg1353022
https://themodders.org/index.php?topic=25403.0
https://themodders.org/index.php?topic=17379.msg1039665#msg1039665

7
Animacje muszą mieć inne nazwy, jeśli nie chcesz nic nadpisywać. Poza tym, musisz je skompilować ponownie.

A to przypadkiem nie jest tak że Gothic sam przy ponownym uruchomieniu ich nie kompiluje ?  Poza tym nie mam ostępu do plików ASC z animacjami tylko do tych MRB czy jakoś tak które są już skompilowane w G1 i chciałem przenieść te pliki skompilowane z G1 do folderu w G2NK i nazwy im pozmieniać i wpisać nazwy tych animacji/plików w skrypcie rutyny ale nie działa próbowałem nawet przepisać te linijki z HumanS z G1 do G2 ale zauważyłem że one tam już zasadniczo są tylko w przypadku Pray to wykozystują inne pliki .asc przez co ta modlitwa do Innosa czy Beliara w kapliczkach to animacja na kolanach ze złożonymi rękami a ja chciałem po prosu tą animację medytacji nowicjuszy z bagna przypisać do rutyny która wykonuje się na FP

8
Witam chciałem przenieść rutynę medytacji nowicjuszy na bagnie do G2NK. Próbowałem przenosić plinki animacji z G1 do G2 kopiowałem rutynę ale NPC tylko stał i nic nie robił. Mam pytanie do ekspertów modowania czy da się  w ogóle przenieść taką rutynę wraz z animacjami do G2 ?  Z tego co widziałem to w G2 są już animacje o takich nazwach ale odpowiadają za modlitwę przy kapliczkach. Utworzenie nowej rutyny i przekopiowanie kodu tej rutyny z G1 do G2 to nie jest dla mnie problem ale zasadniczo nie wiem jak te animacje przenieść żeby te z G1 nie nadpisywały ty G2 i generalnie żeby przy tej rutynie ta animacja medytacji przy FP się wykonywała.

9
Skrypty / Greg i strażnik
« dnia: 2020-08-12, 18:43 »
Witam od jakiegoś czasu moduję hobbistycznie Gothica 2 NK i ostatnio napotkałem następujący problem.
Na początku gry mam już strój farmera od Lobarta i oddaje go Gregowi aby mógł wejść do miasta a następnie idę pod bramę obok Lothara  bez zbroi to strażnik mnie ignoruje i nie zaczepia i mogę wejść bez żadnej gadki do miasta. Gdy przed rozmową z Gregiem zdejmę strój rolnika a następnie w trakcie dialogu go mu przekaże to potem normalnie strażnik mnie zaczepia i jest wszystko ok. Ale gdy mam założony strój rolnika i rozmawam z Gregiem to występuje ten wyżej wymieniony bug.

Ktoś ma pomysł co to może być ????   :hmmm:

Przyznam się że samemu próbowałem to jakoś korygować w dialogach Grega i strażnika przy bramie ale bez rezultatów.
Myslałem czy nie ma to przypadkiem jakiegoś związku

AI_StopProcessInfos(self);

albo


B_GiveInvItems(other,self,ITAR_Bau_L,1);


Tak jakby strażnik nie mógł załapać że nie mam już stroju farmera
 i mimo że nie mam już go w ekwipunku to gra w dialogu strażnika myśli że jeszcze mam ale nie może go wykryć i się buguje dialog. Takie mam przypuszczenia

Mój problem przypomina trochę problem z tego tematu: http://themodders.org/index.php?topic=29895.msg1349982#msg1349982

Umieszczam jeszcze fragmenty kodu dialogów Grega i Strażnika bramy


instance DIA_Addon_Greg_NW_Stadtwachen(C_Info)
{
npc = PIR_1300_Addon_Greg_NW;
nr = 5;
condition = DIA_Addon_Greg_NW_Stadtwachen_Condition;
information = DIA_Addon_Greg_NW_Stadtwachen_Info;
permanent = TRUE;
description = "Jeśli chodzi o strażników...";
};


func int DIA_Addon_Greg_NW_Stadtwachen_Condition()
{
if((MIS_Addon_Greg_BringMeToTheCity == LOG_Running) && (GregLocation == Greg_Farm1))
{
return TRUE;
};
};


var int DIA_Addon_Greg_NW_Stadtwachen_ChoiceClose_geld;
var int DIA_Addon_Greg_NW_Stadtwachen_ChoiceClose_Schein;
var int DIA_Addon_Greg_NW_Stadtwachen_ChoiceClose_constantino;

func void DIA_Addon_Greg_NW_Stadtwachen_Info()
{
AI_Output(other,self,"DIA_Addon_Greg_NW_Stadtwachen_15_00"); //Jeśli chodzi o strażników...
AI_Output(self,other,"DIA_Addon_Greg_NW_Stadtwachen_01_01"); //Tak. Masz jakiś pomysł?
Info_ClearChoices(DIA_Addon_Greg_NW_Stadtwachen);
Info_AddChoice(DIA_Addon_Greg_NW_Stadtwachen,"Będę musiał o tym pomyśleć.",DIA_Addon_Greg_NW_Stadtwachen_nochnicht);
if(DIA_Addon_Greg_NW_Stadtwachen_ChoiceClose_geld == FALSE)
{
Info_AddChoice(DIA_Addon_Greg_NW_Stadtwachen,"A może spróbujesz łapówki?",DIA_Addon_Greg_NW_Stadtwachen_geld);
};
if((DIA_Addon_Greg_NW_Stadtwachen_ChoiceClose_Schein == FALSE) && Npc_HasItems(other,ItWr_Passierschein))
{
Info_AddChoice(DIA_Addon_Greg_NW_Stadtwachen,"Mam przepustkę do miasta.",DIA_Addon_Greg_NW_Stadtwachen_Schein);
};
if((MIS_Addon_Lester_PickForConstantino != 0) && (DIA_Addon_Greg_NW_Stadtwachen_ChoiceClose_constantino == FALSE))
{
Info_AddChoice(DIA_Addon_Greg_NW_Stadtwachen,"Do miasta mogą wejść zbieracze ziół.",DIA_Addon_Greg_NW_Stadtwachen_constantino);
};
if(Npc_HasItems(other,ITAR_Bau_L) || Npc_HasItems(other,ITAR_Bau_M))
{
Info_AddChoice(DIA_Addon_Greg_NW_Stadtwachen,"Powinni cię wpuścić, jeśli założysz ten strój rolnika.",DIA_Addon_Greg_NW_Stadtwachen_klamotten);
};
};

func void DIA_Addon_Greg_NW_Stadtwachen_klamotten()
{
var C_Item itm;
itm = Npc_GetEquippedArmor(other);
AI_Output(other,self,"DIA_Addon_Greg_NW_Stadtwachen_klamotten_15_00"); //Powinni cię wpuścić, jeśli założysz ten strój rolnika.

if(Npc_HasItems(other,ITAR_Bau_L))
{
if(Npc_HasEquippedArmor(other) == FALSE)
{
AI_UnequipArmor (other);
}
else if((Hlp_IsItem(itm,ITAR_Bau_L) == TRUE) || (Hlp_IsItem(itm,ITAR_Bau_M) == TRUE))
{
AI_UnequipArmor (other);
};
B_GiveInvItems(other,self,ITAR_Bau_L,1);

}
else
{
if(Npc_HasEquippedArmor(other) == FALSE)
{
AI_UnequipArmor (other);
}
else if((Hlp_IsItem(itm,ITAR_Bau_L) == TRUE) || (Hlp_IsItem(itm,ITAR_Bau_M) == TRUE))
{
AI_UnequipArmor (other);
};
B_GiveInvItems(other,self,ITAR_Bau_M,1);
};
AI_Output(self,other,"DIA_Addon_Greg_NW_Stadtwachen_klamotten_01_01"); //Tego mi właśnie trzeba. Wiedziałem, że mogę na ciebie liczyć.
AI_Output(self,other,"DIA_Addon_Greg_NW_Stadtwachen_klamotten_01_02"); //Nikt na mnie nie zwróci uwagi, jeśli przebiorę się za wsiowego głupka. Ha, ha!
if(Npc_HasItems(self,ITAR_Bau_L))
{
AI_EquipArmor(self,ITAR_Bau_L);
}
else
{
AI_EquipArmor(self,ITAR_Bau_M);
};
AI_Output(self,other,"DIA_Addon_Greg_NW_Stadtwachen_klamotten_01_03"); //Doskonale. Dobrze się spisałeś. Oto obiecana zapłata.
CreateInvItems(self,ItMi_Gold,50);
B_GiveInvItems(self,other,ItMi_Gold,50);
B_GivePlayerXP(XP_Greg_NW_GiveBauArmor);
AI_Output(other,self,"DIA_Addon_Greg_NW_Stadtwachen_klamotten_15_04"); //Co? Nędzne 50 złotych monet? Chyba żartujesz.
AI_Output(self,other,"DIA_Addon_Greg_NW_Stadtwachen_klamotten_01_05"); //Złoto to nie wszystko, przyjacielu. Niech ci to na razie wystarczy.
AI_Output(self,other,"DIA_Addon_Greg_NW_Stadtwachen_klamotten_01_06"); //Mam przeczucie, że wkrótce się spotkamy.
AI_Output(self,other,"DIA_Addon_Greg_NW_Stadtwachen_klamotten_01_07"); //I kto wie? Mogę być wtedy bardziej szczodry. Trzymaj się.
AI_StopProcessInfos(self);
if(Npc_KnowsInfo(other,DIA_Lothar_Hallo))
{
Npc_ExchangeRoutine(self,"Markt");
};
B_LogEntry(TOPIC_Addon_Greg_NW,"Dałem mu ubranie farmera. Może ominąć strażników w przebraniu.");
MIS_Addon_Greg_BringMeToTheCity = LOG_SUCCESS;
};











const string Mil_310_Checkpoint = "NW_CITY_ENTRANCE_MAIN";


var int MIL_310_Personal_AbsolutionLevel;

instance DIA_Mil_310_Stadtwache_FirstWarn(C_Info)
{
npc = Mil_310_Stadtwache;
nr = 1;
condition = DIA_Mil_310_Stadtwache_FirstWarn_Condition;
information = DIA_Mil_310_Stadtwache_FirstWarn_Info;
permanent = TRUE;
important = TRUE;
};


func int DIA_Mil_310_Stadtwache_FirstWarn_Condition()
{
if(Npc_GetDistToWP(other,Mil_310_Checkpoint) <= 700)
{
Npc_SetRefuseTalk(self,5);
return FALSE;
};
if((B_GetGreatestPetzCrime(self) >= CRIME_ATTACK) && (B_GetCurrentAbsolutionLevel(self) == MIL_310_Personal_AbsolutionLevel))
{
self.aivar[AIV_PASSGATE] = FALSE;
}
else if(Mil_310_schonmalreingelassen == TRUE)
{
self.aivar[AIV_PASSGATE] = TRUE;
};
if((self.aivar[AIV_Guardpassage_Status] == GP_NONE) && (self.aivar[AIV_PASSGATE] == FALSE) && (Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == TRUE) && (Npc_RefuseTalk(self) == FALSE))
{
return TRUE;
};
};

func void DIA_Mil_310_Stadtwache_FirstWarn_Info()
{
var C_Item itm;
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_00"); //STAĆ!
if(B_GetGreatestPetzCrime(self) >= CRIME_ATTACK)
{
AI_Output(other,self,"DIA_Mil_310_Stadtwache_FirstWarn_15_01"); //O co chodzi?
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_02"); //Dobrze wiesz o co!
if(B_GetGreatestPetzCrime(self) == CRIME_MURDER)
{
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_03"); //Jesteś poszukiwany w mieście za morderstwo.
};
if(B_GetGreatestPetzCrime(self) == CRIME_THEFT)
{
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_04"); //Nie potrzebujemy to żadnych brudnych złodziei!
};
if(B_GetGreatestPetzCrime(self) == CRIME_ATTACK)
{
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_05"); //Nie trzeba nam w mieście pieniaczy!
};
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_06"); //Dlaczego mielibyśmy cię wpuścić?
}
else
{
itm = Npc_GetEquippedArmor(other);
if((Npc_HasEquippedArmor(other) == FALSE) && (hero.guild == GIL_NONE))
{
AI_Output(other,self,"DIA_Mil_310_Stadtwache_FirstWarn_15_07"); //A dlaczego nie?
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_08"); //TY tu nie wejdziesz, chłopcze!
AI_Output(other,self,"DIA_Mil_310_Stadtwache_FirstWarn_15_09"); //Dlaczego nie?
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_10"); //Już po twoim obszarpanym wyglądzie widzę, że jedyne co ze sobą przynosisz to kłopoty.
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_11"); //W mieście mamy już dostatecznie dużo kłopotów. Nie ma tu miejsca dla ludzi bez pieniędzy.
if((MIS_EnterCity != LOG_Running) && ((Npc_KnowsInfo(other,DIA_Maleth_ToTheCity)) == FALSE))
{
MIS_EnterCity = LOG_Running;
Log_CreateTopic(TOPIC_City,LOG_MISSION);
Log_SetTopicStatus(TOPIC_City,LOG_Running);
B_LogEntry(TOPIC_City,"Strażnicy strzegący bram miasta nie wpuszczą mnie, jeśli będę wyglądał jak nędzarz. Muszę zrobić coś ze swoim wyglądem albo poszukać innej drogi do miasta.");
};

}
else if((Hlp_IsItem(itm,ITAR_Bau_L) == TRUE) || (Hlp_IsItem(itm,ITAR_Bau_M) == TRUE))
{
if(self.aivar[AIV_TalkedToPlayer] == TRUE)
{
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_12"); //Czego chcesz tym razem?
AI_Output(other,self,"DIA_Mil_310_Stadtwache_FirstWarn_15_13"); //Przysłano mnie z farmy.
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_14"); //No proszę? Czyżbyś w końcu miał jakiś dobry powód, by się tu pojawiać?
}
else
{
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_15"); //Jesteś jednym z pomocników z farmy Lobarta? Nigdy cię tu nie widziałem!
AI_Output(other,self,"DIA_Mil_310_Stadtwache_FirstWarn_15_16"); //Od niedawna pracuję dla Lobarta.
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_17"); //Co sprowadza cię do miasta?
};
}
else
{
AI_Output(other,self,"DIA_Mil_310_Stadtwache_FirstWarn_15_18"); //Słucham?
if((hero.guild == GIL_PAL) || (hero.guild == GIL_KDF))
{
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_19"); //Wybacz, ale takie mam rozkazy.
AI_Output(other,self,"DIA_Mil_310_Stadtwache_FirstWarn_15_20"); //Czyżbyś chciał mnie zatrzymać?
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_21"); //Gdzieżbym śmiał. Wszyscy członkowie kościoła Innosa są mile widziani.
}
else
{
AI_Output(self,other,"DIA_Mil_310_Stadtwache_FirstWarn_07_22"); //Chciałem ci się tylko przyjrzeć. Wygląda na to, że masz pieniądze. Możesz wejść.
};
self.aivar[AIV_PASSGATE] = TRUE;
Stadtwache_333.aivar[AIV_PASSGATE] = TRUE;
Mil_310_schonmalreingelassen = TRUE;
if(MIS_EnterCity == LOG_Running)
{
Wld_SendTrigger("CITY_DOWNTOWN_GATE_01");
Wld_SendTrigger("CITY_DOWNTOWN_GATE_02");
MIS_EnterCity = LOG_SUCCESS;
B_LogEntry(TOPIC_City,"Strażnicy wpuścili mnie do miasta.");
}
else if (Temp_GateCity1 == FALSE)
{
Temp_GateCity1 = TRUE;
Wld_SendTrigger("CITY_DOWNTOWN_GATE_01");
Wld_SendTrigger("CITY_DOWNTOWN_GATE_02");
};
B_CheckLog();
AI_StopProcessInfos(self);
};
};
other.aivar[AIV_LastDistToWP] = Npc_GetDistToWP(other,Mil_310_Checkpoint);
self.aivar[AIV_Guardpassage_Status] = GP_FirstWarnGiven;
};




10
Skrypty / Skrypt Strażnik pilnujący kołowrotu
« dnia: 2020-06-06, 08:32 »
@pawbuj jak wspomniałem wcześniej dodawałem fotel obok kołowrotu i potem był on w nowej grze czyli zmiany na mapie są zapisywane. Ścieżka funkcji jest wpisana w gothic.src bo gdyby nie była to parser by mi wywalał błąd. Zmieniłem tylko nazwę funkcji w pliku z
func void PalProcetctGate() 
na
func void PalProcetctGate_S1()
i nic to nie zmieniło funkcja dalej nie działa  wiec nie jest to takie proste jak się wydaje bo gdyby było to już dawno by wszystko działało

Post połączony: 2020-06-06, 09:54
Udało mi się wreszcie po tygodniu grzebania działa musiałem to oskryptować jako event ale działa strażnik atakuje i mówi  :D


Temat do Zamknięcia

11
Skrypty / Skrypt Strażnik pilnujący kołowrotu
« dnia: 2020-06-05, 18:02 »
@pawbuj  Czyli według tego powinienem zmienić: ?? 
- nazwę funkcji tylko w pliku
- czy też zmienić całą nazwę pliku z funkcją 
- czy zmienić jeszcze nazwę funkcji w spacerze w mobie przy  onstateFunc z PalProcetctGate   na PalProcetctGate_S1 ????

Post połączony: 2020-06-05, 18:56
@pawbuj  zmieniłem treść funkcji dopisując w definicji _S1   nic to nie dało funkcja dalej nie działa

A jeśli chodzi o teorię o formaty visuali i działanie funkcji onStateFunc to sugerowałem się tym tematem
http://themodders.org/index.php?topic=30147.msg1356414#msg1356414     
oraz  tym  tematem
http://themodders.org/index.php?topic=30459.msg1362654#msg1362654

12
Skrypty / Skrypt Strażnik pilnujący kołowrotu
« dnia: 2020-06-05, 16:46 »
@pawbuj  być może ale gdy sprawdzałem teorię z formatami visuali centralnie wstawiłem fotel obok kołowrotu i przypisałem tam funkcję i odpaliłem nową grę i fotel tam był i zasaidłem na nim i też nic. Spróbuje jeszcze skompilować/zreprasować dialogi na nowo ale raczej to nic nie da

Post połączony: 2020-06-05, 16:57
Żeby rozwiać wątpliwości chcę wywołać reakcję NPC    Pal_210_Torwache który jest typu npcType = NPCTYPE_AMBIENT;
na użycie kołowrotu bramy w G2NK
 
Moja funkcja wygląda tak
func void PalProcetctGate()
{
PrintScreen  ("Test działania funkcji", -1,-1,FONT_Screen,3);
B_Say_Overlay(GuardPaladyn,hero,"$HANDSOFF");
B_Say_Overlay(GuardPaladyn,hero,"$GETOUTOFHERE");
B_Attack(GuardPaladyn,hero,AR_UseMob,0);


};

aktualnie plik z kodem funkcji jest   Story\Dialog_Mobsis\PalProcetctGate.d
i jest wpisany w pliku Gothic.src na końcu aby wszystkie potrzebne funkcje były załadowane
w pliku NPC_Globals  dołączyłem linijkę  GuardPaladyn = Hlp_GetNpc(Pal_210_Torwache);

w kołowrocie w spacerze jest wpisane  onStateFunc:PalProcetctGate     owner:Pal_210_Torwache    ownerGuild:GIL_PAL
mapa jest zapisana i wrzucona w odpowiednim miejscu teraz jeszcze dla 100% pewności zreprasuje dialogi

NIE korzystam z żadnych Icarusów czy innych LeGo

13
Skrypty / Skrypt Strażnik pilnujący kołowrotu
« dnia: 2020-06-03, 20:20 »
@Splash  Oczywiście że sprawdzam na nowej grze i reprasuje nowe skrypty za każdym razem.

@Patrix9999  Pogrzebałem trochę i z tego co się dowiedziałem to skrypt nie będzie działał gdyż jest przypisany do voba/moba który ma visuala w formacie .mds  a  przypisywanie funkcji działa tylko na voby o visualach  w formacie .ASC

Ale wpadł mi do głowy inny pomysł. Gdzieś czytałem że jest taka funkcja w G2NK która sprawdza czy dany Vob jest zajęty/używany  jeśli ma przypisaną indywidualną nazwę.  Co gdyby napisać funkcję która by sprawdzała czy ten konkretny kołowrót jest używany i jeśli jest używany do wywoływała by krzyk i atak strażnika. Wtedy ominął bym problem przypisywania funkcji w spacerze wystarczyło by że dałbym unikalną nazwę dla tego kołowtrotu w spacerze. Tylko gdzie by trzeba było wpisać wywołanie takiej funkcji żeby ona sprawdzała ciągle czy ten vob jest zajęty np. gdy Hero jest na mapie NewWorld.zen ????   Hmm... w Startupie czy gdzie ???

Edit: Znalazłem tą funkcję w Externals.d   to 
FUNC INT  Wld_IsMobAvailable   (VAR C_NPC self, VAR STRING schemeName) {};

Sprawdziłem teorię z formatami visuali niestety nawet na fotelu który ma visual w formacie .ASC dalej funkcja nie jest wywoływana. Kowadło ma visual w formacie .mds a jednak ma przypisaną funkcję a dokładnie monolog który jakoś działa wiec ostatecznie nie wiem co robię źle  :hmmm:

14
Skrypty / Skrypt Strażnik pilnujący kołowrotu
« dnia: 2020-06-02, 20:37 »
@Patrix9999  No w Spacerze w onStateFunc dałem B_PalProcetctGate a w definicji jest  B_PalProcetctGate() dałem bez nawiasów ale chyba tak trzeba jak patrzyłem jak pulpity z książkami są zdefiniowane to też w Spacerze te funkcje są bez nawiasów. Wiec nie mam pomysłu co mogłem zrobić źle

15
Skrypty / Skrypt Strażnik pilnujący kołowrotu
« dnia: 2020-06-02, 19:37 »
@Patrix9999  Przypisałem do funkcji    PrintScreen  ("Test działania funkcji", -1,-1,FONT_Screen,3);     i pomimo tego nic nie wyświetla ani nie działa po użyciu kołowrotu

16
Skrypty / Skrypt Strażnik pilnujący kołowrotu
« dnia: 2020-06-02, 18:29 »
@Patrix9999  Tu masz rację mój skrypt jest w Story\B_Content\B_PalProcetctGate.d linia 36 a b_say  AI\Human\B_Human\B_Say_Overlay.d  linia 49     

Przesunąłem kolejność ładowania skryptu w Gothic.src i wszystko się skompilowało.
Przypisałem funkcję do kołowrotu jednak po użyciu kołowrotu strażnik nie reaguje.

To kod mojej funkcji 

func void B_PalProcetctGate()
{

B_Say_Overlay(GuardPaladyn,hero,"$HANDSOFF");
B_Say_Overlay(GuardPaladyn,hero,"$GETOUTOFHERE");
B_Attack(GuardPaladyn,hero,AR_UseMob,0);


};

17
Skrypty / Skrypt Strażnik pilnujący kołowrotu
« dnia: 2020-06-02, 17:00 »

Póki co w ogóle zignorowałeś fakt, że istnieje zmienna dynamicznie przypisywana o nazwie hero.
Już pomijając ten fakt, że dalej na siłę używasz self, other, nie podałeś też co ci wywala parser, zbytnio bez konkretnego błędu nikt ci nie pomoże, błędy parser pokazuje po to, by je poprawić, a nie zignorować.


Dopisałem tego Paladyna w Content/Story/Npc_Globals.d jako GuardPaladyn
Testowo wrzuciłem do funkcji tylko taki kod

         B_Say_Overlay(GuardPaladyn,hero,"$HANDSOFF");
B_Say_Overlay(GuardPaladyn,hero,"$GETOUTOFHERE");
B_Attack(GuardPaladyn,hero,AR_UseMob,0);


@Patrix9999  Parser wyrzuca mi unknown identifier w linii B_Say_Overlay  a co do Content/_Intern/Classes.d to widzę tam tylko "prototypy" (chyba takie jest na to określenie, nie jestem pewny nie jestem programistą)  klas C_Npc , C_Mission ..... itd. a instancja hero jest pusta.



W bardzo prosty sposób bez specjalnego kombinowania w skryptach.  W spacerze klikasz na dany kołowrót i wpisujesz instancję NPC w opcji "owner," jeżeli chcesz aby inni strąznicy też reagowali to wpisujesz dla "ownerguild" na przykład GIL_GRD. To samo można zrobić z itemami rozrzuconymi po świecie.  Najprostsze metody są czasami najskuteczniejsze :)


@pawbuj  Czytałem o tych parametrach Vobów w Spacerze na forum  przez pewien czas o tym ale z tego co pisali to te funkcje miały być w Spacerze ale ostateczenie ich nie zaimplementowano i zostały tylko jako pola formularza właściwości Vobów w Spacerze.  Nie wiem ile w tym prawdy bo nie testowałem nigdy tych parametrów skoró pisali że i tak nie działają.  :hmmm:

@pawbuj  Gdyby użyć "owner"  i "ownerguild" wywoływało by to takie same reakcje NPC jak wejścia na cudzy teren czy grzebania w cudzej skrzyni ???????    (Chodzi mi o te reakcje głosowe na zachowanie gracza wywoływane przez B_Say_Overlay w różnych sytuacjach)


18
Skrypty / Skrypt Strażnik pilnujący kołowrotu
« dnia: 2020-06-02, 07:26 »
Znalazłem jedynie coś takiego
var C_NPC her;
her = Hlp_GetNpc(PC_Hero);
if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
{
           coś tam robi
         };

Jedyny jaki mam pomysł to


func void B_PalProcetctGate()
{

        var C_Npc her;
  her = Hlp_GetNpc(Pal_210_Torwache);

        if (Hlp_GetInstanceID (slf) == Hlp_GetInstanceID(her) )
{

B_Say_Overlay(self,other,"$HANDSOFF");
B_Say_Overlay(self,other,"$GETOUTOFHERE");
B_Attack(self,other,AR_UseMob,0);


};

         };


Ale i tak mi się wysypuje przy prasowaniu skryptów przy funkcji B_Say_Overlay
Próbowałem też zamieniać i pisać w funkcji   B_Say_Overlay(self,other,"$HANDSOFF"); zamiast self i other to slf , hero , Pal_210_Torwache w różnych kombinacjach ale i tak nic nie działa, nie wiem jak funkcji przypisać że  w miejscu self ma być    Pal_210_Torwache    a  w miejscu   other   ma być    hero

19
Skrypty / Skrypt Strażnik pilnujący kołowrotu
« dnia: 2020-06-01, 21:04 »
Witam mam taki problem. Chciałbym w G2NK do konkretnego kołowrotu przy pomocy onStateFunc w Spacerze przypisać funkcję. Owa funkcja miałaby po użyciu przez Hero kołowrotu powodować że stojący obok strażnik  (dokładnie Pal_210_Torwache który jest NPCTYPE_AMBIENT ) krzyknał by łąpy precz i wynoś się stąd  przy użyciu B_Say_Overlay(self,other,"$HANDSOFF"); i B_Say_Overlay(self,other,"$GETOUTOFHERE"); a następnie atakował by gracza  B_Attack(self,other,AR_UseMob,0); Cały sęk polega na tym że nie wiem jak przypisać / przekazać aby po użyciu kołowrotu TEN konkretny NPC to powiedział i zaatakował bohatera który używa kołowrotu. Jak skonstruować tą funkcję.  :hmmm:

20
Od niedawna mam ten sam problem ze Spacerem przy zapisywaniu NewWorld.Zen który był edytowany Spacer się wysypuje. Przy zapisywaniu mniejszych map jak OldWorld.Zen nie ma żadnego problemu. Kiedy próbuję zapisać poprzedni NewWorld.Zen nie edytując niczego nowego Spacer również normalnie go zapisuje. Dla jasności zapisuje nowe mapy na innym dysku aby nie nadpisywać starych plików w folderze Worlds. Uruchamiam Spacera z prawami administratora. Przez 3 lata działało dobrze dopiero ostatnio zaczęło się wysypywać.  Czy można coś na to poradzić ?

Strony: [1] 2 3
Do góry