|
-
Zitat von Lehona
Dankeschön, habe ich direkt gemerget. Ich denke grundsätzlich würde ich keine Collaboratoren hinzufügen, wenn nicht eine längerfristige Weiterentwicklung geplant ist. Für fast alles andere reichen ja auch PRs.
Klar. Ich hatte nur ein Brett vorm Kopf und habe nicht realisiert, dass PR auch über Forks gehen und ich nicht zwingend die Rechte Brauche für Branches.
-
Mit gemeinsamem Einsatz wurde nun Ikarus auf Version 1.2.1 aktualisiert. Die Änderungen sind minimal gehalten, um das Paket so zu belassen wie wir es kennen. Danke an alle, die mitgeholfen haben!
Folgende Verbesserungen wurden eingebaut:
- LAA-Fix, um Ikarus mit dem 4GB-Patch kompatibel zu machen - von Neconspictor
- zCCamera Klasse für Gothic 1 verifiziert - von withmorten
- Weitere Klassen für Gothic 1 vervollständigt/korrigiert
- zTimer-Adresse für Gothic 1 korrigiert
- Absturz bei Error-Box unter Gothic 1 behoben (zuvor in LeGo enthalten, seit LeGo 2.5.0)
- SRC-Dateien für einfacheres Einbinden hinzugefügt
Fürs Arbeiten mit Ikarus ändert sich dadurch nichts.
Wie oben erwähnt, reicht ab nun eine einzige Zeile in der Gothic.src, um Ikarus einzubinden (siehe unten). Die bisherige Art und Weise funktioniert aber natürlich nach wie vor.
Code:
_INTERN\INTERN.SRC
_INTERN\MAGIC_INTERN.D
Ikarus/Ikarus_G1.src
...
bzw.
Code:
_INTERN\CONSTANTS.D
_INTERN\CLASSES.D
IKARUS\Ikarus_G2.src
...
Heruntergeladen können die Skripte zu Ikarus 1.2.1 hier: https://github.com/Lehona/Ikarus/releases/tag/v1.2.1
Ich würde an dieser Stelle einen Moderatoren bitten, den Einleitungspost vom Ikarus-Thread mit dem Download-Link zur Version 1.2.1 zu ergänzen. Vielen Dank!
-
Zitat von mud-freak
Ich würde an dieser Stelle einen Moderatoren bitten, den Einleitungspost vom Ikarus-Thread mit dem Download-Link zur Version 1.2.1 zu ergänzen. Vielen Dank!
erledigt.
Danke euch allen für die Arbeit, die in Version 1.2.1 geflossen ist, um Fehler zu beheben und die Funktionalität für Gothic 1 zu vervollständigen!
-
Ergänzung zu dieser alten Anleitung:
Manche Programme können/wollen die in der EXE enthaltenen CodeView-Debug-Informationen nicht lesen und benötigen eine eigene DBG-Datei. Ich habe mit REBASE aus MSVC6SP6 die Daten entsprechend getrennt und hier abgelegt: http://www.bendlins.de/nico/gothic/misc/dbg/
Ist also nur für Nachforschungen interessant :-)
ps: die *.cvdump.gp.txt wurden mit der cvdump -g -p *.dbg erzeugt
"Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
Geändert von NicoDE (08.02.2019 um 12:59 Uhr)
-
Danke für die Arbeit
-
Question : is there any possibility to add automatic SVM "$NotNow" to all NPCs who have only one dialog option "THE END" . That will save a time while talking to lot of NPCs who have nothing interesting to say.
With standard scripts there is no possibility to do this.
-
G1 don't talk if you don't have anything to say
Zitat von pawbuj
Question : is there any possibility to add automatic SVM "$NotNow" to all NPCs who have only one dialog option "THE END" . That will save a time while talking to lot of NPCs who have nothing interesting to say.
With standard scripts there is no possibility to do this.
Hi pawbuj,
Code:
FUNC INT oCInfoManager_GetInfoCount (var int npcInstance, var int herInstance) //oCInfo *
{
//00664A30 .text Debug data ?GetInfoCount@oCInfoManager@@QAEHPAVoCNpc@@0@Z
const int oCInfoManager__GetInfoCount_G1 = 6703664;
//0x00702940 public: int __thiscall oCInfoManager::GetInfoCount(class oCNpc *,class oCNpc *)
const int oCInfoManager__GetInfoCount_G2 = 7350592;
var int oCInfoManager__GetInfo;
oCInfoManager__GetInfo = MEMINT_SwitchG1G2(oCInfoManager__GetInfoCount_G1, oCInfoManager__GetInfoCount_G2);
var oCNpc slf; slf = Hlp_GetNpc (npcInstance);
var oCNpc her; Her = Hlp_GetNpc (herInstance);
CALL_PtrParam (MEM_InstToPtr (slf));
CALL_PtrParam (MEM_InstToPtr (Her));
CALL__thiscall (MEM_Game.infoman, oCInfoManager__GetInfo);
return CALL_RetValAsPtr();
};
FUNC INT oCInfoManager_GetInfo (var int npcInstance, var int herInstance, var int index) //oCInfo *
{
//00664E50 .text Debug data ?GetInfo@oCInfoManager@@QAEPAVoCInfo@@PAVoCNpc@@0H@Z
const int oCInfoManager__GetInfo_G1 = 6704720;
//0x00702D60 public: class oCInfo * __thiscall oCInfoManager::GetInfo(class oCNpc *,class oCNpc *,int)
const int oCInfoManager__GetInfo_G2 = 7351648;
var int oCInfoManager__GetInfo;
oCInfoManager__GetInfo = MEMINT_SwitchG1G2(oCInfoManager__GetInfo_G1, oCInfoManager__GetInfo_G2);
var oCNpc slf; slf = Hlp_GetNpc (npcInstance);
var oCNpc her; Her = Hlp_GetNpc (herInstance);
CALL_IntParam (index);
CALL_PtrParam (MEM_InstToPtr (slf));
CALL_PtrParam (MEM_InstToPtr (Her));
CALL__thiscall (MEM_Game.infoman, oCInfoManager__GetInfo);
return CALL_RetValAsPtr();
};
Adjust B_AssessTalk a little bit:
Code:
func void B_AssessTalk()
{
var C_Npc her;
var C_Npc rock;
//---
var int infoCount;
infoCount = oCInfoManager_GetInfoCount (self, other);
if (infoCount == 0)
{
B_SayOverlay (self, other, "$NOTNOW");
return;
};
if (infoCount == 1)
{
var int infoPtr;
infoPtr = oCInfoManager_GetInfo (self, other, 0);
if (infoPtr)
{
var oCInfo dlgInstance;
dlgInstance = _^ (infoPtr);
if (Hlp_StrCmp (dlgInstance.description, DIALOG_ENDE))
{
B_SayOverlay (self, other, "$NOTNOW");
return;
};
};
};
//---
if(Npc_IsInState(self,ZS_Smoke))
{
Npc_ClearAIQueue(self);
AI_StandupQuick(self);
AI_StartState(self,ZS_Talk,0,"");
}
else if(C_BodyStateContains(self,BS_MOBINTERACT))
{
return;
};
her = Hlp_GetNpc(PC_Hero);
rock = Hlp_GetNpc(PC_Rockefeller);
if((Hlp_GetInstanceID(her) != Hlp_GetInstanceID(hero)) && (Hlp_GetInstanceID(rock) != Hlp_GetInstanceID(hero)))
{
B_Say(self,other,"$NOTNOW");
}
else
{
Npc_SetPercTime(self,3);
self.aivar[AIV_INVINCIBLE] = FALSE;
hero.aivar[AIV_INVINCIBLE] = FALSE;
hero.aivar[AIV_IMPORTANT] = FALSE;
Npc_ClearAIQueue(self);
Npc_SetPercTime(self,1);
if(!C_BodyStateContains(self,BS_SIT) || !Npc_CanSeeNpc(self,hero))
{
AI_StartState(self,ZS_Talk,1,"");
}
else
{
AI_StartState(self,ZS_Talk,0,"");
};
};
};
Geändert von F a w k e s (08.02.2019 um 12:39 Uhr)
-
I have just modify a bit that part. And works better.
Code:
if (infoCount == 0)&&(self.npcType != npctype_ambient)
{
B_SayOverlay (self, other, "$NOTNOW");
//Print ("Działa");
return;
};
Question :have u check the script from mudfreak regarding mob state ? do u have the same bug with stucking NPCs while using mob inter?
https://dump.video/i/Far4w4.mp4
Geändert von pawbuj (08.02.2019 um 16:45 Uhr)
-
Wir hatten hier doch mal irgendwo eine Funktion, mit der man Strings dauerhaft speichern konnte. Hat die jemand gesehen? Oder ist das LeGo only? Ich möchte das benennen von Tieren ermöglichen und habe noch keine Möglichkeit gefunden, diese Namen dauerhaft zu speichern. self.name wird bei jedem Ladevorgang neu beschrieben, self.spawnpoint wird geleert und self.name1 - 4 sind eigentlich unbrauchbar, da das System mir sofort sagt, C_NPC hätte die Eigenschaft name1 gar nicht...
Außerdem habe ich das Problem, dass man bei der Eingabe des Namens immer automatisch das Charaktermenü oder Logbuch aufmacht, was ja eigentlich nicht soll. Will ja nicht, dass für das Tippen des Buchstabens "N" immer alles umgestellt werden muss.
"Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
-Korallenkette
-
Is there any method to count lock combination string ?
Just like f.e. LRRRR is 5 figures, so "this lock is 5 - figures combination".
Geändert von pawbuj (12.02.2019 um 13:05 Uhr)
-
oCMobLockable has the string pickLockStr.
-
Code:
var int totCharCount; totCharCount = STR_Len (OpenLock_Lockable.pickLockStr);
-
Zitat von Cryp18Struct
oCMobLockable has the string pickLockStr.
i know how to print this string, but it needs to be display as one number, f.e. 5 in this case.
var int totCharCount; totCharCount = STR_Len (OpenLock_Lockable.pickLockStr);
ok will test! thanks.
-
Ok, that is the last request.
Code:
/*0x6240*/ var string worldFilename; //zSTRING Pfad des aktuellen Levels
/*0x6254*/ var string worldName; //zSTRING Name des aktuellen Levels
One of these strings seems to be resnposible for current level name, but zSpy has informed as unknown ideintifier. Try to display them by Print(ConcatString(var string)); Anybody knows how to check currentlevel name ?
-
-
Zitat von Fisk2033
Try "CurrentLevel"
"currentlevel" is not a string.
I tried to combine with oWorld. worldName or oWorld.worldFileName.;
no success.
-
This works in g2(if MEM_World has been initialized with MEM_InitGlobalInst() or MEM_InitAll()):
Code:
print(MEM_World.worldName);
-
Neuling
Hello! I have a few questions about using Ikarus. First I need it how to check inventory is open, but standart bodystate check BS_INVENTORY don't work. How check it with Ikarus?
-
Maybe "MEM_KeyPressed(MEM_GetKey ("keyInventory"))" helps?
-
Neuling
Zitat von Fisk2033
Maybe "MEM_KeyPressed(MEM_GetKey ("keyInventory"))" helps?
It's work always after closing inventory and sometimes before opening. Not exactly what I need.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|
|