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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 45 46 47 48 49 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Мефистофель
сообщение May 21 2005, 13:40
Сообщение #1146


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

Класс: Страж Тьмы
Характер: Lawful Good
Раса: Баатезу



Лекс Громадное спосибо. но вазникло опять куча вопросов.
1. возможно ли поменять ПК, т.е, Скриптом или чем другим переменить ПК на любого другого НПК.?
Здравствуйте, дорогие ВРГшники, очень прошу мне помочь со скриптом.
Дак вот в ХотУ был такой скрипт, желейный куб поглощает дроу, а дроу дёргается и превращается в скелета, и, наконец падает.
Вопрос.
Мне нужно поместить скрипт не как кут сцену, а на on Death, чтобы создавать людей которые при убийстве превращались в скелетов дергались и умирали, функции там были какие-то такие, я попробовал фигня не получается, может вы поможете мне, заранее спасибо.
Neverwinter Script Source
void CallSetStatus(int nCutscene, object oObject, int nVal)
{
    if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber"))
    {
        SetLocalInt(oObject, "STATUS", nVal);
    }
}

void CutSetStatus(float fDelay, object oObject, int nVal)
{
}

void CallSetAppearance(int nCutscene, object oObject)
{
    if(nCutscene == GetLocalInt(oObject, "nCutsceneNumber"))
    {
        SetCreatureAppearanceType(oObject, APPEARANCE_TYPE_SKELETON_COMMON);
    }
}

void CutSetAppearance(float fDelay, object oObject)
{
}


QUOTE
AssignCommand(GetLastUsedBy(),ActionSit(OBJECT_SELF));

Лекс нет, я имел ввиду в катсцене,! чтоб ПК сел. на опередённый стул.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение May 21 2005, 15:05
Сообщение #1147


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

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



QUOTE (Мефистофель @ May 21 2005, 14:40)
Лекс нет, я имел ввиду в катсцене,! чтоб ПК сел. на опередённый стул.

и что я тебе сказал, если там сценка?
QUOTE (Lex @ May 20 2005, 21:38)
Ээ..это у тебя часть сценки? Я без остального текста сценки тебе ничего сказать не могу.

Так то...
QUOTE (Мефистофель @ May 21 2005, 14:40)
1. возможно ли поменять ПК, т.е, Скриптом или чем другим переменить ПК на любого другого НПК.?

Чаво??? Превратить НПС в игрока и наоборот..во время игры? Нет. И необходимости никогда не было...

QUOTE (Мефистофель @ May 21 2005, 14:40)
Здравствуйте, дорогие ВРГшники, очень прошу мне помочь со скриптом.

команда WRG является 1% от посетителей форума.. :) Форумчане уж тогда :)
QUOTE (Мефистофель @ May 21 2005, 14:40)
Мне нужно поместить скрипт не как кут сцену, а на on Death, чтобы создавать людей которые при убийстве превращались в скелетов дергались и умирали, функции там были какие-то такие, я попробовал фигня не получается, может вы поможете мне, заранее спасибо.

эм..ты мне не рассказывай, как в ХОТУ, я не играл :)
Надо, чтобы после смерти проигралась какая-то анимация (дерганье тобишь. Стоя они дергались или как?) и превращение в скелетов?

анимация:
Neverwinter Script Source
ActionPlayAnimation(int ANIMATION_*, float fSpeed, float fTime);

превращение..там скорее всего создание на этом месте нового существа - скелета. Это так:
Neverwinter Script Source
CreateObject(int OBJECT_TYPE_*,string ref, location lloc,FALSE);
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение May 21 2005, 17:13
Сообщение #1148


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



Научите меня функцией ActionStartConversation пользоваться :)
Необходимо сделать диалог с плэйсиблом. (хрустальный шар)
пишу:
Neverwinter Script Source
void main()
{
AssignCommand(OBJECT_SELF,ActionStartConversation(GetLastUsedBy(),"l_plc_frostball",TRUE,FALSE));
}

где l_plc_frostball - это имя диалога, ну и ResRef я думаю. Использую шар, диалога нет :xz:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Убо-Сатло
сообщение May 21 2005, 17:25
Сообщение #1149


Level 5
**

Класс: Маг
Характер: True Neutral
Раса: Человек



QUOTE (Лито @ May 21 2005, 18:13)
Научите меня функцией ActionStartConversation пользоваться

Достаточно просто на OnUsed
Neverwinter Script Source
void main()
{
  ActionStartConversation(GetLastUsedBy());
}

А диалог вставить в ->свойства плэйса -> улучшеный-> разговор
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение May 21 2005, 17:30
Сообщение #1150


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



Сейчас попробуемс...
Добавлено в [mergetime]1116686316[/mergetime]
Убо-Сатло Не катит такой способ. Игрок просто подходит к шару и все.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение May 21 2005, 17:53
Сообщение #1151


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

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



QUOTE (Убо-Сатло @ May 21 2005, 18:25)
А диалог вставить в ->свойства плэйса -> улучшеный-> разговор

вот это ты сделал?
Добавлено в [mergetime]1116687381[/mergetime]
QUOTE (Убо-Сатло @ May 21 2005, 18:25)
void main()
{
  ActionStartConversation(GetLastUsedBy());
}

это пашет - 100%.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение May 21 2005, 17:56
Сообщение #1152


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



Конечно :yes: . Все поставил.

Сейчас еще проверю...



Сообщение отредактировал Лито - May 21 2005, 18:04
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Убо-Сатло
сообщение May 21 2005, 17:59
Сообщение #1153


Level 5
**

Класс: Маг
Характер: True Neutral
Раса: Человек



Я могу предположить 2 варианта:
1) Твой плэйс расположен так, что PC не может его использовать(подойти к нему с нужной стороны на нужное расстояние). Когда кликаешь на него, в левом верхнем углу вылазит иконка движения. Если когда PC подошел к плэйсу, иконка не ушла, значит это так.
2) Ну, это на всякий случай, проверь, скрипт стоит на OnUsed? Диалог вставлен? Да, и есть ли еще на этом плэйсе какие-то скрипты? Если есть, то где?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение May 21 2005, 18:05
Сообщение #1154


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



Все я понял в чем дело...Дело в том что там 10 шаров и я не по тому целкал :swoon:

Новый вопрос у меня, дроп золота я сделал. Теперь у меня задача сделать дроп одной случаной вещи из инвенторя. Дальше возможны варианты выпадение вещи по ее стоимости или скажем выпадение одной одетой вещи(кстати дополнительный вопрос: как правильно говорить? Одетой и надетой? :)). (это когда игроки забивают всю сумку хламом...)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Мефистофель
сообщение May 22 2005, 01:16
Сообщение #1155


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

Класс: Страж Тьмы
Характер: Lawful Good
Раса: Баатезу



Lex Большое спасибо, что помогаеш мне, но вотя в этих скриптах дуб дубком, немог бы ты описать более понятным для меня образом.
Neverwinter Script Source
CreateObject(int OBJECT_TYPE_*,string ref, location lloc,FALSE);
?????
Neverwinter Script Source
CreateObject(int OBJECT_TYPE_*,string ref, location lloc,FALSE);
?????

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
JesterX
сообщение May 22 2005, 09:50
Сообщение #1156


Level 1


Класс: Чемпион Торма
Характер: Lawful Good
Раса: Человек



Кто нибудь помогите. Делаю модуль по мотивам книг Ника Перумова - Хранитель мечей, точнее по миру описанному там.
Скриптер из меня никакой. Нужен скрипт:
Герой умирает и переносится в межреальность, там общается и его отправляют назад в место где он погиб.
За основу я взял скрипты (помоему от Аваддон"а),и чуть переделал.

OnPlayerDying Герой без сознания.

void bleed(int iBleedAmt)
{

effect eShake=EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
effect eBleedEff;
if (GetCurrentHitPoints() <= 3) {
SpeakStringByStrRef (110519);
if (iBleedAmt > 0) {
eBleedEff = EffectDamage(iBleedAmt);
} else {
eBleedEff = EffectDamage(iBleedAmt);
}
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBleedEff, OBJECT_SELF);
if (GetCurrentHitPoints() <= -10) {
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), OBJECT_SELF);
return;
}

if (iBleedAmt > 0) {
if (d10(1) == 1) {
iBleedAmt = -iBleedAmt;
}
}
}
DelayCommand(6.0,bleed(iBleedAmt));
}




void main()
{
effect eBlood=EffectVisualEffect(VFX_COM_CHUNK_RED_MEDIUM);
object oDying = GetLastPlayerDying();
object oEnemy = GetLastAttacker();
float fWho = (GetFacing(oEnemy));
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eBlood, GetLocation(oDying), 10.0);
AssignCommand(oDying, ClearAllActions());
AssignCommand(oDying, bleed(1));
CreateObject(OBJECT_TYPE_PLACEABLE,"bloody",GetLocation(oDying),TRUE);

}



Далее OnPlayerDeath Герой умирает и переносится в межреальность.

void main()
{
object oPlayer = GetLastPlayerDied();
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), GetLocation(oPlayer));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MAJOR), oPlayer,6.0);
DelayCommand(2.0,FadeToBlack(oPlayer));
DelayCommand(5.0,BlackScreen(oPlayer));

DelayCommand(5.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer));
DelayCommand(5.8,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPlayer)), oPlayer));
DelayCommand(6.0,AssignCommand(oPlayer,ClearAllActions()));
DelayCommand(6.2,AssignCommand(oPlayer,JumpToLocation(GetLocation(GetObjectByTag("WP_RAISE")))));
}



И еще в локации межреальности - куда перемещается мертвый игрок OnEnter

void main()
{
object oPC = GetEnteringObject();
DelayCommand(2.0,FadeFromBlack(oPC,FADE_SPEED_SLOWEST));
}

Огромная просьба, ПОМОГИТЕ!!! Допишите скрипт пожалуйста.

P.S. Нужен еще один скрипт, который я поставлю на ветвь разговора. И чуть дописать скрипт на OnPlayerDeath. [COLOR=red][COLOR=red]
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение May 22 2005, 10:28
Сообщение #1157


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



QUOTE (Мефистофель @ May 22 2005, 01:16)
Lex Большое спасибо, что помогаеш мне, но вотя в этих скриптах дуб дубком, немог бы ты описать более понятным для меня образом.
Neverwinter Script Source
CreateObject(int OBJECT_TYPE_*,string ref, location lloc,FALSE);

Neverwinter Script Source
CreateObject(int OBJECT_TYPE_*,string ref, location lloc,FALSE);


Это просто пример функции.
на место int OBJECT_TYPE_* - ставишь константу, типа объекта(плэйсибл, существо и т.д.)
string ref - РесРеф создаваемого объекта.
location lloc - куда объект создается.
FALSE - эффект "появления". Например паук спускается по нити паутины...

2JesterX, гм...ты же сам все сделал.

Сообщение отредактировал Лито - May 22 2005, 10:30
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Archangel
сообщение May 22 2005, 11:03
Сообщение #1158


Восставший из пепла
***

Класс: Бледный Мастер
Характер: Neutral Evil
Раса: Человек
ПОДМАСТЕРЬЕ



Люди, памажите! Вот скрипт:
Neverwinter Script Source
void main()
{
object oTK=GetObjectByTag("TK");
object oSTK1=GetObjectByTag("STK1");
object oED=GetObjectByTag("IN_HOME_AREA_D1");
object oMD1=GetObjectByTag("HOME_AREA_BIG_DOOR");
object oMD2=GetObjectByTag("CENTER_AREA_BIG_DOOR");
object oTKWP0=GetWaypointByTag("TKWP0");
object oTKWP1=GetWaypointByTag("TKWP1");
object oTKWPEND=GetWaypointByTag("TKWPEND");
object oMTK1=GetObjectByTag("MTK1");
if (GetIsDay() && GetLocalInt(oTK, "Day") != 1)
{
ActionSpeakString("Äîáðîå óòðî!");
ActionForceMoveToObject(oED);
ActionJumpToObject(oTKWP0);
ActionForceMoveToObject(oMD1);
ActionJumpToObject(oTKWP1);
SetLocalInt(oTK, "Day", 1);
SetLocalInt(oTK, "Night", 0);
return;
}
if (GetIsNight()&& GetLocalInt(oTK, "Night") != 1)
{
ActionSpeakString("Óõ. Ïîçäíî óæå. Ïîéäó äîìîé...");
ActionForceMoveToObject(oMD2);
ActionJumpToObject(oTKWPEND);
ActionSit(oSTK1);
ActionWait(120.0);
ActionForceMoveToObject(oMTK1);
ActionPlayAnimation(ANIMATION_LOOPING_GET_MID);
ActionForceMoveToObject(oTKWPEND);
ActionPlayAnimation(ANIMATION_FIREFORGET_TAUNT);
ActionPlayAnimation(ANIMATION_FIREFORGET_TAUNT);
ActionPlayAnimation(ANIMATION_FIREFORGET_TAUNT);
ActionPlayAnimation(ANIMATION_FIREFORGET_TAUNT);
ActionPlayAnimation(ANIMATION_FIREFORGET_TAUNT);
ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE);
ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE);
ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE);
ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE);
ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE);
ActionPlayAnimation(ANIMATION_LOOPING_LISTEN);
ActionPlayAnimation(ANIMATION_LOOPING_LISTEN);
ActionPlayAnimation(ANIMATION_LOOPING_LISTEN);
ActionPlayAnimation(ANIMATION_LOOPING_LISTEN);
ActionPlayAnimation(ANIMATION_LOOPING_LISTEN);
ActionSit(oSTK1);
SetLocalInt(oTK, "Day", 0);
SetLocalInt(oTK, "Night", 1);
return;
}
}

Но почему-то, когда НеПиСь выполняет команду ActionSit, то он больше не встает со стула! Почему же так происходит? Все компилится без проблем.
Я пытался после этой ф-ии ставить ClearAllActions(), но непомогает. Так же пытался все преплести к DelayCommand, но толку никакого... :vava:
Кто-нибудь знает в чем загвостка?
ЗЫ
Скрипт ставится в OnHeartBeat НеПиСя.


Сообщение отредактировал Archangel - May 22 2005, 11:04
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение May 22 2005, 15:01
Сообщение #1159


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



Вобщем система выпадения одной шмотки из слота при смерти PС и золота, была написана...
Если кому интересно то вот:
Neverwinter Script Source
object oDrop=OBJECT_INVALID;
int nSlot;
int nGP = GetGold(oPC);
int k;
int i;
int nChance=0;
if(GetHitDice(oPC)<6)nChance=70;
if((Random(100)+nChance)<(60+GetHitDice(oPC)))
{
k=Random(11);
for(i=k;oDrop==OBJECT_INVALID; )
{
switch(i)
{
  case 0:nSlot=INVENTORY_SLOT_ARMS;break;
  case 1:nSlot=INVENTORY_SLOT_BELT;break;
  case 2:nSlot=INVENTORY_SLOT_BOOTS;break;
  case 3:nSlot=INVENTORY_SLOT_CHEST;break;
  case 4:nSlot=INVENTORY_SLOT_CLOAK;break;
  case 5:nSlot=INVENTORY_SLOT_HEAD;break;
  case 6:nSlot=INVENTORY_SLOT_LEFTHAND;break;
  case 7:nSlot=INVENTORY_SLOT_LEFTRING;break;
  case 8:nSlot=INVENTORY_SLOT_NECK;break;
  case 9:nSlot=INVENTORY_SLOT_RIGHTHAND;break;
  case 10:nSlot=INVENTORY_SLOT_RIGHTRING;break;
}
oDrop=GetItemInSlot(nSlot,oPC);
i++;
if(i==11) i=0;
if(i==k)break;
}
}
object oCorpse = CreateObject(OBJECT_TYPE_PLACEABLE,"pc_corpse",GetLocation(oPC),TRUE); //плэйс трупа игрока
AssignCommand(oCorpse,TakeGoldFromCreature(nGP,oPC,FALSE));//забираем GP
AssignCommand(oCorpse,ActionTakeItem(oDrop,oPC));//забираем вещь

Из игроков левелом 5 или меньше, вещи не падают, только золото. Есть шанс выпадения. У 10 -70%,у 20 уровня он равен 80%,у 30 - 90%, у 40%...
Если вещей в слотах не было найдено, то тогда ничего не выпадает.
Собственно есть задача с которой я не могу справится. Я хочу переписать систему смерти на шарде. При смерти игрока кидает в фугу, где он либо входит в портал, за что с него снимают n-кол-во XP, либо ждет пока его реснут(скастовав райз или резурект на труп, который создается на месте смерти.)
Вот с момента воскрешения начинаются проблемы...
Пробовал реализовать через стринги которые накладываются при смерти на труп и на игрока.
Neverwinter Script Source
void main()
{
object oPC =GetNextPC();
string sPCName = GetPCPlayerName(oPC);

if(GetSpellId()==SPELL_RAISE_DEAD)
{
if(GetLocalString(OBJECT_SELF,"NAME")==sPCName)
{
AssignCommand(oPC,JumpToLocation(GetLocation(OBJECT_SELF)));
int nPenalty =100*GetHitDice(oPC);
    int nXP = GetXP(oPC);
    int nNewXP = nXP - nPenalty;
    SetXP(oPC,nNewXP);
}
}
}

И если они равны, применять к игроку в фуге необходимые эффекты, но! я на 100% уверен, что -
Neverwinter Script Source
object oPC =GetNextPC();
уже не верно.
Даже не знаю как реализовать :xz: , помогайте мастера :shout:

Сообщение отредактировал Лито - May 22 2005, 15:01
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение May 22 2005, 17:07
Сообщение #1160


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



а причем тут GetNextPC()?! - это функция получения следущего объекта игрока при перечислении игроков. тебе надо при создании трупа игрока на объект трупа вешать ссылку на объект игрока. и потом при юзании резурректа на труп, читать с него переменную объекта игрока и уже с ней работать.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение May 22 2005, 17:20
Сообщение #1161


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



dumbo, что надо использовать не GetNextPC() мне понятненько, а вот это:
1п.
QUOTE
вешать ссылку на объект игрока
- нет, как это сделать?

Я надеюсь что пойму вот это:
2п.
QUOTE
читать с него переменную объекта игрока и уже с ней работать.

Но для начала надо разобратся с 1п :xz:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение May 22 2005, 18:28
Сообщение #1162


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



где-то в подыхании игрока стоит что-то вроде:
Neverwinter Script Source
object oPC = OBJECT_SELF;
// где ж мы сдохли?
location lLoc = GetLocation(oPC);
// трупик
object oCorpse = CreateObject(
                  OBJECT_TYPE_PLACEABLE,
                  "resref_трупика", lLoc, FALSE);
// повесить ссылку на трупик (установить переменную-объект)
SetLocalObject(oCorpse, "oOwner", oPC);

и, соответственно, в тоем скрипте воскрешения:
Neverwinter Script Source
object oTarget = GetSpellTargetObject();
if (GetResRef(oTarget) == "resref_трупика")
{
  object oPC = GetLocalObject(oTarget, "oOwner");
  бла-бла-бла с oPC
}
}

ps. и юзайте irc-канал. там самое место для такого чата. :yes:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение May 22 2005, 19:24
Сообщение #1163


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



Собственно поставил на OnPlayerDeath
Neverwinter Script Source
SetLocalObject(oCorpse, GetName(oPC), oPC);

GetName(oPC), потому что делается для шарда, и локалка по идее должна отличатся от локалок других трупов.
и написал вот такой скрипт на OnCastSpell трупа

Neverwinter Script Source
void main()
{
object oTarget = GetSpellTargetObject();
int nSpell = GetLastSpell();
if (GetResRef(oTarget) == "pc_corpse")
{
  object oPC = GetLocalObject(oTarget, GetName(oPC));
  if(nSpell==SPELL_RAISE_DEAD)
  {
  AssignCommand(oPC,ActionJumpToLocation(GetLocation(OBJECT_SELF)));
  DestroyObject(OBJECT_SELF);

    int nPenalty =100*GetHitDice(oTarget);
    int nXP = GetXP(oTarget);
    int nNewXP = nXP - nPenalty;
    SetXP(oTarget,nNewXP);
    object oItem;
    int nSlot;
    AssignCommand(oTarget,ClearAllActions(TRUE));
    DeleteLocalObject(oTarget,GetName(oPC));
    for(nSlot = 0; nSlot < 14; nSlot++)
    {
        oItem = GetItemInSlot(nSlot, oPC);
        if(oItem != OBJECT_INVALID)
        {
            AssignCommand(oTarget, ActionUnequipItem(oItem));
            AssignCommand(oTarget, ActionEquipItem(oItem, nSlot));
        }
        }
  }
  if(nSpell==SPELL_RESURRECTION)
  {
  AssignCommand(oPC,ActionJumpToLocation(GetLocation(OBJECT_SELF)));
  DestroyObject(OBJECT_SELF);
  int nPenalty =50*GetHitDice(oTarget);
    int nXP = GetXP(oTarget);
    int nNewXP = nXP - nPenalty;
    SetXP(oTarget,nNewXP);
    object oItem;
    int nSlot;
    AssignCommand(oTarget,ClearAllActions(TRUE));
    DeleteLocalObject(oTarget,GetName(oPC));
    for(nSlot = 0; nSlot < 14; nSlot++)
    {
        oItem = GetItemInSlot(nSlot, oPC);
        if(oItem != OBJECT_INVALID)
        {
            AssignCommand(oTarget, ActionUnequipItem(oItem));
            AssignCommand(oTarget, ActionEquipItem(oItem, nSlot));
        }
        }
  }
}
}

Проверял так: Убивал сам себя, после чего пытался наложить райз или резурект на свой же труп. Эффект = 0. Где проблема опять же ума не приложу :xz:
Добавлено в [mergetime]1116779131[/mergetime]
QUOTE
ps. и юзайте irc-канал. там самое место для такого чата.

Да...пора бы уже настроить.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение May 23 2005, 02:50
Сообщение #1164


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



Лито, ты своим введением все и поломал. ;)
QUOTE (Лито @ May 22 2005, 20:24)
GetName(oPC), потому что делается для шарда, и локалка по идее должна отличатся от локалок других трупов. и написал вот такой скрипт на OnCastSpell трупа
не должна она отличаться. у каждого трупа своя переменная "oOwner". ты же не путаешь свою ногу с чужой только от того, что они обе называются "нога"? потом еще момент - я писал определение GetSpellTargetObject(), потому как предполагал, что ты изменяешь скрипт спелла(общего). в пределах скрипта OnSpellCastAt это определение бессмысленно. вот эта твоя конструкция вообще не выдерживает никакой критики:
Neverwinter Script Source
object oPC = GetLocalObject(oTarget, GetName(oPC));
по идее, такое не должно компилиться. но тут огреха компилятора - собирает и не пикает. почему ты выставляешь экспу трупу - вообще загадка.. ;) причем, до этого уничтожаешь его(само уничтожение происходит, кстати, только после выхода из скрипта). ладно. от теории к практике:
1. в скрипте смерти вернуть то, что тебе предлагали:
Neverwinter Script Source
SetLocalObject(oCorpse, "oOwner", oPC);

2. скрипт в слот OnSpellCastAt:
Neverwinter Script Source
void main()
{
  // страховка от установки скрипта на другой плэйс
  if (GetResRef(OBJECT_SELF) != "pc_corpse") return;
  object oPC = GetLocalObject(OBJECT_SELF, "oOwner");
  // то, что ты никогда не делаешь, а очень зря! =)
  if (oPC == OBJECT_INVALID) return;

  int nPenalty;
  int nSpell = GetLastSpell();
  if (nSpell == SPELL_RAISE_DEAD)
    nPenalty =100*GetHitDice(oPC);
  else if (nSpell==SPELL_RESURRECTION)
    nPenalty =50*GetHitDice(oPC);
  else return;

  SendMessageToPC(oPC, "Перенадеваем вещи...");
  //все эти команды выполнятся только после завершения скрипта
  AssignCommand(oPC, ClearAllActions(TRUE));
  AssignCommand(oPC, ActionJumpToLocation(GetLocation(OBJECT_SELF)));
  AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING));

  int nXP = GetXP(oPC);
  int nNewXP = nXP - nPenalty;
  SetXP(oPC, nNewXP);

  AssignCommand(oPC, DelayCommand(10.0, ExecuteScript("reequip", oPC)));
  DestroyObject(OBJECT_SELF, 1.0);
}

3. скрипт "переодевания" - reequip.nss
Neverwinter Script Source
void main()
{
  object oItem;
  int nSlot;
  ClearAllActions(TRUE);
  for(nSlot = 0; nSlot < 14; nSlot++)
  {
    oItem = GetItemInSlot(nSlot, OBJECT_SELF);
    if (GetIsObjectValid(oItem))
    {
      ActionUnequipItem(oItem);
      ActionEquipItem(oItem, nSlot);
    }
  }
}

ps. модифицировать это все нужно очень вкурчиво, следить за логикой и очередностью происходящих с объектами операций... :drag:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Мефистофель
сообщение May 23 2005, 07:23
Сообщение #1165


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

Класс: Страж Тьмы
Характер: Lawful Good
Раса: Баатезу



Лито немогли бы вы показать целый скрипт, а то, я ничерта несмыслю.
Заранее спасибо.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
JesterX
сообщение May 23 2005, 08:31
Сообщение #1166


Level 1


Класс: Чемпион Торма
Характер: Lawful Good
Раса: Человек



Кто нибудь помогите. Делаю модуль по мотивам книг Ника Перумова - Хранитель мечей, точнее по миру описанному там.
Скриптер из меня никакой. Герой умирает и переносится в межреальность, там общается и его отправляют назад в место где он погиб. Нужен скрипт телепорта на место смерти героя.
За основу я взял скрипты (помоему от Аваддон"а),и чуть переделал.

OnPlayerDying Герой без сознания.

void bleed(int iBleedAmt)
{

effect eShake=EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
effect eBleedEff;
if (GetCurrentHitPoints() <= 3) {
SpeakStringByStrRef (110519);
if (iBleedAmt > 0) {
eBleedEff = EffectDamage(iBleedAmt);
} else {
eBleedEff = EffectDamage(iBleedAmt);
}
ApplyEffectToObject(DURATION_TYPE_INSTANT, eBleedEff, OBJECT_SELF);
if (GetCurrentHitPoints() <= -10) {
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), OBJECT_SELF);
return;
}

if (iBleedAmt > 0) {
if (d10(1) == 1) {
iBleedAmt = -iBleedAmt;
}
}
}
DelayCommand(6.0,bleed(iBleedAmt));
}




void main()
{
effect eBlood=EffectVisualEffect(VFX_COM_CHUNK_RED_MEDIUM);
object oDying = GetLastPlayerDying();
object oEnemy = GetLastAttacker();
float fWho = (GetFacing(oEnemy));
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eBlood, GetLocation(oDying), 10.0);
AssignCommand(oDying, ClearAllActions());
AssignCommand(oDying, bleed(1));
CreateObject(OBJECT_TYPE_PLACEABLE,"bloody",GetLocation(oDying),TRUE);

}



Далее OnPlayerDeath Герой умирает и переносится в межреальность.

void main()
{
object oPlayer = GetLastPlayerDied();
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), GetLocation(oPlayer));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MAJOR), oPlayer,6.0);
DelayCommand(2.0,FadeToBlack(oPlayer));
DelayCommand(5.0,BlackScreen(oPlayer));

DelayCommand(5.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer));
DelayCommand(5.8,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPlayer)), oPlayer));
DelayCommand(6.0,AssignCommand(oPlayer,ClearAllActions()));
DelayCommand(6.2,AssignCommand(oPlayer,JumpToLocation(GetLocation(GetObjectByTag("WP_RAISE")))));
}



И еще в локации межреальности - куда перемещается мертвый игрок OnEnter

void main()
{
object oPC = GetEnteringObject();
DelayCommand(2.0,FadeFromBlack(oPC,FADE_SPEED_SLOWEST));
}

Огромная просьба, ПОМОГИТЕ!!! Допишите скрипт пожалуйста.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение May 23 2005, 08:35
Сообщение #1167


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



QUOTE
Но почему-то, когда НеПиСь выполняет команду ActionSit, то он больше не встает со стула! Почему же так происходит? Все компилится без проблем.
Я пытался после этой ф-ии ставить ClearAllActions(), но непомогает. Так же пытался все преплести к DelayCommand, но толку никакого... 
Кто-нибудь знает в чем загвостка?
ЗЫ
Скрипт ставится в OnHeartBeat НеПиСя.


...в последнем предложении кроется ответ на твою проблем :lol: "Скрипт ставится в OnHeartBeat НеПиСя. " наводящий вопрос : как часто выполняется скрипт на OnHeartBeat?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение May 23 2005, 08:50
Сообщение #1168


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



JesterX
ты извини, конечно, но напрашивается пародия на твой вопрос:
"я тут делаю модуль. вот нашел скрипт и немного его изменил: object oPC = OBJECT_SELF! помогите! допишите мне скрипт!"
ps. телепаты в отпуске. :yes:
pss. поясняю позицию - что там у тебя за диалоги? - остальное вроде интуитивно понятно, хотя конкретики тоже не помешает. что ты хочешь-то?

Сообщение отредактировал dumbo - May 23 2005, 08:57
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
JesterX
сообщение May 23 2005, 08:57
Сообщение #1169


Level 1


Класс: Чемпион Торма
Характер: Lawful Good
Раса: Человек



Просто мне нужно как-то пометить место смерти и написать скрипт телепорта для отправки игрока на это самое место смерти.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение May 23 2005, 09:01
Сообщение #1170


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



так кинь там трупак... только что ведь обсуждалась очень схожая ситуация! смотри наши терки с Лито.
ps. народ, вам когда что-то такое надо, сами не знаете что или если чувствуете, что предстоит такое вот общение в режиме чата - идите на irc-канал #wrg(как и что - написано вверху страницы). у меня такое ощущение, что модератор уже откинул крышечку с оптики...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 45 46 47 48 49 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 13th July 2025 - 00:12