Проблема с Condition(function f) и struct
|
|
Hexing | Дата: Суббота, 06 Августа 2011, 15:47:09 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Code call TriggerAddCondition(this.eventTrigger, Condition(function this.IsObjectTarget)) не работает, ругается что "this is not a struct name" убрать function и всё работает, кроме того что ничего не работает потому что в Condition нада передать function а не code. структура - Quest. eventTrigger - trigger, объвленный в структуре. IsObjectTarget - method, объявленный в структуреДобавлено (06-08-2011, 15:47) --------------------------------------------- даже не так. вызывает ошибку! =( что делать
|
|
|
|
[DS] | Дата: Суббота, 06 Августа 2011, 16:12:11 | Сообщение # 2 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| используй static method, a ne method и не надо приставку this. ставь имя твоей даты.
|
|
|
|
FkoFF | Дата: Суббота, 06 Августа 2011, 17:03:29 | Сообщение # 3 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Hexing, тебе бы джасс освоить, а уже потом на вджасс переходить.
|
|
|
|
[DS] | Дата: Суббота, 06 Августа 2011, 17:10:12 | Сообщение # 4 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| у кого та тут был мануал, почитай его
|
|
|
|
SirNikolas | Дата: Суббота, 06 Августа 2011, 19:00:27 | Сообщение # 5 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| У Дракона. Добавлено (06-08-2011, 19:00) --------------------------------------------- Ругается потому, что обычный method транслируется в function s__structname_methodname takes integer this [...] returns ..., а в условия можно передавать только function ... takes nothing returns boolean.
|
|
|
|
Hexing | Дата: Суббота, 06 Августа 2011, 19:16:25 | Сообщение # 6 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| все, на хайве спросил... просто вместо this - thistype, и метод в статике писать, а в статик методе через this. уже обычный вызвать. спасибо за ответы
|
|
|
|
SirNikolas | Дата: Суббота, 06 Августа 2011, 19:19:27 | Сообщение # 7 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Внутри структуры можно thistype не писать. Просто имя статичного метода. Добавлено (06-08-2011, 19:19) ---------------------------------------------
Quote (Hexing) через this. уже обычный вызвать А откуда ты в static method возьмешь this?
|
|
|
|
[DS] | Дата: Суббота, 06 Августа 2011, 19:33:50 | Сообщение # 8 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| ну в принципе, можно если не будет совподений имен
|
|
|
|
Hexing | Дата: Суббота, 06 Августа 2011, 20:11:09 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (SirNikolas) А откуда ты в static method возьмешь this? не то написал, я там ExecuteFunc() юзаю, а параметры передать глобалками можно!
|
|
|
|
[DS] | Дата: Суббота, 06 Августа 2011, 22:04:11 | Сообщение # 10 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| Зачем ExecuteFunc()? Если ты методы используешь?
|
|
|
|
Faion | Дата: Суббота, 06 Августа 2011, 23:41:37 | Сообщение # 11 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Quote (Hexing) а в статик методе через this
Когда юзаешь статик, нельзя юзаь this, даж вроде в мане написано об этом.
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
Hexing | Дата: Воскресенье, 07 Августа 2011, 11:54:03 | Сообщение # 12 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (|DS|) Когда юзаешь статик, нельзя юзаь this, даж вроде в мане написано об этом. Quote (Hexing) не то написал, я там ExecuteFunc() юзаю, а параметры передать глобалками можно! Добавлено (07-08-2011, 10:01) --------------------------------------------- дааа ExecuteFunc() не работает... ох уж эти структуры, мне кажется моя задумка ваще невозможна: Code ///////GREAT QUEST SYSTEM/////////////////////////////////
interface Quest trigger eventTrigger = null unit unitGiver = null integer rewardXp = 0 integer rewardGold = 0 string beginString = "" string finishString = "" string toFinishString = "" trigger eventGive = null effect effectGiver = null method Reward takes nothing returns nothing method Init takes nothing returns nothing endinterface
struct KillQuest extends Quest integer unitToKill = 0 integer unitCount = 0 integer unitTotal = 0 string killString = "" method Reward takes nothing returns nothing local integer i = 0 local player pl = GetOwningPlayer(Heroes[i]) loop call AddHeroXP(Heroes[i], this.rewardXp, true) call SetPlayerState(pl, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(pl, PLAYER_STATE_RESOURCE_GOLD)) set i = i + 1 exitwhen(i == HeroesCount) endloop set pl = null endmethod method Init takes nothing returns nothing set this.eventGive = CreateTrigger() set this.unitTotal = this.unitCount set this.effectGiver = AddSpecialEffectTarget("Abilities\\Spells\\Other\\TalkToMe\\TalkToMe.mdl",this.unitGiver,"overhead") call TriggerRegisterUnitEvent(this.eventGive, this.unitGiver, EVENT_UNIT_ATTACKED) call TriggerAddAction(this.eventGive, function thistype.onBegin) endmethod method Death takes nothing returns nothing set this.unitCount = this.unitCount - 1 if(this.unitCount == 0) then call this.ToFinish() else call BJDebugMsg(I2S(this.unitCount) + this.killString + I2S(this.unitTotal)) endif endmethod static method onDeath takes nothing returns nothing call ExecuteFunc("Death") endmethod static method onBegin takes nothing returns nothing call ExecuteFunc("Begin") endmethod method ToFinish takes nothing returns nothing call BJDebugMsg(this.toFinishString) set this.eventGive = CreateTrigger() set this.effectGiver = AddSpecialEffectTarget("Abilities\\Spells\\Other\\TalkToMe\\TalkToMe.mdl",this.unitGiver,"overhead") call TriggerRegisterUnitEvent(this.eventGive, this.unitGiver, EVENT_UNIT_ATTACKED) call TriggerAddAction(this.eventGive, function thistype.onFinish) endmethod static method onFinish takes nothing returns nothing ExecuteFunc("Finish") endmethod method Begin takes nothing returns nothing call BJDebugMsg(this.beginString) call DestroyTrigger(this.eventGive) set this.eventGive = null call DestroyEffect(this.effectGiver) call AddSpecialEffectTarget("Objects\\RandomObject\\RandomObject.mdl",this.unitGiver,"overhead") set this.eventTrigger = CreateTrigger() call TriggerRegisterPlayerUnitEvent(this.eventTrigger, Player(12), EVENT_PLAYER_UNIT_DEATH, null) call TriggerAddAction(this.eventTrigger, function thistype.onDeath) endmethod method Destroy takes nothing returns nothing call DestroyEffect(this.effectGiver) set this.effectGiver = null set this.unitGiver = null set this.beginString = null set this.finishString = null call DestroyTrigger(this.eventTrigger) set this.eventTrigger = null endmethod method Finish takes nothing returns nothing call DestroyTrigger(this.eventGive) set this.eventGive = null call BJDebugMsg(this.finishString) call this.Reward() call this.Destroy() endmethod endstruct
//////END QUEST SYSTEM///////////////////////////////////////// Добавлено (07-08-2011, 11:54) --------------------------------------------- пришлось использовать хт
|
|
|
|
SirNikolas | Дата: Понедельник, 08 Августа 2011, 07:25:56 | Сообщение # 13 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (method Init) call TriggerAddAction(this.eventGive, function thistype.onBegin) Объявление функции должно находиться выше первого обращения к ней.Quote (static method onDeath) call ExecuteFunc("Death") Если хотел так сделать, то, во-первых, не "Death", а thisype.Death.name (без кавычек), а во-вторых, вызывать через ExecuteFunc можно только function ... takes nothing или static method ... takes nothing, но не method ... Читай сообщение №5.
Если ты хотел так сделать, то нужно циклом перебирать умершего юнита:Code static method onDeath takes nothing returns nothing local unit u = GetTriggerUnit() local integer id = GetUnitTypeId(u) local thistype this = 1 loop exitwhen u == this.unitHero and id == this.id or this >= 8191 set this = this + 1 endloop if this <= 8190 then call this.Death() endif set u = null endmethod
Сообщение отредактировал SirNikolas - Понедельник, 08 Августа 2011, 07:27:01 |
|
|
|
Hexing | Дата: Понедельник, 08 Августа 2011, 09:04:23 | Сообщение # 14 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Я через все перечисленное своим умом прошел, методом тыка, и пришел в ХТ... Это уж побыстрее перебора
|
|
|
|
SirNikolas | Дата: Понедельник, 08 Августа 2011, 11:36:10 | Сообщение # 15 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Не факт.
|
|
|
|