Очередная порция скриптов(начал писать АИ, вот, так сказать, начальные наработки, может, кому-нить и пригодится). Как всегда все(кроме 7 - этот скрипт взят из кампании СоУ) мое, совпадения случайны.
1. Проверяет, оружие ли вещь oWeapon. Можно использовать в скрипте-проверке, вооружен ли обьект(ведь при простом перебирании обьектов в руках у ПС(НПС) как оружие возвращается и факел).
Neverwinter Script Source | int GetIsWeapon(object oWeapon) { int iType = GetBaseItemType(oWeapon); if (GetIsObjectValid(oWeapon)&&iType!=BASE_ITEM_INVALID) { if (iType == BASE_ITEM_BASTARDSWORD || iType == BASE_ITEM_BATTLEAXE || iType == BASE_ITEM_CLUB || iType == BASE_ITEM_DAGGER || iType == BASE_ITEM_DART || iType == BASE_ITEM_DIREMACE || iType == BASE_ITEM_DOUBLEAXE || iType == BASE_ITEM_GREATAXE || iType == BASE_ITEM_GREATSWORD || iType == BASE_ITEM_HALBERD || iType == BASE_ITEM_HANDAXE || iType == BASE_ITEM_HEAVYCROSSBOW || iType == BASE_ITEM_HEAVYFLAIL || iType == BASE_ITEM_KAMA || iType == BASE_ITEM_KATANA || iType == BASE_ITEM_KUKRI || iType == BASE_ITEM_LIGHTFLAIL || iType == BASE_ITEM_LIGHTHAMMER || iType == BASE_ITEM_LIGHTMACE || iType == BASE_ITEM_LONGBOW || iType == BASE_ITEM_LONGSWORD || iType == BASE_ITEM_MAGICSTAFF || iType == BASE_ITEM_MORNINGSTAR || iType == BASE_ITEM_QUARTERSTAFF || iType == BASE_ITEM_RAPIER || iType == BASE_ITEM_SCIMITAR || iType == BASE_ITEM_SCYTHE || iType == BASE_ITEM_SHORTBOW || iType == BASE_ITEM_SHORTSPEAR || iType == BASE_ITEM_SHORTSWORD || iType == BASE_ITEM_SHURIKEN || iType == BASE_ITEM_SICKLE || iType == BASE_ITEM_SLING || iType == BASE_ITEM_THROWINGAXE || iType == BASE_ITEM_TORCH || iType == BASE_ITEM_TWOBLADEDSWORD || iType == BASE_ITEM_WARHAMMER ) { return TRUE; } } } |
2. Проверяет способность обьекта oObject(=OBJECT_SELF) произносить заклинания.
Neverwinter Script Source | int GetIsCaster(object oObject=OBJECT_SELF) { if((GetLevelByClass(CLASS_TYPE_BARD, oObject)|| GetLevelByClass(CLASS_TYPE_CLERIC, oObject)|| GetLevelByClass(CLASS_TYPE_DRUID, oObject)|| GetLevelByClass(CLASS_TYPE_PALADIN, oObject)> 4|| GetLevelByClass(CLASS_TYPE_RANGER, oObject)> 4|| GetLevelByClass(CLASS_TYPE_SORCERER, oObject)|| GetLevelByClass(CLASS_TYPE_WIZARD, oObject))&& GetObjectType(oObject)==OBJECT_TYPE_CREATURE) { return TRUE; } } |
3. Возвращает ближайшее энеми-создание, способное творить заклы. Использует скрипт 2. Из этого скрипта вытекает скрипт 4.
Neverwinter Script Source | object GetNearestEnemyCaster(int iMaxLvl=20, int iMinLvl=1, object oObject=OBJECT_SELF) { int i = 1; object oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oObject, i++, CREATURE_TYPE_IS_ALIVE, TRUE); while (GetIsObjectValid(oCreature)) { if (GetIsCaster(oCreature)&& GetPCLevel(oCreature)>=iMinLvl&& GetPCLevel(oCreature)<=iMaxLvl) { break; } oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oObject, i++, CREATURE_TYPE_IS_ALIVE, TRUE); } return oCreature; } |
4. См. 3.
Neverwinter Script Source | object GetNearestFriedlyCaster(int iMaxLvl=20, int iMinLvl=1, object oObject=OBJECT_SELF) { int i = 1; object oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oObject, i++, CREATURE_TYPE_IS_ALIVE, TRUE); while (GetIsObjectValid(oCreature)) { if (GetIsCaster(oCreature)&& GetPCLevel(oCreature)>=iMinLvl&& GetPCLevel(oCreature)<=iMaxLvl) { break; } oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oObject, i++, CREATURE_TYPE_IS_ALIVE, TRUE); } return oCreature; } |
5. Проверяет, метательное ли оружие oWeapon.
Neverwinter Script Source | int GetIsRangedWeapon(object oWeapon) { if (GetIsObjectValid(oWeapon)) { int iBIT = GetBaseItemType(oWeapon); if (iBIT == BASE_ITEM_DART|| iBIT == BASE_ITEM_HEAVYCROSSBOW|| iBIT == BASE_ITEM_LIGHTCROSSBOW|| iBIT == BASE_ITEM_LONGBOW|| iBIT == BASE_ITEM_SHORTBOW|| iBIT == BASE_ITEM_SHURIKEN|| iBIT == BASE_ITEM_SLING|| iBIT == BASE_ITEM_THROWINGAXE) { return TRUE; } } } |
6. Скрипт, вытекающий из скрипта 1: если стоит 0 (по умолч.) проверяет у обьекта наличие оружитя в слотах инвентаря, если 1- в инвентаре, если 2 - и там, и там.
Neverwinter Script Source | int GetHasWeapon(object oTarget, int nType) { int WInv = FALSE; int WSlot= FALSE; int iResult; object oItem = GetFirstItemInInventory(oTarget); while (GetIsObjectValid(oItem)) { if (GetIsWeapon(oItem)) { WInv = TRUE; break; } oItem = GetNextItemInInventory(oTarget); } int i; for (i=4; i<=5; i++) { oItem = GetItemInSlot(i, oTarget); if (GetIsWeapon(oItem)) { iWSlot = TRUE; break; } } if (nType==0) { iResult = iWSlot; } else if (nType==1) { iResult = iWInv; } else if (nType==2) { if (iWSLot==TRUE||iWInv==TRUE) { return TRUE; } else { return FALSE; } } else { return -1; } return iResult; } |
7. Скрипт, аналогичный второму: определяет, присутствуют ли в его классах классы бойца.
Neverwinter Script Source | int GetHasFighterClass(object oObject) { int nClass1 = GetLevelByClass(CLASS_TYPE_BARBARIAN, GetPCSpeaker()); int nClass2 = GetLevelByClass(CLASS_TYPE_FIGHTER, GetPCSpeaker()); int nClass3 = GetLevelByClass(CLASS_TYPE_MONK, GetPCSpeaker()); int nClass4 = GetLevelByClass(CLASS_TYPE_RANGER, GetPCSpeaker()); if ((nClass1 > 0) || (nClass2 > 0) || (nClass3 > 0) || (nClass4 > 0)) { return TRUE; } else return FALSE; } |
8. Рэндомная задержка. Вообще может использоваться для генерации случайного флоата.
Neverwinter Script Source | float GetRandomDelay(float fMinimumTime = 0.4, float MaximumTime = 1.1) { float fRandom = MaximumTime - fMinimumTime; int nRandom; if(fRandom < 0.0) { return 0.0; } else { nRandom = FloatToInt(fRandom * 10.0); nRandom = Random(nRandom) + 1; fRandom = IntToFloat(nRandom); fRandom /= 10.0; return fRandom + fMinimumTime; } } |
9. Возвращает кол-во предметов в инвентаре oTarget.
Neverwinter Script Source | int GetNumItems(object oTarget,string sItem) { int nNumItems = 0; object oItem = GetFirstItemInInventory(oTarget); while (GetIsObjectValid(oItem)) { if (GetTag(oItem) == sItem) { nNumItems = nNumItems + GetNumStackedItems(oItem); } oItem = GetNextItemInInventory(oTarget); } return nNumItems; } |
Удачи! PS: про реплы Сэрлеса: восрешение вообще есть лажа и неДнДэшно к тому ж. Ну, не пропаать же скрипту(IMG: style_emoticons/kolobok_light/smile.gif)
Сообщение отредактировал Twin - Jan 9 2005, 17:58
|