func event GameInit() {
Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "DexLockpickDiff", 100);
Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "ForceLockpickDiff", 100);
Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "OldForceLockpickSystem", 0);
Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "OldForceLockpickDiff", 12);
Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "ManaMagicUnlock", 75);
Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "SkipLPAnims", 1);
};
func void handleevent(var int ukey)
{
var C_NPC PNPC;
var int TMPMORPH;
var int TMPMANA;
var int TMPHP;
var C_ITEM WEAPON;
var int DAYNOW;
var int TEMPPICKPOCKET;
var C_ITEM CURHELM;
var int BCHESTLVL;
var int BCHESTSTRENGHNEED;
var int BCHESTLOCKNEED;
var string CONCATTEXT;
var C_NPC DETWSP;
var C_NPC DETWSPR;
var int BHASRANGEWEAPON;
var int UNLOCKUSERUNE;
var int ForceLockpickDiff;
var int LPAnims;
var int OldForceLockpickDiff;
var int OldForceLockpickSystem;
var int DexLockpickDiff;
var int ManaMagicUnlock;
DexLockpickDiff = Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "DexLockpickDiff", 100);
ForceLockpickDiff = Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "ForceLockpickDiff", 100);
OldForceLockpickSystem = Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "OldForceLockpickSystem", 0);
OldForceLockpickDiff = Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "OldForceLockpickDiff", 12);
LPAnims=Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "SkipLPAnims", 1);
ManaMagicUnlock=Hlp_ReadOptionInt("Gothic", "ADJUSTABLE_LOCKPICK", "ManaMagicUnlock", 75);
if (ForceLockpickDiff < 1) || (ForceLockpickDiff > 1000)
{
ForceLockpickDiff = 100;
};
if (DexLockpickDiff < 1) || (DexLockpickDiff > 1000)
{
DexLockpickDiff = 100;
};
if (ManaMagicUnlock < 1) || (ManaMagicUnlock > 1000)
{
ManaMagicUnlock = 75;
};
if RX_KEYPRESSED("KEY_BREAKCHEST_STR", TRUE, FALSE)
{
if (C_BODYSTATECONTAINS(HERO, BS_ITEMINTERACT) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_CLIMB) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_CRAWL) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_JUMP) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_DIVE) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_SWIM) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_FALL) == FALSE) && (HLP_INVENTORYISOPEN() == FALSE) && (BDEVMODE == FALSE) && (STEAL_MODE == FALSE) && (MOUNT_UP == FALSE) && (SHAKOISON == FALSE) && (OPTIONCHECK == FALSE) && (HEROTRANS == FALSE) && (PLAYER_MOBSI_PRODUCTION == MOBSI_NONE) && (HERONOTMOBSI == FALSE) && (ENDGAMECREDITS == FALSE) && (CAPTURECHEAT == TRUE) && (HEROISDEAD == FALSE)
{
BCHESTLVL = MOB_GETBREAKNUM();
if (OldForceLockpickSystem == 1)
{
BCHESTSTRENGHNEED = BCHESTLVL * OldForceLockpickDiff;
} else
{
BCHESTSTRENGHNEED = ForceLockpickDiff; //BCHESTSTRENGHNEED = BCHESTLVL * 12;
};
UNLOCKUSERUNE = (NPC_HASITEMS(HERO, ITRU_UNLOCK) >= 1) && (PLAYER_TALENT_RUNES[99] == TRUE);
if UNLOCKUSERUNE && (HERO.ATTRIBUTE[2] < ManaMagicUnlock)
{
AI_PRINT(NAME_MANANOREQUIREDAMOUNT);
};
if UNLOCKUSERUNE && (HERO.ATTRIBUTE[2] >= ManaMagicUnlock)
{
RX_ISMAGICUNLOCKCHEST = TRUE;
MOB_SETBRAKECHEST();
if BREAKCHEST
{
if (LPAnims == 0)
{
AI_WAITMS(HERO, 10);
AI_PLAYANI(HERO, "T_FIBCAST_2_FIBSHOOT");
AI_PLAYANI(HERO, "T_FIBSHOOT_2_STAND");
};
RX_RESTOREMANA(-ManaMagicUnlock);
if RX_NEWMES
{
AI_PRINTITEMINFO("Информация", "Успешный взлом!", 2, 1);
}
else
{
AI_PRINTCLR("Успешный взлом!", 83, 152, 48);
};
B_SAY(HERO, HERO, "$ITEMREADY");
BREAKCHEST = FALSE;
};
RX_ISMAGICUNLOCKCHEST = FALSE;
} else if RX_FORCEPICKLOCK
{
if NPC_HASEQUIPPEDMELEEWEAPON(HERO) == TRUE
{
if HERO.ATTRIBUTE[4] >= BCHESTSTRENGHNEED
{
RX_ISMAGICUNLOCKCHEST = FALSE;
MOB_SETBRAKECHEST();
if BREAKCHEST == TRUE
{
if (LPAnims == 0)
{
AI_READYMELEEWEAPON(HERO);
if EQUIPEDINDEX_1H == TRUE
{
AI_PLAYANI(HERO, "T_1HSBRKCHST");
}
else
{
AI_PLAYANI(HERO, "T_2HSBRKCHST");
};
AI_WAITMS(HERO, 10);
AI_REMOVEWEAPON(HERO);
};
RX_RESTORESTAMINA(-25);
if RX_NEWMES
{
AI_PRINTITEMINFO("Информация", "Успешный взлом!", 2, 1);
}
else
{
AI_PRINTCLR("Успешный взлом!", 83, 152, 48);
};
BREAKCHEST = FALSE;
if HERO.ATTRIBUTE[5] < HLP_RANDOM(100)
{
NPC_SENDPASSIVEPERC(HERO, PERC_ASSESSQUIETSOUND, HERO, HERO);
};
};
}
else
{
AI_PLAYANI(HERO, "T_DONTKNOW");
B_SAY(HERO, HERO, "$TOOHEAVYFORME");
CONCATTEXT = CONCATSTRINGS("Для взлома требуется еще ", INTTOSTRING(BCHESTSTRENGHNEED - HERO.ATTRIBUTE[4]));
CONCATTEXT = CONCATSTRINGS(CONCATTEXT, " силы...");
AI_PRINT(CONCATTEXT);
};
} else if RX_ISVAMPIRE() && RX_VAMP_SKILLFIST_NEWOVERLAY && (RX_VAMPIREWAYTYPE == 2)
{
if HERO.ATTRIBUTE[4] >= BCHESTSTRENGHNEED
{
RX_ISMAGICUNLOCKCHEST = FALSE;
MOB_SETBRAKECHEST();
if BREAKCHEST == TRUE
{
if (LPAnims == 0)
{
AI_READYMELEEWEAPON(HERO);
AI_PLAYANI(HERO, "T_FIST_BREAKCHEST");
AI_WAITMS(HERO, 10);
AI_REMOVEWEAPON(HERO);
};
RX_RESTORESTAMINA(-25);
AI_PRINTITEMINFO("Информация", "Успешный взлом!", 2, 1);
BREAKCHEST = FALSE;
NPC_SENDPASSIVEPERC(HERO, PERC_ASSESSQUIETSOUND, HERO, HERO);
};
}
else
{
AI_PLAYANI(HERO, "T_DONTKNOW");
B_SAY(HERO, HERO, "$TOOHEAVYFORME");
CONCATTEXT = CONCATSTRINGS("Для взлома требуется еще ", INTTOSTRING(BCHESTSTRENGHNEED - HERO.ATTRIBUTE[4]));
CONCATTEXT = CONCATSTRINGS(CONCATTEXT, " силы...");
AI_PRINT(CONCATTEXT);
};
}
else
{
AI_PLAYANI(HERO, "T_DONTKNOW");
AI_PRINT(PRINT_MISSINGWEAP);
B_SAY_OVERLAY(HERO, HERO, "$MISSINGITEM");
};
}
else
{
AI_PLAYANI(HERO, "T_DONTKNOW");
AI_PRINT(PRINT_MISSINGWEAPSKILL);
};
};
} else if RX_KEYPRESSED("KEY_BREAKCHEST_DEX", TRUE, FALSE)
{
if (C_BODYSTATECONTAINS(HERO, BS_ITEMINTERACT) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_CLIMB) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_CRAWL) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_JUMP) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_DIVE) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_SWIM) == FALSE) && (C_BODYSTATECONTAINS(HERO, BS_FALL) == FALSE) && (HLP_INVENTORYISOPEN() == FALSE) && (BDEVMODE == FALSE) && (STEAL_MODE == FALSE) && (MOUNT_UP == FALSE) && (SHAKOISON == FALSE) && (OPTIONCHECK == FALSE) && (HEROTRANS == FALSE) && (PLAYER_MOBSI_PRODUCTION == MOBSI_NONE) && (HERONOTMOBSI == FALSE) && (ENDGAMECREDITS == FALSE) && (CAPTURECHEAT == TRUE) && (HEROISDEAD == FALSE)
{
if NPC_GETTALENTSKILL(HERO, NPC_TALENT_PICKLOCK) > 0
{
if HERO.ATTRIBUTE[5] >= DexLockpickDiff
{
BCHESTLVL = MOB_GETBREAKNUM();
if BCHESTLVL < 4
{
BCHESTLOCKNEED = 1;
}
else
{
BCHESTLOCKNEED = BCHESTLVL / 3 - HERO.ATTRIBUTE[5] / 150;
if BCHESTLOCKNEED < 1
{
BCHESTLOCKNEED = 1;
};
};
if NPC_HASITEMS(HERO, ITKE_LOCKPICK) >= BCHESTLOCKNEED
{
MOB_SETBRAKECHEST();
if BREAKCHEST == TRUE
{
if (LPAnims == 0)
{
AI_PLAYANI(HERO, "T_PLUNDER");
};
SND_PLAY("PICKLOCK_SUCCESS");
if RX_NEWMES
{
AI_PRINTITEMINFO("Информация", "Успешный взлом!", 2, 1);
}
else
{
AI_PRINTCLR("Успешный взлом!", 83, 152, 48);
};
BREAKCHEST = FALSE;
NPC_REMOVEINVITEMS(HERO, ITKE_LOCKPICK, BCHESTLOCKNEED);
CONCATTEXT = CONCATSTRINGS("Потрачено ", INTTOSTRING(BCHESTLOCKNEED));
if BCHESTLOCKNEED >= 5
{
CONCATTEXT = CONCATSTRINGS(CONCATTEXT, " отмычек...");
} else if BCHESTLOCKNEED > 1
{
CONCATTEXT = CONCATSTRINGS(CONCATTEXT, " отмычки...");
}
else
{
CONCATTEXT = CONCATSTRINGS(CONCATTEXT, " отмычка...");
};
AI_PRINT(CONCATTEXT);
};
}
else
{
AI_PLAYANI(HERO, "T_DONTKNOW");
B_SAY_OVERLAY(HERO, HERO, "$PICKLOCKMISSING");
CONCATTEXT = CONCATSTRINGS("Для взлома требуется ", INTTOSTRING(BCHESTLOCKNEED));
if BCHESTLOCKNEED >= 5
{
CONCATTEXT = CONCATSTRINGS(CONCATTEXT, " отмычек...");
} else if BCHESTLOCKNEED > 1
{
CONCATTEXT = CONCATSTRINGS(CONCATTEXT, " отмычки...");
}
else
{
CONCATTEXT = CONCATSTRINGS(CONCATTEXT, " отмычка...");
};
AI_PRINT(CONCATTEXT);
};
}
else
{
AI_PLAYANI(HERO, "T_DONTKNOW");
B_SAY(HERO, HERO, "$TOOHEAVYFORME");
CONCATTEXT = CONCATSTRINGS("Для взлома требуется ", INTTOSTRING(DexLockpickDiff - HERO.ATTRIBUTE[5]));
CONCATTEXT = CONCATSTRINGS(CONCATTEXT, " ловкости...");
AI_PRINT(CONCATTEXT);
};
}
else
{
AI_PLAYANI(HERO, "T_DONTKNOW");
B_SAY_OVERLAY(HERO, HERO, "$NOPICKLOCKTALENT");
AI_PRINT(PRINT_NOPICKLOCKTALENT);
};
};
}
else {
handleevent_old(ukey);
};
};