кажись это Каа писал когда-то давно
Buldog
May 12 2005, 18:36
Может быть, но конкретно это я сочинял сам
Buldog, я так понял, эти скрипты, не только баг фиксят,но так же запинают кол-во спеллов и хитов при выходе, а потом их подгружают при заходе?
*добавлено*
или нет, я что то засомневался, вроде нет.
Buldog
May 12 2005, 18:59
Нет, эта часть только для перезахода в полиморфе
Все разобрался, спасибо Буль, как всегда меня выручил
Buldog
May 12 2005, 19:03
Для сохранения HP и спелов вот эта часть, правда это я не сам писал, но идея мне понятна

Модуль мы не сами делали, а разгребали какой то старый

Вот это в OnClientEnter:
Neverwinter Script Source |
int iSavedHP = GetLocalInt(oStore, sStoreName);
if (iSavedHP != 0) { effect efDamage = EffectDamage(GetMaxHitPoints(oPC)-iSavedHP,DAMAGE_TYPE_MAGICAL,DAMAGE_POWER_ENERGY); ApplyEffectToObject(DURATION_TYPE_INSTANT,efDamage,oPC); }
int k, j, nSpells; for (k = 1; k <= 805; k++) { nSpells = GetLocalArrayInt(oStore, sStoreName+"_spells", k); if (nSpells) for (j = 0; j <= GetHasSpell(k, oPC) - nSpells; j++) DecrementRemainingSpellUses(oPC, k); } |
А вот это в OnClientLeave:
Neverwinter Script Source |
//@by _Kaa_ 20.05.30 #include "nw_o0_itemmaker" void main() { object oPC = GetExitingObject(); object oStore = GetModule(); string sStoreName = GetLocalString(oPC,"HP_MyIdString"); SetLocalInt(oStore, sStoreName, GetCurrentHitPoints(oPC)); int k,nSpells; for (k=1;k<805;k++) { nSpells = GetHasSpell(k,oPC); if (nSpells) SetLocalArrayInt(oStore,sStoreName+"_spells",k,nSpells); } } |
Добавлено в [mergetime]1115914001[/mergetime]
В OnClientEnter тож этот инклюд нужен:
Neverwinter Script Source |
#include "nw_o0_itemmaker" |
Buldog, это у меня стоит
Scaled
May 13 2005, 08:43
Спасибо, вот еще у меня вопросы

:
Как сделать чтобы в закле компонентом была ЛЮБАЯ , скажем, бутылочка с повышением ловкости?
Те не какой-то определенный предмет, а вещь с эффектом?
по идее так: вместо твоей
Neverwinter Script Source |
if (GetTag(oItem)=="TAG") |
сделай
Neverwinter Script Source |
if ((GetBaseItemType(oItem)==BASE_ITEM_POTIONS)&&(ПРОВЕРКА, ЧТО У ВЕЩИ ЕСТЬ СВОЙСТВО - CAST SPELL тебе нужный)) |
проблема в том, что я такой функции не знаю
Scaled
May 16 2005, 10:30
Обьясните мне, плз, как делать респаун в ящике фиксированой шмотки.
Я что не врубаюсь.Скрипт есть шмотка есть, а куда скрипт пихать не понимаю.
Заранее спасибо.
Buldog
May 16 2005, 12:54
Смотря какой скрипт, но, скорей всего, в OnUsed сундука.
Lorendroll
May 16 2005, 14:13
Вот кстати мой скрипт выращивания яблок на кустах

CODE |
#include "nw_i0_plot" void DefaultFoodHeartbeat() { object oFood = OBJECT_SELF; string food_name = GetLocalString(oFood,"food_name"); //Берем локальную переменную с куста int food_max = GetLocalInt(oFood,"food_maximum"); // Максимальное кол-во яблок на кусте int food_amount = GetLocalInt(oFood,"food_crop_amount"); //К-во яблок, вырастающих за 1раз int food_period = GetLocalInt(oFood,"food_crop_period"); //Период вырастания яблок //Если имя объекта на локалинте куста не равно пустоте. if( food_name != "" ) { int food_timer = GetLocalInt(oFood,"food_timer"); //Берем значение таймера int food_count = GetNumItems(oFood, food_name); //И количество выросших яблок //И если настало время... if( food_timer >= food_period ) { // Очищаем таймер SetLocalInt(oFood,"food_timer",0); if( food_count < food_max) { //И создаем объект int i; for(i=0; i < food_amount; i++) { object item = CreateItemOnObject (food_name, oFood, 1); } } } else { // increase the timer SetLocalInt(oFood,"food_timer",food_timer+1); } } }
|
Для сундуков делаем соответственно. Ставим на heartbeat. Для удобства можешь переименовать переменные из food в loot например. На самом сундуке ставь эти переменные. Можно еще сделать генерацию нескоьких видов предмета на этом "кусте" или сундуке и прописывать их теги в соответствующей переменной.
Хотя для сундука действительно лучше на OnUsed, хотя на хертбите все равно доолжен торчать таймер.
CODE |
SetLocalInt(OBJECT_SELF,"timer", timer+1);
|
На он юсд:
CODE |
int timer = GetLocalInt (OBJECT_SELF, "timer"); if( timer >= УКАЗАТЬ ВРЕМЯ В РАУНДАХ ) { // Очищаем таймер SetLocalInt(OBJECT_SELF ,"timer",0); //И создаем объект object item = CreateItemOnObject (ТЕГ ОБЪЕКТА, OBJECT_SELF, 1); }
|
Buldog
May 16 2005, 15:01
Я блоки это конечно хорошо, но вот скрипты для генерации лута куда удобней делать под OnUsed или OnOpen
Scaled
May 18 2005, 23:11
Вопрос о системе выпадения лута. Мне интересно какие скрипты отвечают за это?
Я сделаю палитру вещей и хочу чтобы они выпадали из мобов. Обьесните, плз, как это сделать.
Заранее спасибо.
Buldog
May 19 2005, 00:49
Если ты хочешь, что бы вещи выпадали стандартным образом тебе придется редактировать 2da таблицы, какие сказать немогу, никогда этим не занимался, либо придумать свою собственную систему. Можно генерить лут при спавне моба, тогда нужные действия прописываются в OnSpawn скрипте, а потом выбрасывать лут при смерти моба, необходимые действия в OnDeath скрипт, ну или сразу все при смерти.
Scaled
May 19 2005, 11:26
Ага, это получаеться для каждого моба свой скрипт с генерацией лута писать?
Buldog
May 19 2005, 11:28
Нет, для всех мобов существуют стандартные скрипты nw_c2_default9 для OnSpawn и nw_c2_default7 для OnDeath, в них и вноси нужные изменения.
Scaled
May 19 2005, 12:00
Buldog Спасибо.
Добавлено в [mergetime]1116493278[/mergetime] Изменения тоже через переменную в свойствах модуля?
Lorendroll
May 19 2005, 15:23
Я вот наверное сделаю скрипт по выпадению лута как копирование рандомного объекта из определенного сундука в инвентарь кричи на спауне. (во завернул то,сам не пойму!

)
То есть для гоблина воина стоит сундук с всевозможными объектами для гоблина-воина. На гобе висит переменная с тегом сундука, к которому он будет обращаться. Соответственно на спауне он будет генерить некое количество рандомных вещей из присвоенного сундука себе в инвентарь. Вещи помечены как "выпадаемые", а сундуки стоят где-нибудь на недоступной ДМской локе.
Для разных типов существ разные типы сундуков. Это мне кажется легче сделать. И для редк\актирования удобнее.
Scaled
May 19 2005, 18:05
Я уже засыпал тупыми вопросами
Вот еще оди:
Я хочу переписал закл баньши так чтобы при убиении врагов рассы эльф и пола женщина
поднимались зомби(они из моей палитры со способностью особой какой нить).
Вот делал делал, застопорился на определении пола, как быть? там нескольео констант пола.
А вообще такой закл возможно сделать или может и пытаться не стоит.
Neverwinter Script Source |
int GetGender( object oCreature ); |
GENDER_BOTH Specifies the male and female gender.
GENDER_FEMALE Specifies the female gender.
GENDER_MALE Specifies the male gender.
GENDER_NONE Specifies the lack of gender.
GENDER_OTHER Specifies a gender that isn't male or female (or none).
Вообще сделать реально.
QUOTE |
Я вот наверное сделаю скрипт по выпадению лута как копирование рандомного объекта из определенного сундука в инвентарь кричи на спауне. (во завернул то,сам не пойму! ) То есть для гоблина воина стоит сундук с всевозможными объектами для гоблина-воина. На гобе висит переменная с тегом сундука, к которому он будет обращаться. Соответственно на спауне он будет генерить некое количество рандомных вещей из присвоенного сундука себе в инвентарь. Вещи помечены как "выпадаемые", а сундуки стоят где-нибудь на недоступной ДМской локе. |
Зачем самому делать и время тратить? Все уже сделано, причем грамотно и удобно, но не через сундуки, а через магазины:
система выпадения лута >>
SiliconScouts Treasure Spawn system <<
Или это и имел в виду?
Мефистофель
May 20 2005, 08:41
Помогите, у кого есть хак с Лошадьми, мне нужно, чтоб ПК сел на лошадь.
--
И ещё помогите со скриптом, блин он такой лёгкий, но у меня чёто не получается, я делаю так.
DelayCommand(39.5, AssignCommand оРС ActionSit(оСтул); это я так без тулсета примерно написал. помогите, как посадить ПК.
И ещё т.к. камера не отрывается мне нужно сделать копию ПК, а настоящего оставить под эффектом невидимости. Я видел это в зеркалах, в ХотУ. помогите, что сделать нужно.
--
Добавлено в [mergetime]1116567785[/mergetime] Тфу забыл дайте, пожалуйста скриптик, так чтобы игрок появлялся, и например если маг то в сундуке лежит одно если воин, другое. очень нужно Спасибо.
QUOTE |
Я вот наверное сделаю скрипт по выпадению лута как копирование рандомного объекта из определенного сундука в инвентарь кричи на спауне. (во завернул то,сам не пойму! ) То есть для гоблина воина стоит сундук с всевозможными объектами для гоблина-воина. На гобе висит переменная с тегом сундука, к которому он будет обращаться. Соответственно на спауне он будет генерить некое количество рандомных вещей из присвоенного сундука себе в инвентарь. Вещи помечены как "выпадаемые", а сундуки стоят где-нибудь на недоступной ДМской локе. Для разных типов существ разные типы сундуков. Это мне кажется легче сделать. И для редк\актирования удобнее |
ммм...то что ты тут написал в сути своей есть чуточку измененная "сундучная" система лута введенное Биотварю с выпуском СОУ

QUOTE |
Тфу забыл дайте, пожалуйста скриптик, так чтобы игрок появлялся, и например если маг то в сундуке лежит одно если воин, другое. очень нужно Спасибо. |
этот скриптик в свое время выставлял Айван...давно уже..просто поищи в темах
Как реализовать дроп всего золота при смерти PC?
?? А что тут такого?
Сколько золота у ПС?
Neverwinter Script Source |
int GetGold( object oTarget = OBJECT_SELF ); |
Забираем:
Neverwinter Script Source |
void TakeGoldFromCreature( int nAmount, object oCreatureToTakeFrom, int bDestroy = FALSE ); |
PS: если и у тебя лут это мешочек, то я бы удалял (bDestroy = TRUE) а в мешке создавал бы.
Neverwinter Script Source |
object CreateItemOnObject( string sItemTemplate, object oTarget = OBJECT_SELF, int nStackSize = 1 ); |
Просто не уверен, можно ли в качестве oCreatureToTakeFrom использовать placeable. Если можно то все ок, забирай и забей на PS
Buldog
May 20 2005, 17:03
Тут есть одна проблемка, нельзя создать кучку золота больше 50000 монет, и, забрав у игрока все, что есть велик риск превысить эти 50000...
Ну допустим число в 50к превышается, но тем не менее на мешок создается 50к? Если да, то меня это устроит.
И еще вопросец, допустим ПС умер, на его место создается труп с инвентори, в него кладется золото. А при открытии трупа пишется, собственно имя того кто умер. Не помню где, но я такое видел.
QUOTE (Лито @ May 20 2005, 19:29) |
Ну допустим число в 50к превышается, но тем не менее на мешок создается 50к? Если да, то меня это устроит. |
лучше сделать что-то типа такого:
поделить деньги игрока на 50к, узнать, сколько кучек по 50к делать, ну и найти остаток, тоже отдельной кучкой его сделать.
QUOTE (Лито @ May 20 2005, 19:29) |
А при открытии трупа пишется, собственно имя того кто умер. Не помню где, но я такое видел. |
на смерть, при создании трупа запиши ему в локалку "NAME" имя перса (GetName()) ну а onUsed трупа вытаскивай эту локалку и вперед.
Написал так:
Neverwinter Script Source |
//.... object oCorpse = GetNearestObjectByTag("PC_Corpse"); int iGold = GetGold(oPlayer); TakeGoldFromCreature(iGold,oPlayer,TRUE); CreateObject(OBJECT_TYPE_PLACEABLE,"pc_corpse",GetLocation(oPlayer),TRUE); CreateItemOnObject("NW_IT_GOLD001",oCorpse,iGold); //... |
Золото не забирается и не создается. Только труп появляется...

Вот такая еще фиговина. Не знаю как правильно повесить переменную, сделал так -
Neverwinter Script Source |
SetLocalInt(oCorpse,GetName(oPlayer),1); |
, но даже если это правильно, то как же потом в OnUse это применить.
P.S. Вот решение так и вертится рядом где-то...
Ээ..
Neverwinter Script Source |
object oCorpse = GetNearestObjectByTag("PC_Corpse"); |
а ниже
Neverwinter Script Source |
CreateObject(OBJECT_TYPE_PLACEABLE,"pc_corpse",GetLocation(oPlayer),TRUE); |
Это как? Сначала ввел объект, потом создал?
ЗЫ: сейчас у себя сделаю и посмотрим, что получится
Добавлено в [mergetime]1116607038[/mergetime]
кстати, реф голда такой "it_gold002" а не "NW_IT_GOLD001" (это тэг)
Добавлено в [mergetime]1116607174[/mergetime]
QUOTE (Лито @ May 20 2005, 20:21) |
Вот такая еще фиговина. Не знаю как правильно повесить переменную, сделал так - |
ты чаго делаешь? Тебе имя же надо, так?
Neverwinter Script Source |
SetLocalString(oCorpse,"NAME",GetName(oPC)); |
а потом
Neverwinter Script Source |
string sName = GetLocalString(oCorpse,"NAME"); |
Ты откуда такой упал? Вроде раньше все нормально более-менее со скриптами у тебя было
QUOTE |
Ты откуда такой упал? Вроде раньше все нормально более-менее со скриптами у тебя было |
да это я от перенапряга, экзамены
Кстати на счет тэга и ресрефа. Я использовал в лут-системе своей тэг...и ничего создается
Добавлено в [mergetime]1116607539[/mergetime] Кстати остается не понятным, почему золото не забирается при смерти?
аа..да..еще на вскидку - модуль вроде не может забрать деньги..
Добавлено в [mergetime]1116607956[/mergetime]
Neverwinter Script Source |
void main() { object oPlayer = GetLastPlayerDied(); int nGP = GetGold(oPlayer); object oCorpse = CreateObject(OBJECT_TYPE_PLACEABLE,"pc_corpse",GetLocation(oPlayer),TRUE); AssignCommand(oCorpse,TakeGoldFromCreature(nGP,oPlayer,FALSE)); DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH)); } |
база. Что там у тебя еще в системе, я не знаю, вноси сам.
Так все, дальше я сам

Neverwinter Script Source |
AssignCommand(oPlayer, TakeGoldFromCreature(nGold, oPlayer, TRUE)); |
проверил со 100к, работает. Так что ничего расчитывать не надо.
Только имя добавь, как я выше писал и все
Добавлено в [mergetime]1116608129[/mergetime]
QUOTE (Лито @ May 20 2005, 20:52) |
AssignCommand(oPlayer, TakeGoldFromCreature(nGold, oPlayer, TRUE)); |
не, не стоит так.
Та-а-к, золото забирается, но не создается
ПРОВЕРЬ РЕЗРЕФ.
Добавлено в 21:00 а вообще я написал же выше скрипт..он работает с любыми суммами и через передачу работает, а не через создание, так что проблемы вообще нету.
Lex , все сенк, все работает. Прокосячил, самому за себя стыдно
Мефистофель
May 20 2005, 20:10
Моет мне ктонибудь поможет? а
QUOTE (Мефистофель @ May 20 2005, 09:41) |
Помогите, у кого есть хак с Лошадьми, мне нужно, чтоб ПК сел на лошадь. |
у меня нету, я не знаю. Но вроде такое невозможно технически. Там должна быть модель всадника в хаке. Возможно посадка на лошадь это просто удаление лошади и смена модели игрока на всадника, хз.
Добавлено в [mergetime]1116611188[/mergetime] QUOTE (Мефистофель @ May 20 2005, 09:41) |
И ещё помогите со скриптом, блин он такой лёгкий, но у меня чёто не получается, я делаю так. DelayCommand(39.5, AssignCommand оРС ActionSit(оСтул); это я так без тулсета примерно написал. помогите, как посадить ПК.
|
Ээ..это у тебя часть сценки? Я без остального текста сценки тебе ничего сказать не могу.
А если тебе надо сесть на стул при клике на него, то
Neverwinter Script Source |
AssignCommand(GetLastUsedBy(),ActionSit(OBJECT_SELF)); |
на onUsed стула.
QUOTE (Мефистофель @ May 20 2005, 09:41) |
И ещё т.к. камера не отрывается мне нужно сделать копию ПК, а настоящего оставить под эффектом невидимости. Я видел это в зеркалах, в ХотУ. помогите, что сделать нужно.
|
Neverwinter Script Source |
object CopyObject( object oSource, location locLocation, object oOwner = OBJECT_INVALID, string sNewTag = "" ); |
oSource - Object to be copied.
locLocation - Destination location for the copied object (required).
oOwner - Item owner (for use when copying items into inventory) (Default: OBJECT_INVALID)
sNewTag - New tag name. (Default: "")
А инвиз лучше всего такой
Neverwinter Script Source |
effect eInvis = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY); |
и накладывай его
Neverwinter Script Source |
void ApplyEffectToObject( int nDurationType, effect eEffect, object oTarget, float fDuration = 0.0f ); |
nDurationType - DURATION_TYPE_*
eEffect - The effect to apply.
oTarget - The target of the effect.
fDuration -The duration of temporary effects. (Default: 0.0f)
QUOTE (Мефистофель @ May 20 2005, 09:41) |
Тфу забыл дайте, пожалуйста скриптик, так чтобы игрок появлялся, и например если маг то в сундуке лежит одно если воин, другое. очень нужно Спасибо.
|
Глянь на базе скриптов. Вообще тебе всего то надо определить класс и создать соотв. шмотку..
Есть такая проблема, при потере левела, игрок иногда остается в шмоте, который ему не по "размеру". Появилась идея, при респауне снимать и одевать вещи на игрока. Реально ли такое осуществить?
Да.
Через стоимость вещи вроде можно определить уровень. Где-то кто-то расписывал табличку такую. Сравнивай потом с уровнем игрока и все.
Buldog
May 21 2005, 01:29
Можно сделать просто вот такую функцию:
Neverwinter Script Source |
void ReEquipItem(object oPC) { object oItem; int nSlot;
for(nSlot = 0; nSlot < 14; nSlot++) { oItem = GetItemInSlot(nSlot, oPC); if(oItem != OBJECT_INVALID) { AssignCommand(oPC, ActionUnequipItem(oItem)); AssignCommand(oPC, ActionEquipItem(oItem, nSlot)); } } } |
И использовать ее в нужном месте

Она будет переодевать шмот и если что то будет не по лвлу, оно не оденется
Tiger Greyhawk
May 21 2005, 03:14
QUOTE (Мефистофель @ May 20 2005, 09:41) |
Помогите, у кого есть хак с Лошадьми, мне нужно, чтоб ПК сел на лошадь. |
А топик "
Ссылки" зачем? Там оно есть:
Ссылка на пост с хаком лошадей. Наиболее качественные лошади.
З.Ы. Lex, удали потом этот мой оффтоп, плз.
Buldog ,я как раз про это говорил, сенк
Мефистофель
May 21 2005, 13:40
Лекс Громадное спосибо. но вазникло опять куча вопросов.
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)); |
Лекс нет, я имел ввиду в катсцене,! чтоб ПК сел. на опередённый стул.
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); |
Научите меня функцией ActionStartConversation пользоваться

Необходимо сделать диалог с плэйсиблом. (хрустальный шар)
пишу:
Neverwinter Script Source |
void main() { AssignCommand(OBJECT_SELF,ActionStartConversation(GetLastUsedBy(),"l_plc_frostball",TRUE,FALSE)); } |
где l_plc_frostball - это имя диалога, ну и ResRef я думаю. Использую шар, диалога нет
Убо-Сатло
May 21 2005, 17:25
QUOTE (Лито @ May 21 2005, 18:13) |
Научите меня функцией ActionStartConversation пользоваться |
Достаточно просто на OnUsed
Neverwinter Script Source |
void main() { ActionStartConversation(GetLastUsedBy()); } |
А диалог вставить в ->свойства плэйса -> улучшеный-> разговор
Сейчас попробуемс...
Добавлено в [mergetime]1116686316[/mergetime]
Убо-Сатло Не катит такой способ. Игрок просто подходит к шару и все.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.