Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
14 страниц V  « < 10 11 12 13 14 >  
Ответить в эту темуОткрыть новую тему
> Скрипты: Все вопросы, Алгоритмы, оптимизация, особености и хитрости в скриптинге
gennady
сообщение Jun 5 2010, 11:48
Сообщение #261


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



Тут для теста Аз написал скрипт подсчета игрового времени. Цикл вывода инфы 5 минут, подсчета 1 минута. Может пригодится...
Neverwinter Script
//::///////////////////////////////////////////////
//:: Скрип работает при загрузке модуля
//:: FileName: module_load
//:: auth: azathoth
////////////////////////////////////////////////////////////////////////////////
// *****  ПОДСЧЕТ ВРЕМЕНИ ДЛЯ ТЕСТА  *****
////////////////////////////////////////////////////////////////////////////////
void Count(int nTimer)
{
object oPC = GetFirstPC();
object oMod =  GetModule();
int iHB = GetLocalInt(oMod, "HB_TIME");

SetLocalInt(oMod, "HB_TIME", iHB+1);
if(iHB >= 4)
{
  int iTimeGameM = GetLocalInt(oMod, "Time_Game_M"); //минуты
  int iTimeGameH = GetLocalInt(oMod, "Time_Game_H"); //часы
   SetLocalInt(oMod, "HB_TIME", 0);
  if(iTimeGameM > 55)
   {
    iTimeGameH++;
    SetLocalInt(oMod, "Time_Game_H", iTimeGameH); //часы
    SetLocalInt(oMod, "Time_Game_M", 0); //минуты
   }
  else
   {
    iTimeGameM+=5;
    SetLocalInt(oMod, "Time_Game_M", iTimeGameM);
   }
  SendMessageToPC(oPC, "Длительность игры: "+IntToString(iTimeGameH)+" ч. "+IntToString(iTimeGameM)+" мин.");
}
  DelayCommand(60.0, Count(nTimer + 1));
}
////////////////////////////////////////////////////////////////////////////////
void main()
{

// ================= ДЛЯ ТЕСТА ====================
if (GetLocalInt(GetModule(), "START_TIME_TEST") == 0) // Проверить
  {
   SetLocalInt(GetModule(),"START_TIME_TEST",1);
   Count(0);
  }
}


Сообщение отредактировал gennady - Jun 5 2010, 11:50
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Merkuta
сообщение Jun 20 2010, 19:16
Сообщение #262


Level 3
*

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Мне нужно было написать скрипт, который перемещает вещи из одного сундука в другой. Решил вопрос так:
Neverwinter Script
void main()

{
object oPC = GetFirstPC(),
      oChest_01 = GetObjectByTag("RC_chest_01"),
      oChest_02 = GetObjectByTag("RC_chest_02"),
      oItem = GetFirstItemInInventory(oChest_01),
      oItem_in;
     
//string sString = "скрипт сработал";

while(GetIsObjectValid(oItem))
  {             
  //FloatingTextStringOnCreature(sString, oPC);
  CopyItem(oItem, oChest_02);
  DestroyObject(oItem);
 
  //sString = "скрипт сработал более одного раза";
  oItem = GetNextItemInInventory(oChest_01);         
  }
 
//FloatingTextStringOnCreature("вещей нет", oPC); 
return
}


Однако выяснилось, что предметы типа контейнера не копируются, если в них что-то есть. Копируется только их содержимое.
Сам контейнер пропадает. Попробовал решить вопрос следующим образом(хотя ясно, что это не совсем то, что нужно):

Neverwinter Script
void main()

{
object oPC = GetFirstPC(),
      oChest_01 = GetObjectByTag("RC_chest_01"),
      oChest_02 = GetObjectByTag("RC_chest_02"),
      oItem = GetFirstItemInInventory(oChest_01),
      oItem_in;
     
//string sString = "скрипт сработал";

while(GetIsObjectValid(oItem))
  {             
  //FloatingTextStringOnCreature(sString, oPC);
 
  while(GetHasInventory(oItem)) 
      {      
      oItem_in =  GetFirstItemInInventory(oItem);
     
      while(GetIsObjectValid(oItem_in))     
        {       
        CopyItem(oItem_in, oChest_02);
        DestroyObject(oItem_in);
        oItem_in = GetNextItemInInventory(oItem);   
        }    
       
      CopyItem(oItem, oChest_02);
      DestroyObject(oItem);
      oItem = GetNextItemInInventory(oChest_01);       
      }   
     
  CopyItem(oItem, oChest_02);
  DestroyObject(oItem);
 
  //sString = "скрипт сработал более одного раза";
  oItem = GetNextItemInInventory(oChest_01);         
  }
 
//FloatingTextStringOnCreature("вещей нет", oPC); 
return
}


Но в этом случае предметы из контейнера копируются дважды, а сам контейнер опять же пропадает. Есть идеи, как скопировать контейнер с вложенными в него вещами?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Jun 20 2010, 23:17
Сообщение #263


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Никак. Sad, but true.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Laajin
сообщение Jun 21 2010, 07:05
Сообщение #264


Level 5
**

Класс: Пьяный Мастер
Характер: Chaotic Good
Раса: Человек



ну по идеи нужно скопировать/создать сначала сам контейнер
а потом скопировать вещи из одного в другой

у тебя во всех скриптах копируются только вещи
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Merkuta
сообщение Jun 21 2010, 08:13
Сообщение #265


Level 3
*

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Цитата(Laajin @ Jun 21 2010, 07:05) *
ну по идеи нужно скопировать/создать сначала сам контейнер

И как это сделать?
Во втором скрипте я исходил из того, что после перебора, копирования и удаления всех вещей в контейнере, он станет пустым и скопируется нормально. Но не получилось.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Jun 21 2010, 08:41
Сообщение #266


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Контейнеры вообще зло (IMG:style_emoticons/kolobok_light/smile.gif)
Цитата
я исходил из того, что после перебора, копирования и удаления всех вещей в контейнере, он станет пустым и скопируется нормально. Но не получилось.
Потому что дестрой только помечает на удаление, удаляются вещи после окончания работы скрипта. Пока скрипт работает, контейнер не пустой.
Цитата
у тебя во всех скриптах копируются только вещи
Нет, там и контейнер мелькает, он тоже ловится при переборе параллельно со своим содержимым.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
greye
сообщение Jun 21 2010, 16:54
Сообщение #267


Level 7
**

Класс: Некромант
Характер: True Neutral
Раса: Нежить



Цитата(Merkuta @ Jun 5 2010, 11:48) *
Есть идеи, как скопировать контейнер с вложенными в него вещами?

В первом это можно было сделать при помощи ActionGiveItem, но на втором не проверялось.
Хотя можно и с копированием извратиться при особом желании.

Сообщение отредактировал greye - Jun 21 2010, 16:55
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Merkuta
сообщение Jun 21 2010, 18:02
Сообщение #268


Level 3
*

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Цитата(greye @ Jun 21 2010, 16:54) *
В первом это можно было сделать при помощи ActionGiveItem, но на втором не проверялось.
Хотя можно и с копированием извратиться при особом желании.

Спасибо, контейнер действительно переносится со всеми вложенными вещами.
Neverwinter Script
void main()

{
object oPC = GetFirstPC(),
      oChest_01 = GetObjectByTag("RC_chest_01"),
      oChest_02 = GetObjectByTag("RC_chest_02"),
      oItem = GetFirstItemInInventory(oChest_01),
      oItem_in;
     
//string sString = "скрипт сработал";

while(GetIsObjectValid(oItem))
  {             
  //FloatingTextStringOnCreature(sString, oPC);
  AssignCommand(oChest_01, ActionGiveItem(oItem, oChest_02));
 
 
  //sString = "скрипт сработал более одного раза";
  oItem = GetNextItemInInventory(oChest_01);         
  }
 
//FloatingTextStringOnCreature("вещей нет", oPC); 
return
}

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Jun 21 2010, 23:42
Сообщение #269


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Эпично (IMG:style_emoticons/kolobok_light/smile.gif) Помню даже на волте видел когда-то скрипт, где всё копировалось, а вот контейнер уничтожался, и в комментах было типа "так надо, иначе дюп" (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 22 2010, 04:33
Сообщение #270


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Да, здорово... Сразу вспоминается куча проблем при работе с рюкзаками. (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Jun 22 2010, 08:08
Сообщение #271


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Ну если ActionGiveItem() работает через стек действий, то с игроком может не прокатить (скажем, дроп при смерти, или забитый стек, или дикие лаги). Но вот между сундуками работает (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ilerien
сообщение Jun 22 2010, 11:03
Сообщение #272


Level 11
Иконки Групп

Класс: Волшебник
Характер: Lawful Evil
Раса: Эльф
NWN: Скриптинг [PW]
Gem of the North



Если уж так приспичило, сундук всегда можно пересоздать с палитры (IMG:style_emoticons/kolobok_light/rolleyes.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
greye
сообщение Jun 22 2010, 11:55
Сообщение #273


Level 7
**

Класс: Некромант
Характер: True Neutral
Раса: Нежить



Цитата(denis0k @ Jun 22 2010, 08:08) *
то с игроком может не прокатить (скажем, дроп при смерти, или забитый стек, или дикие лаги)

Разве что дикие лаги, потому что остальное обходится без проблем.=)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
GoodLuc
сообщение Jun 24 2010, 18:15
Сообщение #274


Level 2
*

Класс: Волшебник
Характер: Neutral Good
Раса: Человек



Извините, если вопрос не по теме. Я видел, как в обе NWN прикручивали новые навыки (feats). Я понял, что это делали через скрипт, но как?
Кто-нибудь так делал?

Сообщение отредактировал GoodLuc - Jun 24 2010, 18:21
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 24 2010, 19:01
Сообщение #275


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



нужно 2da таблицы ковырять: feats + spells + еще пара по мелочи, и конечно же скрипты. Все это довольно подробно описано в разделе Кастом Контент в категории тулсета первого НВН (во втором суть та же, мб чуток больше параметров).
Новые фиты могут быть только активными. Пассивные вещи типа (+1 атака всегда) сделать нельзя, к сожалению. Те можно, но коряво и через попу. Или через nwnx - но это только для мультиплеера.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
GoodLuc
сообщение Jun 24 2010, 23:22
Сообщение #276


Level 2
*

Класс: Волшебник
Характер: Neutral Good
Раса: Человек



Цитата
Все это довольно подробно описано в разделе Кастом Контент в категории тулсета первого НВН

А где именно?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 27 2010, 01:21
Сообщение #277


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



где-то в этой теме: 2ДА таблицы
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
PaiNt
сообщение Jul 15 2010, 10:20
Сообщение #278


Level 8
***

Класс: Псионик
Характер: Chaotic Neutral
Раса: Хафлинг



Хотел поделится скриптом строкового массива, может мне бы его оптимизировали..


Neverwinter Script


Сообщение отредактировал PaiNt - Sep 24 2010, 06:44
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Jul 15 2010, 18:40
Сообщение #279


Level 12
Иконки Групп

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



Neverwinter Script
if(GetStringLength(sDevider)!=1) sDevider=",";

Ага, незадокумментированная фича!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
PaiNt
сообщение Jul 16 2010, 01:53
Сообщение #280


Level 8
***

Класс: Псионик
Характер: Chaotic Neutral
Раса: Хафлинг



Цитата(azathoth @ Jul 16 2010, 01:40) *
Neverwinter Script
if(GetStringLength(sDevider)!=1) sDevider=",";

Ага, незадокумментированная фича!

Да, (IMG:style_emoticons/kolobok_light/smile.gif) вот бы вспомнить как вообще все это работает (IMG:style_emoticons/kolobok_light/smile.gif)

Поидее функция позволяяет добавлять элемент в конец массива (удлинять массив).
Как и было замечено разделитель предусматривается только односимвольный.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Jul 16 2010, 08:35
Сообщение #281


Level 12
Иконки Групп

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



Цитата
вот бы вспомнить как вообще все это работает

ну уж даже если ты не вспомнишь, то вряд ли тут найдутся добровольцы сами разобраться и ещё оптимизировать.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
liantey
сообщение Aug 11 2010, 12:51
Сообщение #282


Level 1


Класс: Обыватель
Характер: Lawful Good
Раса: Человек



у меня твердое намеренье, ввести в свою компанию что-то типа замка из офф компании...
если это возмоно силами одного человека ( а в этом я не сомневаюсь) подкиньте идей, а еще лучше подскажите где найти грамотный гайд именно по скриптописанию. все остальный что я встречал, ничего путного на эту тему не говорят.

п.с. я не чужд программированию и т.д. т.п., но синтаксиса тулсета не знаю. И на русском ничего не нашел. (А с английским я провожусь не один месяц...)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Aug 12 2010, 08:44
Сообщение #283


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



на русском есть лишь пара совсем нубских гайдов и пару глав про скрипты в НВН1. Если не чужд программированию, то тебе по сути только функции изучить (циклы, условия, объявление переменных и тд тебе должно быть знакомо, синтаксис си тоже не должен вызвать трудностей). А тут никакой гайд не поможет, только ковыряние.

Более менее приличные гайды есть на английском. Но тоже не фонтан, если честно. Начни изучение с ковыряния уже готовых скриптов (точно зная что они делают), потом пробуй крутить параметры и оценивать результаты. Потом небольшая переделка. И тд. Функции лучше всего изучаются именно так, когда их использовать пытаешься.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lorendroll
сообщение Aug 12 2010, 17:04
Сообщение #284


Level 9
***

Класс: Волшебник
Характер: Neutral Good
Раса: Эльф



Мне в своё время очень помогли ресурсы www.nwnlexicon.com / nwn1.nwn2lexicon.com и nwn2.wikia.com. Легко переводятся при помощи Google Translate, хотя там довольно просто все написано и так.
А в самом начале мне жутко помогла тулза под названием ScriptGen. Разбирая то, как она генерит скрипты, можно быстро научиться приемам работы.

Сообщение отредактировал Lorendroll - Aug 12 2010, 17:05
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DilanZendal
сообщение Aug 14 2010, 15:35
Сообщение #285


Level 2
*

Класс: Обыватель
Характер: Chaotic Neutral
Раса: Человек



Есть у Священника заклинание 4-го круга, называется "Декламация". Действует на всех союзников, давая бонус к атаке, спасброскам и КЗ +2, если божество у цели то же, что у заклинателя, то +3.
Выглядит так:

Neverwinter Script
#include "nwn2_inc_spells"


#include "x2_inc_spellhook"

void main()
{
    if (!X2PreSpellCastCode())
    {    // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
        return;
    }

    // Declare major variables
    object oCaster = OBJECT_SELF;
    int nCasterLvl = GetCasterLevel(oCaster);
    float fDuration = RoundsToSeconds(nCasterLvl);
    fDuration = ApplyMetamagicDurationMods(fDuration);
    int nDurType = ApplyMetamagicDurationTypeMods(DURATION_TYPE_TEMPO
RARY);
    location lTarget = GetLocation(oCaster);

    // effects
    effect eAC;
    effect eAttack;
    effect eSave;
    effect eVis = EffectVisualEffect(VFX_DUR_SPELL_RECITATION);
    effect eLink;
   
    // find the first target
    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_VAST, lTarget, TRUE, OBJECT_TYPE_CREATURE);
   
    while (GetIsObjectValid(oTarget)) {
       if (spellsIsTarget(oTarget, SPELL_TARGET_ALLALLIES, oCaster)) {
      
          //Fire cast spell at event for the specified target
          SignalEvent(oTarget, EventSpellCastAt(oCaster, GetSpellId(), FALSE));
         
          int nBonus = 2;
          if (GetStringLowerCase(GetDeity(oTarget)) == GetStringLowerCase(GetDeity(oCaster))) {
             nBonus = 3;
          }
          eAC = EffectACIncrease(nBonus, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL);
          eAttack = EffectAttackIncrease(nBonus);
          eSave = EffectSavingThrowIncrease(SAVING_THROW_ALL, nBonus, SAVING_THROW_TYPE_ALL);
          eLink = EffectLinkEffects(eAC, eAttack);
          eLink = EffectLinkEffects(eLink, eSave);
          eLink = EffectLinkEffects(eLink, eVis);
      
          RemoveEffectsFromSpell(oTarget, GetSpellId());
      
             //Apply the VFX impact and effects
             ApplyEffectToObject(nDurType, eLink, oTarget, fDuration);
       }
       oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_VAST, lTarget, TRUE, OBJECT_TYPE_CREATURE);
    }      
}



Помогите поправить, пожалуйста. Нужно чтобы под действие заклинания попадали только дружественные аутсайдеры, плюс чтобы не было бонуса для них, если божество совпадает с божеством заклинателя. Как это сделать?

Сообщение отредактировал DilanZendal - Aug 14 2010, 15:46
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

14 страниц V  « < 10 11 12 13 14 >
Ответить в эту темуОткрыть новую тему
6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 19th July 2025 - 20:04