Уважаемые гости и новички, приветствуем Вас на нашем форуме
Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».
Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Как называются строки и где они лежат.
Пример:
В Ребалансе 2.1 гарпии,големы,демоны-стреляют какими-то шариками.Ещё некоторые монстры могут исцелять се6я.
Диккен, ты не правильно понимаешь суть возвращаемого значения функции Hlp_GetInstanceID(), а также пытаешься работать с логическими операциями, не зная что они могут возвратить. Id объекта тоже тут ни при чём.
Прочитай про побитовые операции: И, ИЛИ, ОТРИЦАНИЕ, ВОЗВЕДЕНИЕ В СТЕПЕНЬ и т.д. Когда сам разберёшься - лучше будет.
Причём, когда собираешься с ними работать, просчитывай результат заранее, а не рассчитывай на авось.
Вот некоторые нюансы: InstanceID - это идентификатор объекта. Т.е. порядковый номер, который присваивается при загрузке объекта в "мире". self.id - это свойство объекта self класса C_NPC. В роли self может выступать кто угодно - тот, кого присвоят к глобальной переменной self.
Прочитай про побитовые операции: И, ИЛИ, ОТРИЦАНИЕ, ВОЗВЕДЕНИЕ В СТЕПЕНЬ и т.д. Когда сам разберёшься - лучше будет.
Причём, когда собираешься с ними работать, просчитывай результат заранее, а не рассчитывай на авось.
но ведь уточнил, что речь идет про диалог, т.е. self & other определены.
Если взять мой пример if(self.id == (LordHagen.id | Parcival.id)) , то эти числа должны совпадать или никогда не совпадут?
Не могу разобраться, не работает как нужно... помогите советом.
func int C_Beklauen(var int itemInstance,var int TheftGold)
SKIP
Я запутался в этих переменных((((
func int B_GiveInvItems(var C_Npc giver,var C_Npc taker,var int itemInstance,var int amount)
GS при проверке этого скрипта не выдает ошибок, но если я подобным образом вставляю в скрипт func int C_Beklauen(var C_Item itemInstance,var int TheftGold) if(itemInstance == ItMi_Gold)
то "Ошибка. нельзя пребразовать тип inctance в int" ???
Итак, сначала выполняется выражение в скобках, затем происходит операция сравнения "==" двух выражений.
Через поиск в скриптах находим:
Код:
const int GIL_PAL = 1;
const int GIL_KDF = 4;
"|" - операция логического сложения. Проще - операция "ИЛИ".
Переводим десятичные числа в двоичные, т.к. сложение делается в двоичной форме.
dec - десятичная форма записи, bin - двоичная.
dec = bin
1 = 001
4 = 100
Складываем столбиком и по принципу "Если хотя бы один из двух складываемых разрядов равен "1", то результат "истина", иначе - результат ложь".
Таблица истинности для этой операции:
1|1=1
1|0=1
0|1=1
0|0=0
В результате:
001 или
100
----
101
Число "101" двоичной системы счисления соответствует числу 5 в десятичной системе счисления.
const int GIL_NOV = 5;
Итого:
Код:
if(other.guild == GIL_NOV)
//если гильдия other равна GIL_NOV, то условие выполняется...
Диккен, если ты прочитал про побитовые операции, распиши-ка сам ответ на свой вопрос про условие:
Код:
if(self.guild == (GIL_PAL | GIL_KDF | GIL_NOV))
А вот правильно или нет - это решать тебе. Если ты уж взялся изучать чужие функции, то думай и анализируй информацию...
GS при проверке этого скрипта не выдает ошибок, но если я подобным образом вставляю в скрипт func int C_Beklauen(var C_Item itemInstance,var int TheftGold) if(itemInstance == ItMi_Gold)
то "Ошибка. нельзя пребразовать тип inctance в int" ???
func int C_IsTakenItemMyPossession(var C_Npc slf,var C_Npc oth,var C_Item itm)
Код:
func int C_IsTakenItemMyPossession(var C_Npc slf,var C_Npc oth,var C_Item itm)
{
var int portalguild;
portalguild = Wld_GetPlayerPortalGuild();
if(Npc_OwnedByNpc(itm,slf))
{
[B]if(Hlp_IsItem(itm,Holy_Hammer_MIS))[/B]
{
Hammer_Taken = TRUE;
};
return TRUE;
1. Возможно ли создавать подобные проверки условия без равенства == TRUE в новых функциях и не будет ли это ошибкой?
2. Будет ли это ошибкой, если создавать проверки вида:
var int pickitem;
func void B_Beklauen()
{
var int TheftDex;
var int CheckDex; if(Hlp_IsItem(ItMi_Gold,PICKITEM)
3. В оригинале Г2а при воровстве предмета, которого нет в инвентаре персонажа, вызывается функция B_GiveInvItems(self,other,ITEM,1), например в DIA_Pal_201_Ingmar.d
В скриптах Возвращения перед вызовом B_GiveInvItems добавлена CreateInvItems(self,ITEM,1).
Возможно ли пропустить CreateInvItems и выполнять сразу B_GiveInvItems и не будет ли это ошибкой?
Не могу разобраться, не работает как нужно... помогите советом.
func int C_Beklauen(var int itemInstance,var int TheftGold)
Диккен, приобрети справочник по скриптам. Он тебе поможет, если будешь стараться использовать его в разумных целях. Если нужен, пиши в личку.
Выписка из справочника:
int Hlp_IsItem (c_item item, int instanceName); - проверяет принадлежность предмета item к соответствующему типу instanceName, возвращает TRUE при соответствии, иначе – FALSE.
Есть некоторые допущения по поводу условий.
Допустимая запись:
Код:
if(Hlp_IsItem(itm,Holy_Hammer_MIS))[COLOR="DarkGreen"]//если предмет "itm" принадлежит инстанции "Holy_Hammer_MIS", то[/COLOR]
{
[COLOR="DarkGreen"]//выполняем действие[/COLOR]
};
if(!Hlp_IsItem(itm,Holy_Hammer_MIS))[COLOR="DarkGreen"]//если предмет "itm" не принадлежит инстанции "Holy_Hammer_MIS", то[/COLOR]
{
[COLOR="DarkGreen"]//выполняем действие[/COLOR]
};
Более понятная запись:
Код:
if(Hlp_IsItem(itm,Holy_Hammer_MIS) == TRUE)[COLOR="DarkGreen"]//если предмет "itm" принадлежит инстанции "Holy_Hammer_MIS", то[/COLOR]
{
[COLOR="DarkGreen"]//выполняем действие[/COLOR]
};
if(Hlp_IsItem(itm,Holy_Hammer_MIS) == FALSE)[COLOR="DarkGreen"]//если предмет "itm" не принадлежит инстанции "Holy_Hammer_MIS", то[/COLOR]
{
[COLOR="DarkGreen"]//выполняем действие[/COLOR]
};
const int GIL_PAL = 1;
const int GIL_KDF = 4;
const int GIL_NOV = 5;
GIL_PAL | GIL_KDF | GIL_NOV = 1 + 4 + 5 = 10
А ты к этим 10 прибавляешь гильдию self. И что в итоге?
Ни одна из констант гильдий не принимает отрицательного значения. А у тебя получается сумма, да ещё и сравниваемая с числом "5". Подумай над этим.
А! Можно ещё прибавить гильдию Лорда Хагена. Затем всё поделить на
гильдию Ксардаса и умножить на здоровье ГГ. И, наконец преобразовать всё к типу int. Как тебе такое решение проблемы?
Я так и думал, что ты ничего не прочитал про побитовые операции.
Тренируй внимание и терпение!
Нечего не понимаю... я складывал побитно в калькуляторе и почему операнд | вдруг превратился в + ?
if(self | GIL_PAL | GIL_KDF | GIL_NOV) == if(self or 1 or 4 or 5) == 5
Диккен, молодец, разобрался!
Я специально тебя запутал, чтобы ты старался разобраться сам.
Потому что когда не понимаешь чего-то, то оно тебя так и томит, пока не разберёшься сам.
Окей. Теперь ты понимаешь, что с побитовыми операциями нужно работать аккуратно?
Id Парсиваля = 252, Id Лорда Хагена = 200.
(252 | 200) = 252
Код:
if([COLOR="DarkOrange"][B]self[/B][/COLOR].id == (LordHagen.id | Parcival.id))[COLOR="DarkGreen"]//если id НПС self равно 252, то[/COLOR]
Зачем тогда Id Лорда Хагена?, когда можно записать так:
Код:
if([COLOR="DarkOrange"][B]self[/B][/COLOR].id == Parcival.id)[COLOR="DarkGreen"]//если id НПС self равно 252, то[/COLOR]
Рассмотрим другое условие:
Код:
[COLOR="DarkOrange"][B]if[/B][/COLOR]((Hlp_GetInstanceID([COLOR="DarkOrange"][B]self[/B][/COLOR]) == Hlp_GetInstanceID(LordHagen)) || (Hlp_GetInstanceID([COLOR="DarkOrange"][B]self[/B][/COLOR]) == Hlp_GetInstanceID(Parcival)))
[COLOR="DarkGreen"]//если идентификатор НПС self равен идентификатору Лорда Хагена или если идентификатор НПС self равен идентификатору Парсиваля, то...
//Другими словами: если НПС self - это Лорд Хаген или Парсиваль, то...[/COLOR]
Как видно, побитовые операции и логические операции сравнения имеют разный смысл.
Можно проверять и свойство НПС и идентификатор, но главное - это знать для чего это нужно делать...
Т.е. понимать смысл кода.
да забудь ты про битовые операции, они необходимы для работы с флагами...
установить/снять флаг, проверить флаг...
не зачем все усложнять, лучше просто написать условие с &&, ||, !
Как видно, тут броня и некоторые модели скелетов и людей.
Всё это можно применять к человеческой модели.Например, простейшее использование, без всяких дополнительных спец. эффектов:
Где:
self - НПС, использующий зелье маны,
"SKE_BODY" - название модели, которую хотим применить к НПС self,
DEFAULT - параметр по умолчанию,
"" - голова по умолчанию для этой модели,
"-1" - без брони.
GothicXARDAS, используй все те же самые функции, что и в случае присоеденения к любой из гильдий.
Хотя этот вопрос чисто для интереса, старайся больше пользоваться поиском, вспоминай похожие ситуации...
Спасибо, но меня интересует, а продолжительность времени сколько тут равна? можно ли задать определенное кол-во времени? а затем гильдия становится той, которой была.
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.