forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Скрипты (http://forum.boolean.name/showthread.php?t=17551)

Владислав 21.11.2012 18:25

Скрипты
 
Привет!
вот потихоньку разбираюсь со скриптами, возник вопрос, как использовать функции в коде игры из скрипта, т.е. из игры вызвать функцию в скрипте можно, а наоборот ?
Как я понял так сделать нельзя, тогда подскажите способы как из скрипта узнать координаты игрока, к примеру?
Вообще как это организовать, передавать насильно в скрипт координаты не вариант, т.к. скриптов много, и они должны быть одного типа.

Nex 22.11.2012 00:43

Ответ: Скрипты
 
Скрипт по сути текстовый файл и когда его (скрипт) надо задействовать, то считывай файл, парси и тд. А так же функции скриптов должны быть прописаны в самой игре. По сути это тот же код.

Владислав 22.11.2012 10:36

Ответ: Скрипты
 
так вот как мне эти функции использовать из скрипта ?

Черный крыс 22.11.2012 15:55

Ответ: Скрипты
 
Наскок я знаю, все функции Ксорса забиндены разрабами, поэтому тебе в скрипте остается только их вызывать.

Скорее всего названия одноименные.
Примерно так : x = xEntityX(entity);

Владислав 22.11.2012 20:49

Ответ: Скрипты
 
Я наверное непонятно объяснил...


например, написал я функцию в основном коде

LoadMap(map)
map = loadmesh(level1.b3d)
end function

как вызвать эту функцию из скрипта ?

Nerd 22.11.2012 23:12

Ответ: Скрипты
 
Какой язык? В Си достаточно заюзать xRegisterFunction. В блице для этого нужно как-то получить адрес функции (через либу FastPointer, например), но вряд ли оно будет работать.

Черный крыс 23.11.2012 11:24

Ответ: Скрипты
 
Как написал нерд, ее необходимо зарегестрировать в скриптовом движке.

Но в Блиц3Д такое не сделать, так как он не поддерживает указатели на функции.

ЗЫ Можно написать эту функцию в самом скрипте.

Владислав 23.11.2012 12:20

Ответ: Скрипты
 
Можно по-подробнее ?

Nerd 23.11.2012 12:39

Ответ: Скрипты
 
Суть такова:
- Ставишь вот это - http://fastlibs.com/download.php?id=...inter_1_00.zip
- Смотришь в примере Example_FunctionPointer.bb как получить указатель на функцию (там делаются дикие махинации над goto, так что лучше сделай только одну функцию-обработчик, а все остальные имплементируй внутри скрипта)
- Пробуешь заюзать xRegisterFunction, указав в первом аргументе строкой название функции и аргументы (например: "LoadMap(map)"), а во втором - указатель на функцию
Самому интересен результат.

Черный крыс 23.11.2012 17:43

Ответ: Скрипты
 
Неполучится. В функции xRegisterFunction() нужно передавать функцию, которая вызывается по стандарту __stdcall.

Цитата:

Можно по-подробнее ?
Что подробнее? Как написать функцию?

Ну примерно так :

Код:

void LoadMap(int &map)
{
    map = xLoadMesh("level1.b3d");
};


Владислав 23.11.2012 21:14

Ответ: Скрипты
 
Цитата:

Сообщение от Diablo1909 (Сообщение 244608)
Неполучится. В функции xRegisterFunction() нужно передавать функцию, которая вызывается по стандарту __stdcall.



Что подробнее? Как написать функцию?

Ну примерно так :

Код:

void LoadMap(int &map)
{
    map = xLoadMesh("level1.b3d");
};



Ну епрст, я что настолько непонятно изъясняюсь ? :4to:


У меня получилось зарегистрировать функцию, но из скрипта никак не хочет работать ...

Черный крыс 23.11.2012 22:14

Ответ: Скрипты
 
Цитата:

У меня получилось зарегистрировать функцию, но из скрипта никак не хочет работать ...
Надеюсь сам понял что сказал?

Если она не хочет работать из скрипта, значит она не зарегестрировалась. Фейл при регистрации может быть только в одном случае : ты пытаешься скормить скрипту либо функцию с некорректным стандартом вызова либо какую-то ересь.

логично?

Владислав 24.11.2012 10:42

Ответ: Скрипты
 
Diablo1909, конечно понял, моя функция теперь подсвечивается как стандартная...

Nerd 24.11.2012 11:50

Ответ: Скрипты
 
Цитата:

Сообщение от Владислав (Сообщение 244682)
Diablo1909, конечно понял, моя функция теперь подсвечивается как стандартная...

You doing it wrong.
Цитата:

Сообщение от Diablo1909 (Сообщение 244608)
Неполучится. В функции xRegisterFunction() нужно передавать функцию, которая вызывается по стандарту __stdcall.

Э! Если в блице не такие, то каким анальным колдунством в этой либе реализована мультипоточность?

Черный крыс 24.11.2012 13:08

Ответ: Скрипты
 
Цитата:

Э! Если в блице не такие, то каким анальным колдунством в этой либе реализована мультипоточность?
эта либа знает, что функции блица необходимо вызывають по стандарту __ccall.


Часовой пояс GMT +4, время: 15:40.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot