На что способна эта система крафта – одному автору известно. И потому было решено начать ликбез по CNR. А начать я бы его хотел с ответа на вопрос Balrog’а – Как написать свой рецепт?! Мало того, мы еще затронем то – как написать рецепт при этом внеся новый типа материала для крафтинга и дележку крафтовых вещей по типу.
А все начиналось с тулсета и модуля CNR…
Задача урока – Создать раздел спец оружия. Создать подраздел клинков. Написать рецепт на клинок.
Открываем модуль CNR в тулсете. Так… Ищем скрипт наковальни. Он называется «cnrAnvilPublic». А вот теперь уже начинаем творить! Создадим новый раздел в наковальне – «Специальное оружие». Для этого найдем строчки:
Neverwinter Script Source |
void ProcessMenuWeaponsCopp(string sMenuWeaponsCopp); void ProcessMenuWeaponsBron(string sMenuWeaponsBron); void ProcessMenuWeaponsIron(string sMenuWeaponsIron); |
Neverwinter Script Source |
void ProcessMenuWeaponsSpec(string sMenuWeaponsSpec); |
Neverwinter Script Source |
string sMenuWeaponsCopp = CnrRecipeAddSubMenu("cnrAnvilPublic", "Медное Оружие"); string sMenuWeaponsBron = CnrRecipeAddSubMenu("cnrAnvilPublic", "Бронзовое Оружие"); string sMenuWeaponsIron = CnrRecipeAddSubMenu("cnrAnvilPublic", "Железное Оружие"); |
Neverwinter Script Source |
string sMenuWeaponsSpec = CnrRecipeAddSubMenu("cnrAnvilPublic", "Специальное Оружие"); |
Neverwinter Script Source |
CnrIncrementStackCount(OBJECT_SELF); AssignCommand(OBJECT_SELF, ProcessMenuWeaponsCopp(sMenuWeaponsCopp)); CnrIncrementStackCount(OBJECT_SELF); AssignCommand(OBJECT_SELF, ProcessMenuWeaponsBron(sMenuWeaponsBron)); CnrIncrementStackCount(OBJECT_SELF); AssignCommand(OBJECT_SELF, ProcessMenuWeaponsIron(sMenuWeaponsIron)); |
Neverwinter Script Source |
CnrIncrementStackCount(OBJECT_SELF); AssignCommand(OBJECT_SELF, ProcessMenuWeaponsSpec(sMenuWeaponsSpec)); |
Neverwinter Script Source |
CnrDecrementStackCount(OBJECT_SELF); } |
Neverwinter Script Source |
void ProcessMenuWeaponsSpec(string sMenuWeaponsSpec) //добавим раздел «Специальное оружие» в диалог наковальни. Результат показан на рис.1 { string sKeyToRecipe; string sMenuSpecBladed = CnrRecipeAddSubMenu(sMenuWeaponsSpec, "Клинки"); //добавим под-раздел Специальное оружие > Клинки. Результат показан на рис.2 //пишем рецепт sKeyToRecipe = CnrRecipeCreateRecipe(sMenuSpecBladed, "Меч Лорда Аваддона", "spec_avaddon_sword", 1); //Начала рецепта. Выбираем в каком под-разделе будет данный предмет. Далее – Название. Потом Тэг предмета. И количество. Результат показан на рис.3 CnrRecipeAddComponent(sKeyToRecipe, "cnrIngotIron", 3); // первый ингрдиент. , "cnrIngotIron" – тэг железных слитков, 3-необходимое количество. CnrRecipeAddComponent(sKeyToRecipe, "cnrMoldLarge", 1); //второй ингрдиент-тэг Большой литейной формочки. Ингридиентов может быть много Результат показан на рис.4 CnrRecipeSetRecipeLevel(sKeyToRecipe, 4); //Средний уровень игрока в ремесле. CnrRecipeSetRecipeXP(sKeyToRecipe, 84, 84); //При удачном крафте опыта дадут 84 – игрового, и 84 ремесленного. Результат показан на рис.5 CnrRecipeSetRecipeBiproduct(sKeyToRecipe, "spec_avaddon_fool", 0, 1);//Вторичный продукт при крафте.(например метал. стружка) "spec_avaddon_fool"- Тэг вторичного продукта, 0 - количество при удачном крафте, 1 – количество при неудачном крафте. CnrRecipeSetRecipeAbilityPercentages(sKeyToRecipe, 70, 30, 0, 0, 0, 0); //характеристики персонажа влиЯющие на процент удачного крафта. Сила, Ловкость, Телосложение,Интеллект, Мудрость, Харизма. CnrDecrementStackCount(OBJECT_SELF);//подводим итог количеству рецептов и заканчиваем функцию. } |
Молодец Аваддон, мы все очень рады, что работаем вместе с тобой, и друг другом.
Джон сказал "все ооооооочень рады" ... да и многие увидев твой ликбез обрадуются
Итак, для начала в дебри лезть не буду. Возьму первое главное - это конфиг.
Открываем скрипт cnr_config_ing.
Там можно найти много разных приблуд по настройке CNR.
Что я изменил чтобы уменьшить лаги:
1. Этот пункт влияет на инициализацию рецептов. Если TRUE то CNR инициализирует все рецепты при первой загрузке модуля, естественно мод грузится будет долго. Если FALSE то будет инициализировать определенную часть рецептов при первичном использовании крафт инструмента. Если у вас шард, то лучше ставить TRUE. По крайней мере во время игры лагов у игроков не будет.
Neverwinter Script Source |
int CNR_BOOL_INIT_RECIPES_ON_MODULE_LOAD = TRUE; |
Neverwinter Script Source |
int CNR_BOOL_HIDE_TRADE_JOURNALS_TOP_TEN_LISTS = TRUE; |
Neverwinter Script Source |
int CNR_BOOL_HIDE_UNSATISFIED_RECIPES_IN_CRAFTING_CONVOS = FALSE; |
Neverwinter Script Source |
int CNR_BOOL_HIDE_IMPOSSIBLE_RECIPES_IN_CRAFTING_CONVOS = FALSE; |
Продолжу свою тему Я думаю если так дальше пойдет можно будет книжки издавать хе хе...
ВНИМАНИЕ! Данный урок не представляет из себя пособия по NWNX2 итп. Он так же не расчитан на опытных мастеров. Урок предназначен для людей впервые столкнувшихся с MySQL+NWNX2 (таких как я). Здесь я делюсь опытом (грабли собираю сам ) полученным мною в процессе своей работы с CNR 3.05, дабы людям было проще разобраться.
Ликбез по CNR - УРОК №3:
Тема сегодняшнего урока:
- Как перевести CNR 3.05 с DataBase Bioware на MySQL?
Цели сегодняшнего урока:
- Получить первичные навыки работы с MySQL
- Получить первичные навыки работы с APS/NWNX 2
- Уменьшить количество лагов в CNR за счет перведения оного на MySQL
Необходимый софт:
- http://www.mysql.ru/download
- http://www.mysql.ru/download
- http://nwvault.ign.com/Files/other/data/1046636009723.shtml
- http://www.phpmyadmin.net или http://www.webyog.com/
Примечание: Сразу скажу - данное действо происходило на OS: Windows XP (Professional Edition) и в качестве софта был установлен пакет Apache+PHP+MySQL.
Часть 1 - МуСКУЛ
QUOTE |
MySQL – сервер баз данных. MySQL характеризуется большой скоростью, устойчивостью и легкостью в использовании, является идеальным решением для малых и средних приложений. |
QUOTE |
Аббревиатура ODBC является сокращением для Open DataBase Connectivity, что можно перевести как „открытый интерфейс доступа к базам данных“. Этот интерфейс представляет собой набор функций, которые можно использовать для доступа к любой реляционной СУБД, поддерживающей SQL. На уровне операционной системы ODBC реализуется в виде группы DLL-библиотек, состоящей из драйверов отдельных баз данных (ODBC-драйверов) и так называемого менеджера драйверов, выполняющего роль прослойки между приложением-клиентом и ODBC-драйвером; именно наличие такой прослойки и обеспечивает независимость приложения от конкретного сервера БД. |
CODE |
Системные источники данных: Имя | Драйвер nwn | MySQL |
Neverwinter Script Source |
// If you're a power builder/DM that uses APS/NWNX2 and would like to tweak recipes and // reload them without restarting the mod, then you can set this flag to TRUE. CNR will // create four related tables to hold the recipe data. int CNR_BOOL_RECIPE_DATA_IS_PERSISTENT_IN_SQL_DATABASE = TRUE; |
Neverwinter Script Source |
void CnrSetPersistentInt(object oHost, string sVarName, int nValue) { // Change this function call to whatever function // should be called from the above include file // for storing Integers in your Database // uncomment the following line for NO database support //SetLocalInt(oHost, sVarName, nValue); // uncomment the following line for Bioware database support //SetCampaignInt("cnr_misc", sVarName, nValue, oHost); // uncomment the following line for APS database support SetPersistentInt(oHost, sVarName, nValue, 0, "cnr_misc"); } |
Neverwinter Script Source |
ExecuteScript("aps_onload", OBJECT_SELF); |
Neverwinter Script Source |
// Name : Avlis Persistence System OnModuleLoad // Purpose : Initialize APS on module load event // Authors : Ingmar Stieger // Modified : January 27, 2003 // This file is licensed under the terms of the // GNU GENERAL PUBLIC LICENSE (GPL) Version 2 #include "aps_include" void main() { // Init placeholders for ODBC gateway SQLInit(); } |
CODE |
cnr_components cnr_devices cnr_misc cnr_recipes cnr_submenus |
CODE |
INSERT INTO cnr_misc (player, tag, name, val) VALUES ("~", "MODULE", "CnrBoolBuildRecipeDatabase", "1"); |
CODE |
~ | MODULE | CnrBoolBuildRecipeDatabase | 0 | 0 |
CODE |
UPDATE cnr_misc SET val = 0 WHERE name = "cnrXXX_DeviceLoaded"; |
CODE |
UPDATE cnr_misc SET val = 0 WHERE name = "cnrAnvilArmor_DeviceLoaded"; |
Вопрос :
ТЫ пишишь MySQL это одно и тоже , что и Microsoft SQL Server 2000 или SQLEXPR ?!
Наверное все же нет. Ибо тогда не было отдельных сайтов по MySQL и собственно сайта разработчиков этой СУБД. Я вроде пояснял что SQL Server нам не подходит.
Ага! Вот и нашел свой первый недочет! Граждане, если кто промучался и выполнил все что я написал и все равно что то да неработает - я сейчас объясню в чем "фишка". У человека одного который эту систему интегрировал возникла проблема. У него есть модуль он интегрировал туда систему, потом выполнил SQL запрос и заново загрузил модуль, но рецепты не прочитались. Сейчас объясню почему. Посмотрев его базу данных в SQL я заметил что под графой "tag" в таблице cnr_misc у него вместо MODULE написано было совсем другое - что при ближайшем рассмотрении оказалось тэгом модуля. Так что учтите в
CODE |
INSERT INTO cnr_misc (player, tag, name, val) VALUES ("~", "MODULE ", "CnrBoolBuildRecipeDatabase", "1"); |
CODE |
INSERT INTO cnr_misc (player, tag, name, val) VALUES ("~", "ТЭГ_МОДУЛЯ ", "CnrBoolBuildRecipeDatabase", "1"); |
Апну старую тему (:
Поставил себе mysql, nwnx2, cnr.
И такая проблема: в базу рецепты и т.п. на русском пишет нормально, а при чтении из базы выводятся вопросы вместо русских букв.
Не знаете в чем может быть проблема?
база в какой кодировке?
система winXP
в базе cp1251
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)