Сейчас 01:54:13 Понедельник, 29 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Проблема с Condition(function f) и struct
Проблема с 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)
---------------------------------------------
даже не так.

Code
function this.func
вызывает ошибку! =( что делать


 

[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
Блокировки:
Не факт.

 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Проблема с Condition(function f) и struct
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz