Ф-ия победы
DeadJass Дата: Вторник, 14 Июня 2011, 11:52:32 | Сообщение # 1
7 уровень
Группа: Проверенные
Сообщений: 447
Награды:
0
Репутация:
30
Блокировки:
Code
if kill[idpk]==score { whilenot i>11 { CustomVictoryBJ(pk,true,true ) CustomDefeatBJ(Player(i), "Вы проиграли!" ) i++ }
Суть когда переменаная kill[idpk]==score то для плеера pk(Владелец убивающего юнита) Будет сообщение о победе. Для других Проигрыш idpk=Номер игрока владельца убивающего юнита Code
GetPlayerId(GetOwningPlayer(GetKillingUnit())
так вот в игре ничего не происходит. Цикл стоит в уонце триггера.
^ кликабельно
Archers Of The Island v1.8 - на стадии завершения
SirNikolas Дата: Вторник, 14 Июня 2011, 12:07:58 | Сообщение # 2
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
Quote (DeadJass )
CustomVictoryBJ(pk,true,true )
Зачем это в цикле?
DeadJass Дата: Вторник, 14 Июня 2011, 12:10:21 | Сообщение # 3
7 уровень
Группа: Проверенные
Сообщений: 447
Награды:
0
Репутация:
30
Блокировки:
SirNikolas , не знаю.....само както. Сейчас протестируем
^ кликабельно
Archers Of The Island v1.8 - на стадии завершения
SPtrue Дата: Вторник, 14 Июня 2011, 12:32:15 | Сообщение # 4
Mí alegre
Группа: Проверенные
Сообщений: 2732
Награды:
2
Репутация:
692
Блокировки:
сделал?)
DeadJass Дата: Вторник, 14 Июня 2011, 13:37:42 | Сообщение # 5
7 уровень
Группа: Проверенные
Сообщений: 447
Награды:
0
Репутация:
30
Блокировки:
SirNikolas , всеравно игрок набивает 35 убийств а победы нету =\Добавлено (14-06-2011, 13:37) --------------------------------------------- Эта ф-ия не работает если стоит в конце триггера. А если стоит в начале,то прерывает все действия
^ кликабельно
Archers Of The Island v1.8 - на стадии завершения
SirNikolas Дата: Вторник, 14 Июня 2011, 13:54:19 | Сообщение # 6
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
Quote (DeadJass )
if kill[idpk]==score {
Может, >=? Кстати, в том куске кода две открывающиеся скобки и одна закрывающаяся.
DeadJass Дата: Вторник, 14 Июня 2011, 14:26:47 | Сообщение # 7
7 уровень
Группа: Проверенные
Сообщений: 447
Награды:
0
Репутация:
30
Блокировки:
SirNikolas , там ниже еще есть. могу дать полный триггер где это стоитДобавлено (14-06-2011, 14:26) ---------------------------------------------
Code
void Trig_KillHero_Timer( ) { timer t = GetExpiredTimer( ) int i = 0 whilenot t==KillTimer[i] { i++ } kill[i] = 0 t = null } void Trig_KillHero_Actions( ) { int i = 0 ,x = 0 unit k = GetKillingUnit( ), d = GetTriggerUnit( ) player pk = GetOwningPlayer( k ), pd = GetOwningPlayer( d ) int idpk = GetPlayerId( pk ), idpd = GetPlayerId( pd ), gold = 150, goldkill = ( 25 * kill[idpk] ), goldfb = 200 multiboarditem mbitem if IsUnitType( d, UNIT_TYPE_HERO ) { kill[idpk] ++ whilenot x > 11 { if pk== Player(x) and GetPlayerSlotState(Player(x)) == PLAYER_SLOT_STATE_PLAYING { killmb[idpk]++ mbitem = MultiboardGetItem(mbg,row[x], 1) MultiboardSetItemValue(mbitem, I2S(killmb[idpk]) ) MultiboardReleaseItem(mbitem) } x++ } x=0 whilenot x > 11 { if pd== Player(x) and GetPlayerSlotState(Player(x)) == PLAYER_SLOT_STATE_PLAYING { deathmb[idpd]++ mbitem = MultiboardGetItem(mbg,row[x],2) MultiboardSetItemValue(mbitem, I2S(deathmb[idpd]) ) MultiboardReleaseItem(mbitem) } x++ } if fb==false { SetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD ) + gold + goldkill + goldfb ) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., pcn[idpk]+" ( "+I2S(lvl[idpk])+" ) "+ " убил игрока " + pcn[idpd] +" ( "+I2S(lvl[idpd])+" ) "+ " и получил за его голову " + "|c00FFFF00" + I2S( R2I( gold + goldkill ) ) + " + " + I2S( R2I( goldfb ) ) + "|cFFFF0303 ( Первая Кровь )|r" + " золота!" ) StartSound(gg_snd_firstblood) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., pcn[idpk] + " пролил |cFFFF0303первую кровь!|r" ) fb = true else DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., pcn[idpk] +" ( "+I2S(lvl[idpk])+" ) "+ " убил игрока " + pcn[idpd] +" ( "+I2S(lvl[idpd])+" ) "+ " и получил за его голову " + "|c00FFFF00" + I2S( R2I( gold + goldkill ) ) + "|r золота!" ) } if kill[idpk] > 1 { StartSound(SoundS[kill[idpk]]) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., pcn[idpk] + TextS[kill[idpk]] ) } if kill[idpk] > 5 { DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., pcn[idpk] + TextS[5] ) } TimerStart( KillTimer[idpk], 10., false, function Trig_KillHero_Timer ) SetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD ) + gold + goldkill ) SetPlayerState( pd, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pd, PLAYER_STATE_RESOURCE_GOLD ) - gold / 2) } i=0 if kill[idpk]==score { CustomVictoryBJ(pk,true,true ) whilenot i>11 { CustomDefeatBJ(Player(i), "Вы проиграли!" ) i++ } k = null d = null pk=null pd=null } //=========================================================================== void InitTrig_KillHero( ) { int index = 0 gg_trg_KillHero = CreateTrigger( ) whilenot index > 11 { TriggerRegisterPlayerUnitEvent( gg_trg_KillHero, Player( index ), EVENT_PLAYER_UNIT_DEATH, null ) index ++ } TriggerAddAction( gg_trg_KillHero, function Trig_KillHero_Actions ) }
Добавлено (14-06-2011, 14:26) --------------------------------------------- действия после цикла тупо игнорятся
^ кликабельно
Archers Of The Island v1.8 - на стадии завершения
SirNikolas Дата: Вторник, 14 Июня 2011, 14:41:06 | Сообщение # 8
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
А ты не мог бы нормально это отформатировать? Я не пойму, где закрывается этот блок?Quote (DeadJass )
if IsUnitType( d, UNIT_TYPE_HERO ) {
DeadJass Дата: Вторник, 14 Июня 2011, 14:54:42 | Сообщение # 9
7 уровень
Группа: Проверенные
Сообщений: 447
Награды:
0
Репутация:
30
Блокировки:
SirNikolas , сейчас через прогу прогонюДобавлено (14-06-2011, 14:54) ---------------------------------------------
Code
void Trig_KillHero_Timer( ) { timer t = GetExpiredTimer( ) int i = 0 whilenot t==KillTimer[i] { i + + } kill[i] = 0 t = null } void Trig_KillHero_Actions( ) { int i = 0 , x = 0 unit k = GetKillingUnit( ), d = GetTriggerUnit( ) player pk = GetOwningPlayer( k ), pd = GetOwningPlayer( d ) int idpk = GetPlayerId( pk ), idpd = GetPlayerId( pd ), gold = 150, goldkill = ( 25 * kill[idpk] ), goldfb = 200 multiboarditem mbitem if IsUnitType( d, UNIT_TYPE_HERO ) { kill[idpk] + + whilenot x > 11 { if pk== Player( x ) and GetPlayerSlotState( Player( x ) ) == PLAYER_SLOT_STATE_PLAYING { killmb[idpk] + + mbitem = MultiboardGetItem( mbg, row[x], 1 ) MultiboardSetItemValue( mbitem, I2S( killmb[idpk] ) ) MultiboardReleaseItem( mbitem ) } x + + } x = 0 whilenot x > 11 { if pd== Player( x ) and GetPlayerSlotState( Player( x ) ) == PLAYER_SLOT_STATE_PLAYING { deathmb[idpd] + + mbitem = MultiboardGetItem( mbg, row[x], 2 ) MultiboardSetItemValue( mbitem, I2S( deathmb[idpd] ) ) MultiboardReleaseItem( mbitem ) } x + + } if fb==false { SetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD ) + gold + goldkill + goldfb ) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., pcn[idpk] + " ( " + I2S( lvl[idpk] ) + " ) " + " убил игрока " + pcn[idpd] + " ( " + I2S( lvl[idpd] ) + " ) " + " и получил за его голову " + "|c00FFFF00" + I2S( R2I( gold + goldkill ) ) + " + " + I2S( R2I( goldfb ) ) + "|cFFFF0303 ( Первая Кровь )|r" + " золота!" ) StartSound( gg_snd_firstblood ) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., pcn[idpk] + " пролил |cFFFF0303первую кровь!|r" ) fb = true else DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., pcn[idpk] + " ( " + I2S( lvl[idpk] ) + " ) " + " убил игрока " + pcn[idpd] + " ( " + I2S( lvl[idpd] ) + " ) " + " и получил за его голову " + "|c00FFFF00" + I2S( R2I( gold + goldkill ) ) + "|r золота!" ) } if kill[idpk] > 1 { StartSound( SoundS[kill[idpk]] ) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., pcn[idpk] + TextS[kill[idpk]] ) } if kill[idpk] > 5 { DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., pcn[idpk] + TextS[5] ) } TimerStart( KillTimer[idpk], 10., false, function Trig_KillHero_Timer ) SetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD ) + gold + goldkill ) SetPlayerState( pd, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pd, PLAYER_STATE_RESOURCE_GOLD ) - gold / 2 ) } i = 0 if kill[idpk]==score { CustomVictoryBJ( pk, true, true ) whilenot i > 11 { CustomDefeatBJ( Player( i ), "Вы проиграли!" ) i + + } k = null d = null pk = null pd = null } //=========================================================================== void InitTrig_KillHero( ) { int index = 0 gg_trg_KillHero = CreateTrigger( ) whilenot index > 11 { TriggerRegisterPlayerUnitEvent( gg_trg_KillHero, Player( index ), EVENT_PLAYER_UNIT_DEATH, null ) index + + } TriggerAddAction( gg_trg_KillHero, function Trig_KillHero_Actions ) }
^ кликабельно
Archers Of The Island v1.8 - на стадии завершения
SirNikolas Дата: Вторник, 14 Июня 2011, 15:02:40 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
Очевидно, прога не поддерживает cJASS. Придется вручную.
DeadJass Дата: Вторник, 14 Июня 2011, 23:31:00 | Сообщение # 11
7 уровень
Группа: Проверенные
Сообщений: 447
Награды:
0
Репутация:
30
Блокировки:
SirNikolas , блок ифа кончается пред k=nullДобавлено (14-06-2011, 16:53) --------------------------------------------- эх,что никто не знает?
Добавлено (14-06-2011, 18:13) --------------------------------------------- поставлю вопрос по другому как сделать чтобы при достижении kill[idpk] == score игрок выигрывал а оставльные проигрывали
Добавлено (14-06-2011, 18:50) --------------------------------------------- Клоз тему
Добавлено (14-06-2011, 23:31) --------------------------------------------- ДА что ж такое.
Code
void Trig_WinsKills_Actions() { int i=0 player p whilenot i>11 { if kill[i]==score { CustomVictoryBJ(Player(i),true,true ) p=Player(i) i++ } i=0 whilenot i>11 { if p!=Player(i) { CustomDefeatBJ(Player(i), "Вы проиграли!" ) } i++ } } } //=========================================================================== void InitTrig_WinsKills() { gg_trg_WinsKills = CreateTrigger( ) TriggerRegisterTimerEvent(gg_trg_WinsKills,.04,true) TriggerAddAction( gg_trg_WinsKills, function Trig_WinsKills_Actions ) }
не работает савсем савсем=\
^ кликабельно
Archers Of The Island v1.8 - на стадии завершения
adiga Дата: Четверг, 16 Июня 2011, 01:17:17 | Сообщение # 12
7 уровень
Группа: Проверенные
Сообщений: 489
Награды:
0
Репутация:
14
Блокировки:
гуи те в помощь не плавь себе мозги
триггеринг 439/450 спеллкрафт 447/450 картокрафт 427/450 ландшафтинг 189/450 фастмэйкинг 225/225 иконкрафтинг 310/450 импортинг 110/450 самооценкинг 450/450
SirNikolas Дата: Четверг, 16 Июня 2011, 19:49:33 | Сообщение # 13
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
Quote (DeadJass )
kill[i]==score
Может, переменные не инициализированы?Code
scope InitKillScore initializer Init { private void Init() { int i = 0 do { kill[i] = 0 exitwhen i == 15 i++ } score = 0 } }
Quote (DeadJass )
if kill[i]==score { CustomVictoryBJ(Player(i),true,true ) p=Player(i) i++ }
Code
if kill[i] == score { p = Player(i) CustomVictoryBJ(p, true, true) break i++ }
Сообщение отредактировал SirNikolas - Четверг, 16 Июня 2011, 19:51:38
lawson Дата: Четверг, 16 Июня 2011, 21:05:02 | Сообщение # 14
Группа: Проверенные
Сообщений: 3482
Награды:
0
Репутация:
974
Блокировки:
Quote (adiga )
гуи те в помощь не плавь себе мозги
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Четверг, 16 Июня 2011, 21:09:05
DeadJass Дата: Четверг, 16 Июня 2011, 21:23:09 | Сообщение # 15
7 уровень
Группа: Проверенные
Сообщений: 447
Награды:
0
Репутация:
30
Блокировки:
SirNikolas , можно же сразу ? Code
whilenot i>15 { kills[i]=0?
^ кликабельно
Archers Of The Island v1.8 - на стадии завершения
SirNikolas Дата: Пятница, 17 Июня 2011, 09:28:27 | Сообщение # 16
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
Code
do { kill[i] = 0 exitwhen i == 15 i++ }
Транслируется вCode
loop set kill[i] = 0 exitwhen i == 15 set i = i + 1 endloop
Quote (DeadJass )
whilenot i>15 { kills[i++]=0 }
Code
loop exitwhen i > 15 set kills[i] = 0 set i = i + 1 endloop
Лишние действия.
DeadJass Дата: Пятница, 17 Июня 2011, 18:57:43 | Сообщение # 17
7 уровень
Группа: Проверенные
Сообщений: 447
Награды:
0
Репутация:
30
Блокировки:
SirNikolas , всеравно получается для игрока 1 срабатывает =\Добавлено (17-06-2011, 18:57) --------------------------------------------- Это срабатывает только на одного игрока красного. Токестьесли карсный наберет килл == скоре то все окесли кто то другой тоничсео
^ кликабельно
Archers Of The Island v1.8 - на стадии завершения