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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
205 страниц V  « < 141 142 143 144 145 > »   
Ответить в эту темуОткрыть новую тему
> Вопросы новичков, Абсолютные глупости
Lex
сообщение Jan 18 2008, 20:56
Сообщение #3536


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

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



Цитата(Paladin262 @ Jan 17 2008, 18:37) *
а вот внешность, у мной же созданых NPC, поменять немогу немогу....

а что ты для этого делаешь? распиши по шагам.

Цитата(Deirdre @ Jan 18 2008, 16:05) *
как заставить врагов появиться после определенного события?

именно появиться? В известном месте, или оно определяться должно динамически? Если место заранее известно, можно на те места поставить waypoints с особыми тэгами и написать скрипт, который бы создавал туда врагов.
Neverwinter Script Source

void main( )
{
CreateObject( OBJECT_TYPE_CREATURE, "рез реф врага", GetLocation( GetObjectByTag( "SP_ENEMY_1" ) ) );
}

этот скрипт создаст 1 врага из палитры с указанным рез-рефом в точке с тэгом SP_ENEMY_1. Попробуй разобраться для начала с созданием 1 НПС.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Deirdre
сообщение Jan 19 2008, 00:39
Сообщение #3537


Level 2
*

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



Цитата(Lex @ Jan 18 2008, 20:56) *
этот скрипт создаст 1 врага из палитры с указанным рез-рефом в точке с тэгом SP_ENEMY_1. Попробуй разобраться для начала с созданием 1 НПС.

О, спасибо! Я обязательно попробую.
Но у меня горе - полетел модуль, после моего химичения с хакпаком "bed" и триггерами вообще перестал загружаться в игру, так что у меня мировая скорбь... (IMG:style_emoticons/kolobok_light/sad.gif) Пошла заливать...

Добавлено через 3 часа 13 минуты 26 секунд

Путем сложных и мрачных манипуляций с импортом\экспортом положение поправлено. Но возник вопрос:
Диалог с хенчменом типа: Держись от меня на среднем расстоянии, не открывай двери, когда я пытаюсь их открыть и пр. - где его выцарапать? Неужели писать самой?
ПыСы: Ребята, я надеюсь, я вас не замучила вопросами)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Paladin262
сообщение Jan 20 2008, 19:57
Сообщение #3538


Level 3
*

Класс: Паладин
Характер: Lawful Good
Раса: Человек



Как мне зделать так, чтобы при нажатии на открытый люк перс переходил в определённую облость, и в место в той же области?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Jan 20 2008, 23:05
Сообщение #3539


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

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



Paladin262, поставь точку с тагом, например, WP001 где тебе нужно, а на люк в OnUsed повесь скрипт:

Neverwinter Script Source

void main( )
{
obect oPC = GetEnteringObject( );
object oWaypoint = GetNearestObjectByTag( "WP001" );

if( !GetIsObjectValid( oWaypoint ) )
  {oWaypoint  = GetObjectByTag( "WP001" );}


DelayCommand( 1.0, AssignCommand( oPC , JumpToObject( oWaypoint ) );
}


Сообщение отредактировал Melisse - Jan 20 2008, 23:07
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Paladin262
сообщение Jan 21 2008, 19:05
Сообщение #3540


Level 3
*

Класс: Паладин
Характер: Lawful Good
Раса: Человек



Цитата(Melisse @ Jan 21 2008, 01:05) *

Понятно... почти. точку, это теггер штли? если да, то какой??? И ещё что касается лестниц, для них такойже скрипт?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Jan 21 2008, 21:29
Сообщение #3541


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

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



В русской версии называется "точки маршрута", в англ. не знаю ^_^, наверное Point или Waypoint.

>И ещё что касается лестниц, для них такойже скрипт?
Для лестниц,которые плэйсами да. Только тебе придется создать отдельный скрипт, с новым тагом. Хотя можешь использовать вот такую хитрость:

Ставь точку с тагом WP_Таг Плэйса. Если сделать так, то не надо будет каждый раз создавать новый скрипт для каждого "плэса с переходом".


Neverwinter Script Source
void main( )
{
obect oPC = GetEnteringObject( );
object oWaypoint = GetNearestObjectByTag( "WP_"+GetTag( OBJECT_SELF ) );

if( !GetIsObjectValid( oWaypoint ) )
  {oWaypoint  = GetObjectByTag(  "WP_"+GetTag( OBJECT_SELF ) );}


DelayCommand( 1.0, AssignCommand( oPC , JumpToObject( oWaypoint ) );
}


Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Deirdre
сообщение Jan 26 2008, 02:02
Сообщение #3542


Level 2
*

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



Цитата(Lex @ Jan 18 2008, 20:56) *
именно появиться? В известном месте, или оно определяться должно динамически? Если место заранее известно, можно на те места поставить waypoints с особыми тэгами и написать скрипт, который бы создавал туда врагов.

Враги должны появляться после определенного события. Т.е. РС нашел записку, прочитал ее - и они появились. Не нашел - их нет.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Jan 26 2008, 06:17
Сообщение #3543


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

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



Цитата
Враги должны появляться после определенного события. Т.е. РС нашел записку, прочитал ее - и они появились. Не нашел - их нет.

Я когда-то написал универсальный скрипт респауна монстров с проверкой локалки на герое. Рекомендую, если конечно разберете, что там к чему… (IMG:style_emoticons/kolobok_light/biggrin.gif)
На этой странице, самый последний скрипт: http://remmgen.narod.ru/tvstrechi.html
Цитата(Paladin262 @ Jan 21 2008, 19:05) *
Понятно... почти. точку, это теггер штли? если да, то какой??? И ещё что касается лестниц, для них такойже скрипт?

P.S. Эти скрипты уже давно написаны и 100 раз выложены:
P.S. Эти скрипты уже давно написаны и 100 раз выложены:
Скрипт Айва: http://www.city-of-masters.ru/forums/index...ost&p=53411
Мой: http://remmgen.narod.ru/tplace.html

Сообщение отредактировал gennady - Sep 4 2010, 16:48
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Jan 26 2008, 19:20
Сообщение #3544


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

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



Цитата(Deirdre @ Jan 26 2008, 02:02) *
РС нашел записку

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

События позволяющее узнать читал игрок записку или нет -- нету. Есть функция позволяющая узнать смотрит ли игрок на определённый объект (но тут нужно ещё протестировать работает ли с итемами в инвентории), но тогда её надо проверять каждые полсекунды -- в общем, игра не стоит свеч. Лучше при поднятии записки обновить журнал, а там наваять: "Прочитав тайные планы конспиративной ячейки ниндзя-сатанистов вы узнали, что..." в общем, чтобы игрок обратил на это событие внимание.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lordeath
сообщение Feb 17 2008, 12:29
Сообщение #3545


Level 2
*

Класс: Оборотень
Характер: True Neutral
Раса: Эльф



Несколько глупых вопросов:
1.Ковыряюсь в одном модуле, за убийство монстров в нем дают очень много опыта и денег- не могу найти где уменьшить количество опыта и денег за убийство.
2.подскажите пожалуйста кк будет выглядеть стандартный скрипт на отдых с той разницей лишь что отдыхать можно раз в 10 минут (реальных).
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Feb 17 2008, 15:35
Сообщение #3546


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

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



1. Опыт удаляем на вкладке Модульные свойства в
панели “Улучшенный”, тут можно задать опыт за уничтожение монстров, и выбрать длительность игрового часа, обычно час равен двум минутам реального времени. Учтите, что чем больше монстр имеет ХР, тем больше получит герой опыта…
2. Нужно повесить на героя локалку о отдыхе. а через определенное время ее снять. Вот для примера простой скриптик отдыха. Отдыхаем 1 час игрового времени и 10 минут реального не сможем воспользоваться отдыхом:

Neverwinter Script
//::///////////////////////////////////////////////
//:: Слот: OnPlayerRest - Модульные свойства
//::///////////////////////////////////////////////

////////  СНЯТЬ ЭФФЕКТЫ И ВЫЛЕЧИТЬ ГЕРОЯ  /////////
void FakeRestore(object oTarget)
{
int nHeal = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget);
effect eHeal = EffectHeal(nHeal);
effect eBad = GetFirstEffect(oTarget);
  while(GetIsEffectValid(eBad))
    {
    RemoveEffect(oTarget, eBad);
    eBad = GetNextEffect(oTarget);
    }
  ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
}
/////////////////////////////////////////////////////////////////////////////////////
void main()
{
object oPC = GetFirstPC();
int iTH = GetTimeHour();
int iRest = GetLocalInt(oPC, "REST");

///////////////////////////    START      /////////////////////////////////////
if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
{
  if(iRest==1) // Блокировка отдыха
{
  SendMessageToPC(oPC, "Вы не можете так часто отдыхать!");
  AssignCommand(oPC,ClearAllActions(TRUE));
  return;
}
  SetCommandable(FALSE, oPC); // заблокировать очередь
  DelayCommand(4.0, FadeToBlack(oPC, FADE_SPEED_SLOW)); // Занавес из черного экрана
  DelayCommand(18.0, FadeFromBlack(oPC, FADE_SPEED_SLOW)); // Уберем занавес
}
//////////////////////////////    FINISH    ///////////////////////////////////
if (GetLastRestEventType() == REST_EVENTTYPE_REST_FINISHED)
  {
  iTH = iTH+1;
  SetTime(iTH,0,0,0);
  SendMessageToPC(oPC, "Вы отдыхали 1 час.");
  SetCommandable(TRUE, oPC); // разблокировать очередь
  FakeRestore(oPC); // Если нужно удалить вредные эффекты
  // ВРЕМЯ БЛОКИРОВКИ
  SetLocalInt(GetFirstPC(),"REST",1);
  DelayCommand(600.0, SetLocalInt(GetFirstPC(),"REST",0));
  }
}

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lordeath
сообщение Feb 17 2008, 18:04
Сообщение #3547


Level 2
*

Класс: Оборотень
Характер: True Neutral
Раса: Эльф



Спасибо большое.

С отдыхом разобрался, а вот на опыт видать стоит какой то скрипт (поставил шкалу ХР на "3" и теперь очки опыта выдаются 2 раза). Где он может быть? -)
На картинке лог боя.

Сообщение отредактировал Lordeath - Feb 17 2008, 18:08
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Feb 18 2008, 13:45
Сообщение #3548


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

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



Посмотри скрипт nw_c2_default7, может там?....а если тебе нужно убрать опыт "по умолчанию" то тебе писали уже -> см. пункт 1 у gennady
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
v1t3q
сообщение Feb 18 2008, 16:41
Сообщение #3549


Level 1


Класс: Монах
Характер: True Neutral
Раса: Гигант



Вопросец тут назрел =)
Вообщем,есть нпс и у него несколько веток разговора.Как сделать что бы при начале диалога ветка выбиралась случайно?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lordeath
сообщение Feb 18 2008, 17:29
Сообщение #3550


Level 2
*

Класс: Оборотень
Характер: True Neutral
Раса: Эльф



Цитата(Melisse)
Посмотри скрипт nw_c2_default7, может там?....а если тебе нужно убрать опыт "по умолчанию" то тебе писали уже -> см. пункт 1 у gennady

К сожалению какие либо изменение скрипта nw_c2_default7 (изменял все что можно и полностью тер) ни к чему не привели. Мне нужно убрать как раз таки опыт, который сделал авторп модуля, а по умолчанию как ставить я понял.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Feb 18 2008, 20:54
Сообщение #3551


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

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



открой модуль и посмотри монстров в кастомной палитре или на картах, какие там стоят скрипты в слоте onDeath. Если автор модуля писал свои скрипты на экспу, то только туда.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lordeath
сообщение Feb 18 2008, 22:12
Сообщение #3552


Level 2
*

Класс: Оборотень
Характер: True Neutral
Раса: Эльф



Вроде стандартный
Neverwinter Script
//:://////////////////////////////////////////////////
//:: NW_C2_DEFAULT7
/*
  Default OnDeath event handler for NPCs.

  Adjusts killer's alignment if appropriate and
  alerts allies to our death.
*/

//:://////////////////////////////////////////////////
//:: Copyright © 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////

#include "x2_inc_compon"
#include "x0_i0_spawncond"
#include "give_custom_exp"

void main()
{
    int nClass = GetLevelByClass(CLASS_TYPE_COMMONER);
    int nAlign = GetAlignmentGoodEvil(OBJECT_SELF);
    object oKiller = GetLastKiller();
    give_custom_exp(oKiller, OBJECT_SELF, 0);
    // If we're a good/neutral commoner,
    // adjust the killer's alignment evil
    if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
    {
        AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5);
    }

    // Call to allies to let them know we're dead
    SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);

    //Shout Attack my target, only works with the On Spawn In setup
    SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);

    // NOTE: the OnDeath user-defined event does not
    // trigger reliably and should probably be removed
    if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(1007));
    }


В скриптах я полный нуб, но думаю мб дело в

#include "x2_inc_compon"
#include "x0_i0_spawncond"
#include "give_custom_exp"

На всякий случай вот "give_custom_exp"
Neverwinter Script
//#include "NW_I0_GENERIC"
//#include "_inc_inventory"
//void main(){}
// Remove this line if Scrotok's corpse code is not used.
//#include "_kb_loot_corpse"


//int  Debug = FALSE;          // Set to TRUE enables several debug lines.
                              // Debug info includes party shares, etc.

//int  Double_EXP = TRUE;      // Set to TRUE enables seeing first the PW
                              // experience followed by Bioware experience.
                              // This is useful to compare values.

float Experience_Slider = 0.42;// This is the percentage that can be adjusted.
                              // This value matches the Bioware slider.
float Exp_Level_Cap = 3.0;    // This is the basic CR cap.

int  Boss_Cap_Method = 3;    // These are mode sets for how bosses are handled
                              // Mode 1:  The CR of the boss is modified.
                              //          The exp cap is left at +8 CR.
                              // Mode 2:  The CR of the boss is left alone.
                              //          The exp cap is raised by the mod.
                              // Mode 3:  The CR of the boss is modified.
                              //          The exp cap is raised by the mod.

float Lower_Exponent = 1.50// This is the exponent that defines how exp
                              // drops off when the CR is lower than player.

float Higher_Exponent = 1.20// This is the exponent that defines how exp
                              // increases whent he CR is higher than player.

float Party_Proximity = 25.0// The distance a party member must be to get a
                              // share of the experience.

float Leveling_Exponent = 1.20;// This exponent defines how fast the exponent is
                              // when determining party shares.
                              // The following is the level difference and
                              // how it relates to shares:
                              // 1.10  at  10 levels difference = 1.63 shares
                              // 1.20  at  10 levels difference = 6.19 shares
                              // 1.30  at  10 levels difference = 13.79 shares

float Familiar_Split = 0.01// The ratio of shares that a familiar or animal
                              // companion receives.

float Henchman_Split = 0.01// The ratio of shares that a henchman or
                              // summoned creature receives.



    //  Absolutely, Positively do not call this function inside another loop
    //  that uses GetNextPC.  This can be used inside GetNextFactionMember().
void SendMessageToParty( object oMember, string sText )
  {

  object oPartyMember = GetFirstPC();
  while( GetIsObjectValid(oPartyMember) )
    {
    if( GetFactionEqual( oPartyMember, oMember ) )
      SendMessageToPC( oPartyMember, sText );
    oPartyMember = GetNextPC();
    }
  }

//  This routine comes from and idea from Tone Eternal.
//  It limits a player from gaining more experience after reaching enough to
//  continue to the next level.  This is not really a bug, but a short-coming
//  of the Bioware code.
//  This function is not used in version 1.4 or higher, but can be installed.


int GetLevel(object oPlayer)
{
    int iXP = GetXP(oPlayer);
    if(iXP < 1000)
        return 1;
    else if(iXP < 3000)
        return 2;
    else if(iXP < 6000)
        return 3;
    else if(iXP < 10000)
        return 4;
    else if(iXP < 15000)
        return 5;
    else if(iXP < 21000)
        return 6;
    else if(iXP < 28000)
        return 7;
    else if(iXP < 36000)
        return 8;
    else if(iXP < 45000)
        return 9;
    else if(iXP < 55000)
        return 10;
    else if(iXP < 66000)
        return 11;
    else if(iXP < 78000)
        return 12;
    else if(iXP < 91000)
        return 13;
    else if(iXP < 105000)
        return 14;
    else if(iXP < 120000)
        return 15;
    else if(iXP < 136000)
        return 16;
    else if(iXP < 153000)
        return 17;
    else if(iXP < 171000)
        return 18;
    else if(iXP < 190000)
        return 19;
    else if(iXP < 210000)
        return 20;
    else if(iXP < 231000)
        return 21;
    else if(iXP < 253000)
        return 22;
    else if(iXP < 276000)
        return 23;
    else if(iXP < 300000)
        return 24;
    else if(iXP < 325000)
        return 25;
    else if(iXP < 351000)
        return 26;
    else if(iXP < 378000)
        return 27;
    else if(iXP < 406000)
        return 28;
    else if(iXP < 435000)
        return 29;
    else if(iXP < 465000)
        return 30;
    else if(iXP < 496000)
        return 31;
    else if(iXP < 528000)
        return 32;
    else if(iXP < 561000)
        return 33;
    else if(iXP < 595000)
        return 34;
    else if(iXP < 630000)
        return 35;
    else if(iXP < 666000)
        return 36;
    else if(iXP < 703000)
        return 37;
    else if(iXP < 741000)
        return 38;
    else if(iXP < 780000)
        return 39;
    else return 40;
}

//  The main routine for giving experience to the player.
//  Created by David Bills.

void give_custom_exp( object oKiller, object oDead, int nCRMod )
{
    // Custom DMG EXP Script (varies slightly on bonuses and penalties)
    // Concept and Original Code By Helznicht
    // Syntax Clean-Up and Area Check Award by Mmealman
    // Major bug rennovation by David Bills.  1-9-03
    // Basic experience for creatures is around Bioware 3%.
    // To adjust this, modify the polynomial equation below.

    if( GetLocalInt( oDead, "AlreadyDyingEXP" ) == 1 )
    {
        DeleteLocalInt(oDead, "AlreadyDyingEXP");
        return;
    }

    // First get all the members of the party
    float LowestLevelMember = 1000.0;
    float HighestLevelMember = -10.0;

    float PartyShares = 0.0;
    float fLevel = 0.0;
    float fCRMod = IntToFloat( nCRMod );

    object oMaster, oHighest, oLowest;

    int bOld;
    int nTotalMembers = 0;
    int flxp1;
    int flxp;

    //check to see if oKiller was summon/familiar.  if so, changes oKiller to summon master.
    oMaster  = GetMaster(oKiller);
    if (GetIsObjectValid(oMaster))
    {
        if (oKiller == GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oMaster)        ||
            oKiller == GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oMaster) ||
            oKiller == GetAssociate(ASSOCIATE_TYPE_DOMINATED, oMaster)      ||
            oKiller == GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oMaster)        ||
            oKiller == GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMaster)        ||
            oKiller == GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMaster))
                oKiller = oMaster;

    }


    object oPartyMember = GetFirstFactionMember(oKiller, FALSE );
    while( GetIsObjectValid(oPartyMember) && GetIsPC(oKiller))
    {
        if( GetArea(oKiller) == GetArea(oPartyMember)                      &&
            GetCurrentHitPoints( oPartyMember ) > 0                        &&
            GetDistanceBetween( oKiller, oPartyMember ) < Party_Proximity  )
          {
            nTotalMembers++;

            if( GetIsPC( oPartyMember ) )
                fLevel = IntToFloat( GetLevel( oPartyMember ) );
            else
                fLevel = IntToFloat(GetHitDice( oPartyMember ));
            if( LowestLevelMember > fLevel )
            {
                LowestLevelMember = fLevel;
                oLowest = oPartyMember;
            }
            if( HighestLevelMember < fLevel )
            {
                HighestLevelMember = fLevel;
                oHighest = oPartyMember;
            }
        }
        oPartyMember = GetNextFactionMember(oKiller, FALSE);
    }

    // Now we need to test for the Really low level creatures.
    // They need to be scaled as negative level to function properly.
    float fChallenge = GetChallengeRating( oDead );
    if( fChallenge < 1.0 )
        fChallenge =  1.0 - (( 1.0 - fChallenge ) * 5.0);

    // This is the level difference of the dead to the highest
    fLevel = fChallenge - HighestLevelMember;

    if( Boss_Cap_Method == 1 )
    {
        fLevel += fCRMod;
        if( fLevel >= Exp_Level_Cap )
            fLevel = Exp_Level_Cap;
    }
    else if( Boss_Cap_Method == 2 )
    {
        if( fLevel >= Exp_Level_Cap+fCRMod )
            fLevel = Exp_Level_Cap+fCRMod;
    }
    else
    {
        if( fLevel >= Exp_Level_Cap )
            fLevel = Exp_Level_Cap;
        fLevel += fCRMod;
    }


    //Calculate basic value of kill
    float FinalMonValue = 84.0 * HighestLevelMember + 750;

    // This is the exponential function to match the 3e rules.
    // There is some adjustment here to allow for smooth transitions.
    if( fLevel < 0.0 )
        FinalMonValue = FinalMonValue * pow( Lower_Exponent, fLevel );
    else
        FinalMonValue = FinalMonValue * pow( Higher_Exponent, fLevel );
    FinalMonValue = FinalMonValue * Experience_Slider;
    if( FinalMonValue < 0.0 )
        FinalMonValue = 0.0;

    PartyShares = 1.0;

    int nPenalty;
    if( PartyShares > 0.0 )
    {
        //Determine the value of the Split EXP
        // This is based on shares compared to the lowest member to the heighest.
        int SFEint;

        //Distribute EXP to all PCs in the Party based upon shares.
        float fMonst = GetChallengeRating(oDead);
        int HighestLevel = FloatToInt(HighestLevelMember);

        oPartyMember = GetFirstFactionMember(oKiller, TRUE);
        while ( GetIsObjectValid(oPartyMember) )
        {
          int iLeech =  HighestLevel - GetHitDice(oPartyMember);
            if (GetArea(oKiller) == GetArea(oPartyMember)                      &&
                GetCurrentHitPoints( oPartyMember ) > 0                        &&
                GetDistanceBetween( oKiller, oPartyMember ) < Party_Proximity  &&
                iLeech <= 10 )
            {
                SFEint = FloatToInt( FinalMonValue );

                int nCurLevel;
                if(HighestLevel > GetLevel(oPartyMember)+3)
                {
                    nCurLevel = FloatToInt(HighestLevelMember);
                }
                else
                {
                    nCurLevel = GetLevel(oPartyMember);
                }
                if(nCurLevel <= FloatToInt(fMonst)+3)
                {
                    if(GetLevel(oPartyMember) <= 5)
                        SFEint *= 2;

                    if(SFEint > 500)
                        SFEint = 500;

                    GiveXPToCreature(oPartyMember, SFEint);

                    int iCR = FloatToInt(fMonst);
                    int iGP = d20(1);
                    int iGPT = iGP + iCR*15;
                    if (iGPT < 1)
                    {
                        GiveGoldToCreature(oPartyMember, 1);
                    }
                    else
                    {
                        if(GetLevel(oPartyMember) < 5)
                            iGPT *= 2;
                        GiveGoldToCreature(oPartyMember, iGPT);
                    }
                }
                else
                {
                    GiveGoldToCreature(oPartyMember, 1);
                    GiveXPToCreature(oPartyMember, SFEint);
                }
            }
            oPartyMember = GetNextFactionMember(oKiller, TRUE);
        }
    }
}
Причины изменения: Для скриптов есть код с тегом [NSS] [/NSS]
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Alian REXis
сообщение Feb 18 2008, 22:39
Сообщение #3553


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

Класс: Обыватель
Характер: True Neutral
Раса: Человек
NWN: Модмейкер
Начало Войны



В первом скрипте эту строчку закомментируй:
Neverwinter Script
give_custom_exp(oKiller, OBJECT_SELF, 0);

И перекомпилировать не забудь.

Сообщение отредактировал Alian REXis - Feb 18 2008, 22:40
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Feb 19 2008, 00:10
Сообщение #3554


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

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



Цитата
Вопросец тут назрел =)
Вообщем,есть нпс и у него несколько веток разговора.Как сделать что бы при начале диалога ветка выбиралась случайно?


вариантов много. Можно использовать переменные, можно просто рандом на StartCondition например вешать на "текст появляется при" скрипт
Neverwinter Script
int StartingConditional()
{

    if(Random(2) >= 1)
        return TRUE;

    return FALSE;
}


Вообще способов много. Все описывалось тут на форуме многократно, поищи.



Сообщение отредактировал Melisse - Feb 19 2008, 00:12
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ilerien
сообщение Feb 19 2008, 01:45
Сообщение #3555


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

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



Цитата
Вопросец тут назрел =)
Вообщем,есть нпс и у него несколько веток разговора.Как сделать что бы при начале диалога ветка выбиралась случайно?
Можно что-то типа этого:
1) инициализация диалога, первая ветка - не важно, какой в ней текст (в слот ветки для условных скриптов)
Neverwinter Script
int StartingConditional()
{
    //смотрим, сколько у нас веток в диалоге
    //напрямую это сделать нельзя, так что удобно будет руками (опция advanced - variables) запихать количество веток в локальную переменную на неписе
    int nBranchCount = GetLocalInt(OBJECT_SELF, "nBranchCount");
    //задаём ветку
    SetLocalInt(OBJECT_SELF, "nCurrentBranchNumber", Random(nBranchCount) + 1);
    //выходим из ветки
    return FALSE;
}

2) Скрипты на каждой ветке - достаточно создать столько скриптов, сколько максимально планируется веток в таких диалогах. Скрипты вида:
Neverwinter Script
//номер ветки
const int BRANCH_NUMBER = 1;

int StartingConditional()
{
    //проверяем, совпадает ли выпавший выше рандом с номером ветки
    return GetLocalInt(OBJECT_SELF, "nCurrentBranchNumber") == BRANCH_NUMBER;
}

для каждой ветки - скрипт со своим значением BRANCH_NUMBER (я привёл для первой).
Скрипты помещать в условные слоты каждой ветки (в русском переводе "текст появляется при" *поклон в сторону Мел* (IMG:style_emoticons/kolobok_light/smile.gif) )

Сообщение отредактировал Ilerien - Feb 19 2008, 01:50
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lordeath
сообщение Feb 19 2008, 12:03
Сообщение #3556


Level 2
*

Класс: Оборотень
Характер: True Neutral
Раса: Эльф



Цитата
В первом скрипте эту строчку закомментируй:

А можно нубу показать как это делается? -)
Как перекомпилировать знаю.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Alian REXis
сообщение Feb 19 2008, 13:21
Сообщение #3557


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

Класс: Обыватель
Характер: True Neutral
Раса: Человек
NWN: Модмейкер
Начало Войны



Вот так (IMG:style_emoticons/kolobok_light/smile.gif)
Neverwinter Script
//give_custom_exp(oKiller, OBJECT_SELF, 0);

Теперь эта строчка не будет обрабатываться компилятором.

Сообщение отредактировал Alian REXis - Feb 19 2008, 13:24
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lordeath
сообщение Feb 19 2008, 14:21
Сообщение #3558


Level 2
*

Класс: Оборотень
Характер: True Neutral
Раса: Эльф



Получилось, спасибо (IMG:style_emoticons/kolobok_light/snoozer_17.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NorthWest
сообщение Feb 19 2008, 14:25
Сообщение #3559


Level 2
*

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



"//" без кавычек пред любой строкой делают ее комментарием.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NorthWest
сообщение Feb 22 2008, 17:51
Сообщение #3560


Level 2
*

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



Никто не встречал утилиту, которая может очистить модуль от "остатков" подключаемых когда-то хак-паков ? От скриптов, моделей и т.д. чтобы не вылетал тулсет с ошибкой, когда в локации есть что-то чего нет в ресурсах уже.
Я полазил на ваулте - но не нашёл ничего даже приблизительно подобного =\
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

205 страниц V  « < 141 142 143 144 145 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 2nd August 2025 - 05:04