XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
vladfaust

offline
Опыт: 12,814
Активность:
Индекс массива структур
Как узнать индекс массива структуры?
    struct playerres extends array
    {
        void gold (int add)
        {
       	    SetPlayerState(Player(?), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(Player(?), PLAYER_STATE_RESOURCE_GOLD)+add)
        }
    }
    
    void test ()
    {
        playerres pr = playerres[2]
        pr.gold(5)
    }
Чтобы подставить его в "?"?
Взрослые вопросы :3
Старый 03.07.2012, 03:07
J64_

offline
Опыт: 4,724
Активность:
Не совсем понял суть вопроса, но, возможно, ты ищешь ключевое слово "this".
Читай руководство vJass.
Также, можно посмотреть на конечный jass2 код и понять, что на самом деле происходит.
Старый 03.07.2012, 04:43
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
inadequate_, в структуре запоминай заранее
Старый 03.07.2012, 09:23
DioD

offline
Опыт: 45,184
Активность:
integer magic = pr
так-то.
Старый 03.07.2012, 10:58
Doc

offline
Опыт: 63,163
Активность:
Можно так, но это ущербно
int structn = -1
for(int i = 0; i < 14; i++){
	if (this == playerres[i]){
		structn = i
		break
	}
}
if (structn != -1){
	// actions
}
Doc добавил:
DioD, разве там обязательно будет тот номер?
Старый 03.07.2012, 10:59
ScorpioT1000
Работаем
offline
Опыт: отключен
struct A {}

A object = A.create()
int id = object
ScorpioT1000 добавил:
Doc, такой большой, а не знаешь основ =(
Старый 03.07.2012, 12:46
vladfaust

offline
Опыт: 12,814
Активность:
DioD, тада! Работает!
    int magic = 0
    
    struct playerres extends array
    {
        void gold (int add)
        {
            SetPlayerState(Player(magic), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(Player(magic), PLAYER_STATE_RESOURCE_GOLD)+add)
        }
    }
    
    void test ()
    {
        playerres pr = playerres[2]
        magic = pr
        pr.gold(5)
    }
magic = 2)
Старый 03.07.2012, 14:29
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
inadequate_, ОМГ. Замени внутри структуры на this и будет тебе счастье <_<
Старый 03.07.2012, 14:38
vladfaust

offline
Опыт: 12,814
Активность:
alexprey, работает, спасибо!
И не надо ОМг, я только учусь.
Старый 03.07.2012, 14:44
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
inadequate_, не факт, что this может совпасть. Там очень хитрая система со связанным списком на назначение хендла. Так что будь осторожнее.
Старый 03.07.2012, 14:48
ScorpioT1000
Работаем
offline
Опыт: отключен
Чтобы избежать проблем с this, делается вот так:
struct PlayerResources {

	private static thistype _instances[]
	private static int _instanceCount = 0

	static thistype New(int id) {
		thistype this = thistype.create()
		thistype._instanceCount++
		thistype._instances[_instanceCount] = this
		return this
	}
	static thistype Instance(int id) { return thistype._instances[id]; }

	int playerId

	void AddGold (int add)
	{
		SetPlayerState(Player(.playerId), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(Player(.playerId), PLAYER_STATE_RESOURCE_GOLD)+add)
	}
	void AddWood ...
	void ...


}

void Init() { // инициализация библиотеки
	int i=0
	while(i < 12) {
		PlayerResources.New(i)
	}
}



// test
PlayerResources.Instance(0).AddGold(100500); // player 0
PlayerResources.Instance(2).AddWood(9000); // player 2
Старый 03.07.2012, 15:05
DioD

offline
Опыт: 45,184
Активность:
синтаксис надстройки богомерский, ни ява ни плюсы, в том же vjass куда понятнее как оно работает и просто интуитивно понятно как вытягивать внутренние данные.
излишне так как сама структура уже интегер хранить в структуре номер структуры - блот.
Старый 03.07.2012, 18:29
Doc

offline
Опыт: 63,163
Активность:
ScorpioT1000, я не про то, а про то, что в посте алекспрея. Но ок.
Старый 03.07.2012, 20:35
adic3x

offline
Опыт: 107,539
Активность:
inadequate_, не факт, что this может совпасть. Там очень хитрая система со связанным списком на назначение хендла. Так что будь осторожнее.
В случае со структорой, которая extends array косяков быть не должно, т.к. там по моему вообще нет конструктора и т.д.
Старый 06.07.2012, 10:19
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:14.