![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2366
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Alaron, без внедрения в модули, у тебя ничего не получится. Скрипты сделаны с таким учетом, что ты их будешь устанавливать именно в модуль, а не отдельно. Отдельно же они даже работать не будут, потому что не понятно к чему относятся.
|
![]()
Сообщение
#2367
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
ИМХО, можно, только ncs (скомпилированные).
|
![]() ![]()
Сообщение
#2368
|
|
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
QUOTE почему же тогда он не вспомнил, что я ни-ни в скриптах, ... а почему ОН( или кто-то другой) должен что-то о тебе вспоминать специально? я конечно понимаю, что каждый человек выдающиеся , уникальная ит итп личность, но , скриптеры , как правило , люди занятые своими собственными скриптами и в голове лишнюю информацию не держат..так что , если что-то надо конкретное, то и и писать надо соответственно ибо со чтением чужих мыслей у нас не очень получаеться пока (IMG:style_emoticons/kolobok_light/biggrin.gif) (IMG:style_emoticons/kolobok_light/mosking.gif) п.с. вышесказанное ,кстати, не только к конкретному случаю относиться (IMG:style_emoticons/kolobok_light/biggrin.gif) |
![]()
Сообщение
#2369
|
|
Level 2 ![]() Класс: Маг Характер: Chaotic Evil Раса: Полуэльф ![]() |
Доброго времени суток.
Прошу не посылать читать мануалы. Те кто пользуются NWNX знаю, что припомощи NWNX можно связать NWN и MySQL. Я связал (все отлично работает), но теперь появились вопросы: как записать данный в таблицу и как их от туда причитать и записать в переменные. Записать оказалось очень легко, но как от туда их прочитать? Собственно трока для записи в таблицу 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'" и т.п., а потом из полученного результата прочитать для каждой переменной значения. Как это сделать? |
![]()
Сообщение
#2370
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
я очень давно занимался nwnx'ом и т.д.. по памяти, там есть функции:
QUOTE SQLFirstRow\SQLFetch <- для чеков SQLExecDirect <- запрос SQLGetData <- получение данных ^ помойму что-то типа string sResult = SQLGetData(1); после запроса SELECT помойму так.. посмотри подфорум - Шарды рунета.. там было про ето Сообщение отредактировал [MoF]Darth_Nick - Jul 2 2006, 14:16 |
![]()
Сообщение
#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)
|
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 05:12 |