![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2371
|
|
Level 8 ![]() ![]() ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
QUOTE(OxCom @ Jul 2 2006, 12:59) [snapback]86839[/snapback] Записать оказалось очень легко, но как от туда их прочитать? Собственно трока для записи в таблицу NSS string sSQL="INSERT INTO nwn(playername, charname, pc_dm, ip_address) "+ "VALUES('"+sPlayer+"','"+sChar+"','"+sDM+"','"+ip+"')"; SQLExecDirect(sSQL); Тут мы записываем в таблицу "nwn" в соответсвующие поля переменные sPlayer, sChar, sDM, ip. А как, имея уже заполненную таблицу, записать значения каждого соответсв. поля в переменную sPlayer, sChar, sDM, ip? Поидее мы должны выбрать сделать "SELECT * FROM `nwn_stast` WHERE 'playername' = 'sPlayer'" и т.п., а потом из полученного результата прочитать для каждой переменной значения. Как это сделать? следующий код сделает запрос: NSS string sPlayer = SQLEncodeSpecialChars("Аккаунт"); string sSQL = "SELECT * FROM nwn_stast WHERE playername='"+ sPlayer +"'"; SQLExecDirect(sSQL); результатом которого будет набор записей со значением "Аккаунт" в поле playername функция SQLFetch() позволит продвигаться по результирующему набору от первой записи до последней, возвращая SQL_SUCCES в том случае, если запись существует и SQL_ERROR в противоположном если SQLFetch() вернула SQL_SUCCES - значит можно получить значения полей текущей записи функцией SQLGetData(), в качестве параметра которой передается номер поля |
![]()
Сообщение
#2372
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Насколько я помню, какие-то примеры должны быть в демо-модуле NWNX-ODBC.
Во-первых, начну с совета. Использовать в запросах заранее неизвестные и задаваемые игроком строки (имя чара, аккаунт и т.д.) следует ТОЛЬКО с функцией SQLEncodeSpecialChars. т.е.: "SELECT ..... WHERE ...='"+SQLEncodeSpecialChars(sString)+"' ...". То же и при INSERT. В базе эти строки будут закодированными (' заменяется на `~), а при их вытаскивании нужно будет сделать SQLDecodeSpecialChars. Во-вторых, как вытаскивать записи из базы. Приведу примеры. Получение номера и прав игрока (нужна одна запись): NSS #include "aps_include" ... string sName = GetName(oPC); string sAccount = GetPCPlayerName(oPC); SQLExecDirect("SELECT id, rights FROM nwn WHERE playername='"+SQLEncodeSpecialChars(sAccount)+"' AND charname='"+SQLEncodeSpecialChars(sName)+"'"); //Выполнение запроса if(SQLFetch()) //если есть хоть одна такая запись { int nID = StringToInt(SQLGetData(1)); //поле 1 - id int nRights = StringToInt(SQLGetData(2)); //поле 2 - rights } Получение нескольких записей (инициализация заданных переменных - упрощенный вариант): NSS #include "aps_include" SQLExecDirect("SELECT name, val FROM preset_vars"); //запрос while(SQLFetch()) //пролистывать записи до конца { string sVarName = SQLGetData(1); int nVal = StringToInt(SQLGetData(2)); SetLocalInt(GetModule(), sVarName, nVal); } На Экзисе я использую немного изменённую библиотеку, в частности там укорочены имена функций (SQLExec, SQLGet) и улучшена SQLEncodeSpecialChars: в запрос добавляется "\", и декодировать уже ничего не надо. Сообщение отредактировал virusman - Jul 2 2006, 18:49 |
![]()
Сообщение
#2373
|
|
Level 2 ![]() Класс: Маг Характер: Chaotic Evil Раса: Полуэльф ![]() |
Спасибо разобрался. Теперь такой вопрос:
Поставил скрипт в OnClientLeave. Он не срабатывает когда игрок выходит. NSS #инклуды void main() { object oPC = GetExitingObject(); if (!GetIsPC(oPC)) return; #работа с MySQL } Если этот же скрипт поставить объекту на OnUse и заменить GetExitingObject(); на GetExitingObject(); то все работает. |
![]()
Сообщение
#2374
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
На выходящем игроке некоторые функции не работают. Но это не тот случай, потому что подобный код:
NSS object oPlayer = GetExitingObject(); int nDM = GetIsDM(oPlayer); ... if (!nDM) ExecuteScript("lr_talsave_save",OBJECT_SELF); работает. Сообщение отредактировал virusman - Jul 6 2006, 15:36 |
![]()
Сообщение
#2375
|
|
Level 8 ![]() ![]() ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
В OnClientLeave функция GetIsPC возвращает FALSE.
|
![]()
Сообщение
#2376
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Ой, перепутал GetIsPC и GetIsDM. (IMG:style_emoticons/kolobok_light/smile.gif)
OnClientEnter/OnClientLeave всегда срабатывают только на игроках. Дополнительные проверки тут не нужны. |
![]() ![]()
Сообщение
#2377
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Здраствуйте всем вам. Уезжал на долго не создавал. Весь опыт потерял набираю заново. Как сделать что когда игрок наступает на Триггер на него кастуется 5 заклинаний. Лечение, защита, сила, и еще чтонибудь на ваш вкус только не навороченное. (IMG:style_emoticons/kolobok_light/nea.gif)
|
![]()
Сообщение
#2378
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
На onEnter, триггера:
NSS void main()
{ object oPC = GetEnteringObject(); effect eHeal = EffectHeal(GetMaxHitPoints(oPC)); effect eStrength = EffectAbilityIncrease(ABILITY_STRENGTH,1); effect eAC = EffectACIncrease(1); // Остальные эффекты добавишь сам, ищи в фильтре Effect* if (!GetIsPC(oPC)) return; if (GetCurrentHitPoints(oPC) != GetMaxHitPoints(oPC)) { ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPC); } ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStrength, oPC); // Сила повышается на 1. Бесконечно. ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oPC); // AC повышается на 1. Бесконечно. DestroyObject(OBJECT_SELF, 0.4); // Удали строку если не нужно чтобы скрипт срабатывал 1 раз. } Сообщение отредактировал Dik Morris - Jul 7 2006, 15:44 |
![]()
Сообщение
#2379
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Здрв!Нужен ответ.Как добавить в имя вещи слово,т.Е. Если был "топор" то сделать его "топор хлада" с помощью скрипта.Заране спасибо!%:-)
|
![]()
Сообщение
#2380
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
SetName(oItem, GetName(oItem)+" of Cold");
|
![]()
Сообщение
#2381
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Спасибо,друг virusman!Ты продвинул мою работу на сто,нет на тысячу стае!Еще раз сенкс!
|
![]()
Сообщение
#2382
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Хотел уточнить что данная фун-ция, появляется только в версии 1.67. (IMG:style_emoticons/kolobok_light/wink3.gif)
Сообщение отредактировал Dik Morris - Jul 8 2006, 12:04 |
![]()
Сообщение
#2383
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Кстати, с помощью этой функции можно делать индивидуальные вещи. Т.е. вначале сохранять в строковую переменную название вещи, а уж потом менять в момент создания.
|
![]()
Сообщение
#2384
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Скажите как сделать чтобы при слове "далее" персонаж перемещался к указаному НПС. Тоесть.
ПОдоходит к капитану на одномо острове. -Переправь меня на другой остров. - не прооблема давай. -далее. и персонаж оказывается возле НПС капитана на другом острове. |
![]()
Сообщение
#2385
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
DarkDeivel, подобные ситуации разбираются очень часто, используй поиск.
Нашел, меньше чем за полминуты. Читать. Сообщение отредактировал Dik Morris - Jul 8 2006, 21:34 |
![]()
Сообщение
#2386
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
QUOTE(DarkDeivel @ Jul 8 2006, 21:20) [snapback]87410[/snapback] Скажите как сделать чтобы при слове "далее" персонаж перемещался к указаному НПС. Тоесть. ПОдоходит к капитану на одномо острове. -Переправь меня на другой остров.Заранее установи точку прыжка(оwp). - не прооблема давай. -далее. Здесь добавь скрипт:assigncommand(oPC,actionjumptoobject(oWp)); и персонаж(oPC) оказывается возле НПС капитана на другом острове(тут wp). |
![]() ![]()
Сообщение
#2387
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
QUOTE(Dik Morris @ Jul 8 2006, 21:34) [snapback]87413[/snapback] DarkDeivel, подобные ситуации разбираются очень часто, используй поиск. Нашел, меньше чем за полминуты. Читать. Все нашле СпС. |
![]()
Сообщение
#2388
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Я вот недавно сел за Тулсет. и вот.
как сделать чтобы появилось строчка в диалоге при наличии 20 Animal Bone(в рюкзаке). |
![]()
Сообщение
#2389
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Cтавишь у нужной строки на Text Appears When... скрипт типа такого:
NSS int Match(a, с) { return (a == с); } int GetNumItemsInInventory(object oInventory = OBJECT_SELF, string sTag = "*") { int nNum = 0; object oItem = GetFirstItemInInventory(oInventory); while (GetIsObjectValid(oItem)) { if (Match(GetTag(oItem), sTag)) { nNum += GetItemStackSize(oItem); } oItem = GetNextItemInInventory(oInventory); } return nNum; } int StartingConditional() { object oPC = GetPCSpeaker(); int n = GetNumItemsInInventory(oPC, "ТЭГ_ЭТОЙ_САМОЙ_КОСТИ"); return (n >= 20); } По-моему этот вопрос разбирали в этой теме уже несколько раз, ты наверняка наткнулся бы на ответ пролистав тему (а заодно и на множество других крайне полезных вещей) и соседние, что настоятельно советую перед тем как спрашивать: "ух-хух, а как забрать 20 костей?". ---- P.S. Глюка (IMG:style_emoticons/kolobok_light/smile.gif) пишу: int Match(a, в); выдает: int Match(a, (IMG:style_emoticons/kolobok_light/dirol.gif) ; Сообщение отредактировал azathoth - Jul 9 2006, 03:09 |
![]()
Сообщение
#2390
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Да, там смайлы не парсятся, точнее парсятся... Как лечить я хз (IMG:style_emoticons/kolobok_light/pardon.gif)
|
![]() ![]()
Сообщение
#2391
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
QUOTE(Dik Morris @ Jul 7 2006, 15:30) [snapback]87334[/snapback] На onEnter, триггера: NSS void main() { object oPC = GetEnteringObject(); effect eHeal = EffectHeal(GetMaxHitPoints(oPC)); effect eStrength = EffectAbilityIncrease(ABILITY_STRENGTH,1); effect eAC = EffectACIncrease(1); // Остальные эффекты добавишь сам, ищи в фильтре Effect* if (!GetIsPC(oPC)) return; if (GetCurrentHitPoints(oPC) != GetMaxHitPoints(oPC)) { ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPC); } ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStrength, oPC); // Сила повышается на 1. Бесконечно. ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oPC); // AC повышается на 1. Бесконечно. DestroyObject(OBJECT_SELF, 0.4); // Удали строку если не нужно чтобы скрипт срабатывал 1 раз. } Слухай у меня все работает. А как сделать к этому еще визуальные эффекты?? |
![]()
Сообщение
#2392
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
С помощью 2 фун-ций:
NSS // 1: // Apply eEffect to oTarget. void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f) // 2: // * Create a Visual Effect that can be applied to an object. // - nVisualEffectId // - nMissEffect: if this is TRUE, a random vector near or past the target will // be generated, on which to play the effect effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE) // + констант: DURATION_TYPE_INSTANT ; DURATION_TYPE_PERMANENT ; DURATION_TYPE_TEMPORARY. Константы, виз. эффектов начинаются с VFX_* (Рисунки см. в Лексиконе) PS: Т.е получится, например так: NSS ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oPC);
Сообщение отредактировал Dik Morris - Jul 9 2006, 12:04 |
![]()
Сообщение
#2393
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Лучше всего залинковать эффекты бонусов с визуальными эффектами (см. скрипт любого спелла).
|
![]() ![]()
Сообщение
#2394
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
QUOTE(Dik Morris @ Jul 9 2006, 12:00) [snapback]87436[/snapback] С помощью 2 фун-ций: NSS // 1: // Apply eEffect to oTarget. void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f) // 2: // * Create a Visual Effect that can be applied to an object. // - nVisualEffectId // - nMissEffect: if this is TRUE, a random vector near or past the target will // be generated, on which to play the effect effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE) // + констант: DURATION_TYPE_INSTANT ; DURATION_TYPE_PERMANENT ; DURATION_TYPE_TEMPORARY. Константы, виз. эффектов начинаются с VFX_* (Рисунки см. в Лексиконе) PS: Т.е получится, например так: NSS ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oPC); Понятно ща попробую. (IMG:style_emoticons/kolobok_light/declare.gif) Aiwan: слушай, у нас не форум розовых дневничков, где спамят лишь бы постов набрать. Больше такого содержательного постинга что бы не было. Устный пред. Сообщение отредактировал Aiwan - Jul 9 2006, 17:45 |
![]()
Сообщение
#2395
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Всем mass heal & level up!:)*как мне организовать скрипт на он персепт нпс чтобы он брал мои деиствия и реагировал.Например если он видит что рс в режиме parry,то он отбегает и лечиться!Ответ очень нужен!
|
![]() ![]() |
Текстовая версия | Сейчас: 23rd July 2025 - 06:43 |