Диккен
Участник форума
- Регистрация
- 12 Июн 2004
- Сообщения
- 469
- Благодарности
- 127
- Баллы
- 210
Про ключи
Ключи, к. лежат на земле нужно использовать через инвентарь.
Ключи, к. воруем нужно использовать через инвентарь.
Ключи, к. подбираем при обыске исчезнут автоматом.
Инструкция
1. Подойти к сундуку, открыть рюкзак, использовать связку ключей (или вызвать карту, в случае замещения функции карты).
2. Открыть рюкзак и использовать связку ключей повторно, ключи исчезнут (или вызвать карту)
*) Возможен баг с сундуком, если использовать повторно около открытого сундука, лечиться через Ctr + Alt + F8. Ключницу тестировал на сундуке Ксардаса, осталось проверить двери.
В проекте GothicSourcer:
1. Чтобы обновить все ключи, достаточно заменить (C_Item) на (ITEM_KEY)
instance ItKe_Xardas(ITEM_KEY).
2. дополнить код MissionItems_1.d после ключа Ксардаса, заменить все ItKe_Xardas, кроме 1й строки, на действующие ключи.
2. Массив создан на 60 ключей, ключница работает с 30 первыми, дополнить код до нужного числа в B_UseKeyring() и ClearPlayerKey(), код разделен на блоки по 10, и в Choice_key(var C_Item KeyID), по 1 блоку на ключ.
3. При повторном использовании ключа, при нахождении его дублика проходит проверка по всей базе ключей, поэтому в В Choice_key(var C_Item KeyID) каждый блок равен 1 ключу. Будьте внимательны, я использовал не стандартое оформление, чтобы сделать код более наглядным. Вот так выглядит 1й блок для проверки ключа
3. Замещение карты и быстрый вызов кольца через B_OnHotkey.d.
4. Переопределение переменных, чтобы избежать ошибок при сборке проекта (не знаю влияет ли позиция на ГС, поставил их рядом с шаблонами).
RedefinedFunc.dsc
void B_PlayerFindItem(int#,int);
int B_SetPlayerMap(int#);
int B_SetPlayerKey(int,int#);
int# B_GetPlayerMap(void);
int# B_GetPlayerKey(int);
int# PLAYER_HOTKEY_SCREEN_MAP(void);
void B_RemoveNpc(int#);
int B_GiveInvItems(instance,instance,int#,int);
void B_UseItem(instance,int#);
int# B_GetBestPlayerMap(void);
int# B_GetAnyPlayerMap(void);
void B_SetNpcVisual(instance,int,string,int,int,int#);
void B_KillNpc(int#);
int C_NpcHasAmmo(instance,int#);
void B_ExchangeRoutine(int#,string);
void B_SetPermAttitude(int#,int);
void B_ClearImmortal(int#);
void B_SetNpcType(int#,int);
void B_ChangeGuild(int#,int);
RedefinedLocalVariable.dsc
int# Choice_key.KeyInstance;
5. Создать новую запись для дневника
LOG_Constants_Notes.d
const string TOPIC_KEYRING = "Кольцо ключей";
Ключи, к. лежат на земле нужно использовать через инвентарь.
Ключи, к. воруем нужно использовать через инвентарь.
Ключи, к. подбираем при обыске исчезнут автоматом.
Инструкция
1. Подойти к сундуку, открыть рюкзак, использовать связку ключей (или вызвать карту, в случае замещения функции карты).
2. Открыть рюкзак и использовать связку ключей повторно, ключи исчезнут (или вызвать карту)
*) Возможен баг с сундуком, если использовать повторно около открытого сундука, лечиться через Ctr + Alt + F8. Ключницу тестировал на сундуке Ксардаса, осталось проверить двери.
В проекте GothicSourcer:
1. Чтобы обновить все ключи, достаточно заменить (C_Item) на (ITEM_KEY)
instance ItKe_Xardas(ITEM_KEY).
2. дополнить код MissionItems_1.d после ключа Ксардаса, заменить все ItKe_Xardas, кроме 1й строки, на действующие ключи.
Код:
func void Use_ItKe_Xardas()
{
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
if(Hlp_IsItem(item,ItKe_Xardas)) { Choice_key(ItKe_Xardas); };
};
2. Массив создан на 60 ключей, ключница работает с 30 первыми, дополнить код до нужного числа в B_UseKeyring() и ClearPlayerKey(), код разделен на блоки по 10, и в Choice_key(var C_Item KeyID), по 1 блоку на ключ.
3. При повторном использовании ключа, при нахождении его дублика проходит проверка по всей базе ключей, поэтому в В Choice_key(var C_Item KeyID) каждый блок равен 1 ключу. Будьте внимательны, я использовал не стандартое оформление, чтобы сделать код более наглядным. Вот так выглядит 1й блок для проверки ключа
Код:
if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(PC_Hero))
{
if(Hlp_IsItem(KeyID,KeyInstance) && Hlp_IsValidItem(KeyID))
{
if(B_GetPlayerKey(KeyIndex) == KeyInstance) { KeyIndex += 1; } else
{ B_SetPlayerKey(PLAYER_KEY_CHOICE,KeyInstance); PLAYER_KEY_CHOICE += 1;
Print("Добавлен новый ключ!");
Log_AddEntry(TOPIC_KEYRING,ConcatStrings(ConcatStrings(KeyID.text[2]," "),KeyID.text[3]));
CreateInvItems(hero,itmi_keyring,1); return; }; if(KeyIndex == PLAYER_KEY_CHOICE) { return; };
3. Замещение карты и быстрый вызов кольца через B_OnHotkey.d.
Код:
func int player_hotkey_screen_map()
{
var int OldInstance;
var int NewInstance;
if(Npc_HasItems(hero,itmi_keyring) >= 1)
{ OldInstance = itmi_keyring;
return OldInstance; };
if(Npc_HasItems(hero,itmi_keyring2) >= 1)
{ OldInstance = itmi_keyring2;
return OldInstance; };
4. Переопределение переменных, чтобы избежать ошибок при сборке проекта (не знаю влияет ли позиция на ГС, поставил их рядом с шаблонами).
RedefinedFunc.dsc
void B_PlayerFindItem(int#,int);
int B_SetPlayerMap(int#);
int B_SetPlayerKey(int,int#);
int# B_GetPlayerMap(void);
int# B_GetPlayerKey(int);
int# PLAYER_HOTKEY_SCREEN_MAP(void);
void B_RemoveNpc(int#);
int B_GiveInvItems(instance,instance,int#,int);
void B_UseItem(instance,int#);
int# B_GetBestPlayerMap(void);
int# B_GetAnyPlayerMap(void);
void B_SetNpcVisual(instance,int,string,int,int,int#);
void B_KillNpc(int#);
int C_NpcHasAmmo(instance,int#);
void B_ExchangeRoutine(int#,string);
void B_SetPermAttitude(int#,int);
void B_ClearImmortal(int#);
void B_SetNpcType(int#,int);
void B_ChangeGuild(int#,int);
RedefinedLocalVariable.dsc
int# Choice_key.KeyInstance;
5. Создать новую запись для дневника
LOG_Constants_Notes.d
const string TOPIC_KEYRING = "Кольцо ключей";