Seaward.ru

Здравствуйте, гость ( Вход | Регистрация )

> Для программистов, вопросы по скриптам ПКМ
igor_pol
сообщение Aug 24 2005, 21:00
Сообщение #1


боцман
****


Группа: форумчанин
Сообщений: 140
Регистрация: 3-December 04
Пользователь №: 169



Первое что я хотел написать "АДМИНЫ!!!!" НЕ ЗВЕРЕЙТЕ ЗА "НЕНУЖНУЮ ТЕМУ"
**************************************************
на вопрос зачем создал эту тему отвечу так "Я например НЕ ПРОСТО ЮЗВЕРЬ А КОЕ ЧТО И САМ НАПИСАТЬ МОГУ.
И хотел бы чтобы на форуме была тема для тех кто сам хочет что-то добавить в игру.
На сайте аддона Алекс вікинул ссылку на описание скриптов ПКМ на английском.
Я хотел бы узнать где можно нарыть больше инфы по этом скриптам.
И кстати на каком языке они пишуться.
Если кто-то знает ----- пишите.
И вообще всем програмерам на форуме нужна своя тема.
так что ГОСПОДА ПРОГРАМЕРЫ ВАЛИТЕ СЮДА !!!!
Может из этого что небудь интересное выйдет!!!!!!(Если тему не УТРУТ)
Жду сообщений (может у когот есть идеи на эту тему )

Сообщение отредактировал Догева - Apr 24 2006, 13:36
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
32 страниц V « < 30 31 32  
Reply to this topicStart new topic
Ответов(620 - 628)
Martial
сообщение Aug 2 2020, 23:07
Сообщение #621


юнга
**


Группа: форумчанин
Сообщений: 21
Регистрация: 13-April 19
Пользователь №: 136,449



как-то во вторых корсарах странно работают условия при потоплении и абордаже кораблей, я прописываю блоки для абордажа и потопления в том же кейсе где и указываются локаторы спавна судна (которое нужно захватить/потопить)
pchar.quest.QuestShip_status.win_condition.l1 = "NPC_Death";
pchar.quest.QuestShip_status.win_condition.l1.character = "QuestShipCaptain";
pchar.quest.QuestShip_status.win_condition = "Sink_QuestShip";

pchar.quest.QuestShip_status.win_condition.l1 = "Character_Capture";
pchar.quest.QuestShip_status.win_condition.l1.character = "QuestShipCaptain";
pchar.quest.QuestShip_status.win_condition = "Capture_QuestShip";

и идея была в том чтобы в СЖ шли записи в соответствии был ли захвачен или потоплен корабль. При варианте указанном выше запись в СЖ идет только при абордаже (2 блок), если потопить судно то кейс первого блока (Sink_QuestShip) не выполняется. Если закоментить любой один из двух блоков то второй выполняется корректно в СЖ появляются записи потопления либо абордажа, но вот когда они оба прописаны возникают проблемы. А если прописать эти два блока в обратном порядке (сначала Character_Capture, потом NPC_Death), то выполняется только кейс из ветви NPC_Death.

Могут ли параметры NPC который стоит капитаном судна влиять на статус его корабля? И есть ли еще что-то что влияет на статус корабля (кроме капитана, и кейсов в quests_reaction)?

User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Thorgal
сообщение Aug 3 2020, 23:53
Сообщение #622


капер
******

Ветеран ФорумаЗаслуженный Художник
Группа: форумчанин
Сообщений: 783
Регистрация: 13-December 05
Из: Москва
Пользователь №: 1,667



Цитата(BUKA_E}l{EBUKA @ Aug 2 2020, 22:10) *
На практике - не совсем. По крайней мере, в моих тестах при "MOD_DEAD_CLEAR_TIME * 1000" время от PostEvent до удаления = 106с, а при 100000 = 104с.

Хм... Неожиданно. Тогда лучше трогать не буду.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
BUKA_E}l{EBUKA
сообщение Aug 4 2020, 09:09
Сообщение #623


юнга
**


Группа: форумчанин
Сообщений: 20
Регистрация: 20-July 20
Пользователь №: 194,252



Что написать в if чтоб проверить, является ли результат выражения целым числом или нет? Имею в виду не int/float, а целое ли с т.ч. математики.

И еще - как будет эффективнее (производительность)?
При том что операция "xxx/yyy" будет для каждого предмета инвентаря, а "xxx" "yyy" для каждого предмета разные
Код

if(..xxx/yyy..) {xxx/yyy}
else {xxx/yyy}

или
Код

float zzz = xxx/yyy
if(..zzz..) {zzz}
else {zzz}


UPD с первым разобралась: if(makeint(xxx/yyy) == xxx/yyy). Второе в силе
UPD2 логическая часть моска наконец проснулась laugh.gif Очевидно, посчитать один раз лучше, чем считать дважды. Вопрос снимается

Но появился новый, даже в двух частях!

Если мне нужно запихнуть в if() проверку, равна ли X нулю, как корректно это сделать?
if(X == 0.0)? if(X == 0)? if(X == 0.0 || X == 0)? Или как-то еще?

Если Х это:
а) Переменная "string qqq". Ее значения всегда в виде числа с плавающей запятой. В том числе бывают "0.0".
б) Результат функции "float Function" которая иногда возвращает нуль.

UPD Провела тест валидности всяких разных случаев нулей по обе стороны от оператора.
Для а подойдет 0 / 0.0 / "0.0", для б - 0 / 0.0
Спойлеры по-видимому не работают, так что скрин всех результатов здесь, а код тут.
User is online!Profile CardPM
Go to the top of the page
+Quote Post
bengunn
сообщение Aug 5 2020, 21:40
Сообщение #624


новичок
*


Группа: форумчанин (*)
Сообщений: 9
Регистрация: 28-June 18
Пользователь №: 91,788



В C++ переменная float гарантирует точность только первых 7 цифр (и не после запятой, а вообще), поэтому использование оператора '==' может привести к непредсказуемым результатам.
Если хотите углубиться в тему, google в помощь.

Самый простой способ (если числа приблизительно одного порядка) - выбрать допустимую погрешность и сравнить с ней модуль разности значений.

Пример, для небольших чисел:

Код

#define FLOAT_EPSILON 0.0005

bool is_equal_floats(float f1, float f2)
{
    // abs throw error if argument is reference
    float f1_float = f1;
    float f2_float = f2;

    return abs(f1_float - f2_float) < FLOAT_EPSILON;
}


Идем дальше, при сравнении разных типов вторая переменная приводится к типу первой.
Узнать точно, как происходит конвертирование, без исходного кода невозможно.
Все что остается, пробовать.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
BUKA_E}l{EBUKA
сообщение Aug 5 2020, 22:37
Сообщение #625


юнга
**


Группа: форумчанин
Сообщений: 20
Регистрация: 20-July 20
Пользователь №: 194,252



Много гуглила по этой теме, попадалось и поведение описанное вами. Но в случае сравнения с нулем таких неожиданностей не происходит насколько я поняла (в С/С++ по крайней мере). А меня именно это интересует.
К тому же float Function, которую я с нулем сравниваю, оперирует только числами с максимум одним знаком после запятой.
Но все же спасибо!

P.S. Конкретно про функцию - хотела убедиться что выражение "GetItemsWeight(chref) == 0.0" из моего поста выше корректно, и мое представление об его результате не расходится с представлением компилятора biggrin.gif
User is online!Profile CardPM
Go to the top of the page
+Quote Post
BUKA_E}l{EBUKA
сообщение Aug 7 2020, 15:32
Сообщение #626


юнга
**


Группа: форумчанин
Сообщений: 20
Регистрация: 20-July 20
Пользователь №: 194,252



Доброго дня! Вопрос (по ВМЛ):
Есть цикл. В нем крутится массив на 173 объекта. Среди объектов есть штук 15 особенных.
Как в процессе цикла проигнорировать эти объекты чтобы после прогона по всем 173 - прогнать по этим 15ти? В рамках этого же цикла.

Конкретика: хочу чтобы все карты были в конце инвентаря.
Хотелку удовлетворила, но на мой взгляд - неэффективно, добавлением еще одного цикла.
файл: Program\Characters\CharacterUtilite.c

старый код
Код

void SortItems(ref NPChar)
{// отсортировать предметы в кармане, сундуке
    //тут переменные и прочие циклы
    //последний цикл:
    for (i=0; i<ITEMS_QUANTITY; i++)
    {
        makeref(itm, Items[i]);
        attr = itm.id;
        if (CheckAttribute(rObj, "items."+attr) && !CheckAttribute(itm, "SortIndex"))
        {
               NPChar.Items.(attr) = sti(rObj.Items.(attr));
               ok = true;
          }
    }
}


новый код
Код

void SortItems(ref NPChar)
{// отсортировать предметы в кармане, сундуке
    //тут переменные и прочие циклы
    //последний цикл:
    for (i=0; i<ITEMS_QUANTITY; i++)
    {
        makeref(itm, Items[i]);
        attr = itm.id;
        if (CheckAttribute(rObj, "items."+attr) && !CheckAttribute(itm, "SortIndex"))
        {
            //новый код >
            if (CheckAttribute(itm, "ItemType") && itm.ItemType == "MAP")
            {
                continue;
            }
            //новый код <
               NPChar.Items.(attr) = sti(rObj.Items.(attr));
               ok = true;
          }
    }
    //добавили цикл >
    for (i=0; i<ITEMS_QUANTITY; i++)
    {
        makeref(itm, Items[i]);
        attr = itm.id;
        if (CheckAttribute(rObj, "items."+attr) && !CheckAttribute(itm, "SortIndex") && CheckAttribute(itm, "ItemType") && itm.ItemType == "MAP")
        {
               NPChar.Items.(attr) = sti(rObj.Items.(attr));
               ok = true;
          }
    }
    //добавили цикл <
}

Меня не покидает чувство что задача решена не оптимально.
Что возможно сделать то что я хочу можно не плодя лишний цикл, но не хватает знаний/понимания.

З.Ы. За мультипостинг простите! Если сообщение не будет новым, сюда никто не заглянет sad.gif
А спойлеров правда нет? Мб я кейворд не тот пробую. [spoiler][/spoiler] не подходит
User is online!Profile CardPM
Go to the top of the page
+Quote Post
tislic
сообщение Aug 7 2020, 16:45
Сообщение #627


боцман
****


Группа: форумчанин
Сообщений: 286
Регистрация: 11-April 07
Пользователь №: 7,115



Цитата
А спойлеров правда нет? Мб я кейворд не тот пробую. [spoiler][/spoiler] не подходит

Собственно, как и оффтопа, я уже говорил, ещё раз повторюсь, spoiler можно будет поставить, если ALexusB вспомнить пароль от FTP.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
BUKA_E}l{EBUKA
сообщение Aug 7 2020, 17:24
Сообщение #628


юнга
**


Группа: форумчанин
Сообщений: 20
Регистрация: 20-July 20
Пользователь №: 194,252



От почты тоже?
Регистратор - RU-CENTER? Восстановить можно через панель управления > FTP
User is online!Profile CardPM
Go to the top of the page
+Quote Post
tislic
сообщение Aug 7 2020, 21:28
Сообщение #629


боцман
****


Группа: форумчанин
Сообщений: 286
Регистрация: 11-April 07
Пользователь №: 7,115



Привет!

С начало, думаю нужно объяснить для тех, кто не понимает о чем идет речь. spoiler делает пост короче, не надо мотать несколько экранов вниз, чтобы прочитать следующий пост, если щелкнуть на полоску spoiler, то окошко раскроется показывая скрытый текст.
Еще под спойлер принято прятать оффтоп, он очень удобен при обсуждении фильмов, сериалов, игр, чтобы не портить впечатление раскрытием сюжета у тех, кто ещё не смотрел и т.д.

С одно стороны, если бы тут еще кто-то писал и полным ходом шло обсуждение, то да, есть смысл ставить, с другой стороны, может кто-то и присоединился, но удобства чтения ответов нет и не хочется начинать.

Поэтому, я считаю, правильно будет провести голосование среди тех, кто сюда заходит, нужна им такая вещь или нет, а так, ALexusB пароль от FTP забыл wink.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

32 страниц V « < 30 31 32
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 9th August 2020 - 11:13
Яндекс цитирования Rambler's Top100
Rambler's Top100