Система килов - баги
Dreii Дата: Воскресенье, 29 Января 2012, 15:07:47 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды:
0
Репутация:
603
Блокировки:
Code
bool KillHeroCond() { return IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO)==true } 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,r = 0,f = 6 int min=GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_FOOD_USED),sec=GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_FOOD_CAP) unit k = GetKillingUnit( ), d = GetTriggerUnit( ) player pk = GetOwningPlayer( k ), pd = GetOwningPlayer( d ) int idpk = GetPlayerId( pk ), idpd = GetPlayerId( pd ), gold = 55+25*GetHeroLevel(d), goldfb = 100 string m= I2S(min) string s= I2S(sec) string time multiboarditem mbitem SetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD )+gold) SetPlayerState( pd, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pd, PLAYER_STATE_RESOURCE_GOLD )-gold / 2) if min < 10 { m = "0" + m time=m+" : "+s } if sec < 10 { s = "0" + s time=m+" : "+s } if GetRandomReal(0.,1.)>=.45 { SetPlayerState( pk, PLAYER_STATE_RESOURCE_LUMBER, GetPlayerState( pk, PLAYER_STATE_RESOURCE_LUMBER )+1) TT(pc[GetPlayerId(pk)]+"+1",k) } killmb[idpk]++ deathmb[idpd]++ spree[idpk] ++ kill[idpk] ++ kill[idpd]=0 if fb==false { SetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD ) + gold+goldfb ) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0.,"["+time+"] " + pc[idpk] + GetPlayerName(pk) + "|r" + " pwned " + pc[idpd] + GetPlayerName(pd) + "|r's" + " head for " + "|c00FFFF00" + I2S(R2I(gold)) + " and " + I2S(R2I(goldfb)) + " gold! - |cFFFF0303First blood!|r") StartSound(gg_snd_firstblood) fb = true else if spree[idpk] > 2 and spree[idpk]<=10 { StartSound( KS_Sound[spree[idpk]] ) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0.,"["+time+"] "+pc[idpk]+GetPlayerName(pk)+"|r"+" pwned " + pc[idpd]+GetPlayerName(pd)+"|r's" + " head for " + "|c00FFFF00" + I2S( R2I( gold ) ) + "|r gold! - " +ape[spree[idpk]]+ KS_Text[spree[idpk]]) else DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., "["+time+"] "+pc[idpk]+GetPlayerName(pk)+"|r" + " pwned " + pc[idpd]+GetPlayerName(pd)+"|r's" + " head for " + "|c00FFFF00" + I2S( R2I( gold ) ) + "|r gold!") } } if spree[idpk]>10 { spree[idpk]=10 StartSound( KS_Sound[10] ) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0.,"["+time+"] "+pc[idpk]+GetPlayerName(pk)+"|r"+" pwned " + pc[idpd]+GetPlayerName(pd)+"|r's" + " head for " + "|c00FFFF00" + I2S( R2I( gold ) ) + "|r gold! - " +ape[10]+ KS_Text[10]) } if spree[idpd] > 2 and spree[idpd]<=10 { DisplayTextToPlayer( GetLocalPlayer( ), 0., 0.,"["+time+"] "+pc[idpk]+GetPlayerName(pk)+"|r" + " has just ended "+pc[idpd]+GetPlayerName(pd)+"|r's" + KS_Text[spree[idpd]]+ " streak for "+"|c00FFFF00" + I2S( R2I(spree[idpd]*40 ) ) + "|r gold!") SetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD )+spree[idpd]*30) } if kill[idpk] > 1 and kill[idpk]<=5 { StartSound(SoundS[kill[idpk]]) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0.,"["+time+"] "+ pc[idpk]+GetPlayerName(pk)+"|r" + TextS[kill[idpk]] ) } if kill[idpk]>5 { kill[idpk]=5 StartSound(SoundS[5]) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0.,"["+time+"] "+ pc[idpk]+GetPlayerName(pk)+"|r" + TextS[5] ) } TimerStart(KillTimer[idpk], 10., false, function Trig_KillHero_Timer ) spree[idpd] = 0 flush locals } void InitTrig_KillHero( ) { gg_trg_KillHero = CreateTrigger( ) TriggerRegisterAnyUnitEventBJ( gg_trg_KillHero,EVENT_PLAYER_UNIT_DEATH) TriggerAddAction( gg_trg_KillHero, function Trig_KillHero_Actions ) TriggerAddCondition( gg_trg_KillHero,Condition( function KillHeroCond) ) }
Отображает хорошо,но потом начинает не показывать вообще,вроде бы,но точно не уверен перестает работать когда кто то набивает GODLIKE и выше,но потом снова работает а потом неработает. Я уже немогу смотреть на этот код,слезы прям текут.Кто найдет ошибку зханесу в Мега благодарности!
Сообщение отредактировал Dreii - Воскресенье, 29 Января 2012, 15:15:53
Dreii Дата: Вторник, 31 Января 2012, 11:35:25 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды:
0
Репутация:
603
Блокировки:
Что? Никто не поможет?
Ty3uK Дата: Вторник, 31 Января 2012, 12:08:29 | Сообщение # 3
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
Приду домой- погляжу. Постараюсь помочь
Brut@lus Дата: Вторник, 31 Января 2012, 12:54:58 | Сообщение # 4
Группа: Заблокированные
Сообщений: 2496
Награды:
1
Репутация:
924
Блокировки:
cJass?
Андреич Дата: Вторник, 31 Января 2012, 13:29:26 | Сообщение # 5
7 уровень
Группа: Проверенные
Сообщений: 363
Награды:
0
Репутация:
138
Блокировки:
Brut@lus , угу...
"не психуй - пиши на гуй..."
SirNikolas Дата: Вторник, 31 Января 2012, 13:50:44 | Сообщение # 6
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
Привел код в человеческий вид. Заодно исправил не самую эффективную проверку достижения максимума spree / kill (Godlike / Rampage).
Code
include "cj_print.j" constant player LocalPlayer = Get##LocalPlayer() define <GetLocalPlayer()> = LocalPlayer scope KillHero initializer Init { define { <trigger gg_trg_KillHero = null> = constant trigger gg_trg_KillHero = CreateTrigger() // ^ Заменяем его в globals private GOLD_FIRST_BLOOD = 100. } private void Init() { TriggerRegisterAnyUnitEventBJ(gg_trg_KillHero, EVENT_PLAYER_UNIT_DEATH) TriggerAddCondition(gg_trg_KillHero, Condition( \ lambda bool() { return IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true } )) TriggerAddAction(gg_trg_KillHero, \ lambda void() { int i = 0, x = 0, r = 0, f = 6, \ min = GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_FOOD_USED), sec = GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_FOOD_CAP) string m = I2S(min) unit k = GetKillingUnit(), d = GetTriggerUnit() player pk = GetOwningPlayer(k), pd = GetOwningPlayer(d) int idpk = GetPlayerId(pk), idpd = GetPlayerId(pd), \ gold = 55 + 25 * GetHeroLevel(d) //string s= I2S(sec) multiboarditem mbitem // ^ Где он используется? SetPlayerState(pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(pk, PLAYER_STATE_RESOURCE_GOLD) + gold) SetPlayerState(pd, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(pd, PLAYER_STATE_RESOURCE_GOLD) - gold / 2) string time if min < 10 { m = "0" + m } if sec < 10 { time = m + " : 0" + I2S(sec) } else { time = m + " : " + I2S(sec) } if GetRandomReal(0.,1.) >= .45 { SetPlayerState(pk, PLAYER_STATE_RESOURCE_LUMBER, GetPlayerState(pk, PLAYER_STATE_RESOURCE_LUMBER) + 1) TT(pc[GetPlayerId(pk)] + "+1", k) } killmb[idpk]++ deathmb[idpd]++ if spree[idpk] < 10 { spree[idpk]++ } if kill[idpk] < 5 { kill[idpk]++ } //kill[idpd]=0 // ^ Крипы героя могут сами сделать Double Kill spree[idpd] = 0 if !fb { SetPlayerState(pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(pk, PLAYER_STATE_RESOURCE_GOLD) + gold + GOLD_FIRST_BLOOD) sDisplayTextToPlayer(GetLocalPlayer(), .0, .0, "[%s] %ipc pwned %ipc's head for %igold gold! - |cFFFF0303First blood!|r", \ time, idpk, idpd, R2I(gold + GOLD_FIRST_BLOOD)) StartSound(gg_snd_firstblood) fb = true } elseif spree[idpk] > 2 { StartSound(KS_Sound[spree[idpk]]) sDisplayTextToPlayer(GetLocalPlayer(), .0, .0, "[%s] %ipc pwned %ipc's head for %igold gold! - %s%s|r", \ time, idpk, idpd, R2I(gold), ape[spree[idpk]], KS_Text[spree[idpk]]) } else { sDisplayTextToPlayer(GetLocalPlayer(), .0, .0, "[%s] %ipc pwned %ipc's head for %igold gold!", \ time, idpk, idpd, R2I(gold)) } if spree[idpd] > 2 { sDisplayTextToPlayer(GetLocalPlayer(), .0, .0, "[%s] %ipc has just ended %ipc's %s streak for %igold gold!", \ time, idpk, idpd, KS_Text[spree[idpd]], R2I(spree[idpd] * 40.)) SetPlayerState(pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(pk, PLAYER_STATE_RESOURCE_GOLD) + spree[idpd] * 30) } if kill[idpk] > 1 { StartSound(SoundS[kill[idpk]]) sDisplayTextToPlayer(GetLocalPlayer(), .0, .0, "[%s] %ipc %s", \ time, idpk, TextS[kill[idpk]]) } TimerStart(KillTimer[idpk], 10., false, \ lambda void() { handle h = GetExpiredTimer() int i = 0 whilenot h == KillTimer[i] { i++ } kill[i] = 0 h = null } ) k = null; d = null; pk = null; pd = null; //mbitem = null } ) } }
Dreii Дата: Вторник, 31 Января 2012, 14:35:56 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды:
0
Репутация:
603
Блокировки:
SirNikolas , у меня нет крипов) только герои. Этот код будет работатьь 100%? не будет такой ошибки как была в предыдущем
SirNikolas Дата: Вторник, 31 Января 2012, 14:42:44 | Сообщение # 8
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
Не знаю, не пробовал. Может еще выдать синтаксическую ошибку, тогда открой файл cj_print.j и замени в нем строкуCode
string array cj_sprintf_p, cj_sprintf_pc
наCode
string array cj_sprintf_p string array cj_sprintf_pc
Добавлено (31 Январь 2012, 14:42:44) --------------------------------------------- Под крипами имел в виду призванных существ. Или дамми-ракеты.
Dreii Дата: Пятница, 03 Февраля 2012, 13:48:16 | Сообщение # 9
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды:
0
Репутация:
603
Блокировки:
Всеравно непоказывает иногда(((Добавлено (31 Январь 2012, 22:03:34) --------------------------------------------- Омг вообще фатал дает
Добавлено (01 Февраль 2012, 19:06:18) ---------------------------------------------
Code
define { private GOLD_FIRST_BLOOD =100 } bool KillHeroCond() { return IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO)==true && GetOwningPlayer(GetKillingUnit())!=Player(12) } void Trig_KillHero_Timer( ) { timer t = GetExpiredTimer( ) int i = 0 whilenot t==KillTimer[i] { i++ } kill[i] = 0 t = null } void Trig_KillHero_Actions() { unit k = GetKillingUnit( ), d = GetTriggerUnit( ) player pk = GetOwningPlayer( k ), pd = GetOwningPlayer( d ) int idpk = GetPlayerId( pk ), idpd = GetPlayerId( pd ), gold = 55+25*GetHeroLevel(d), \ min=GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_FOOD_USED),sec=GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_FOOD_CAP) string m=I2S(min),s=I2S(sec) , time SetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD )+gold) SetPlayerState( pd, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pd, PLAYER_STATE_RESOURCE_GOLD )-gold/3) if min < 10 { m = "0" + m time=m+ " : "+s } if sec < 10 { s = "0" + s time=m+ " : "+s } if spree[idpk] <10 { spree[idpk] ++ } if kill[idpk] <5 { kill[idpk] ++ } killmb[idpk]++ deathmb[idpd]++ kill[idpd]=0 //First blood if !fb { SetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD ) + gold+GOLD_FIRST_BLOOD) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0.,"["+time+ "] "+ pc[idpk]+GetPlayerName(pk)+ "|r just drew |cFFFF0303First blood!|r(+" + I2S(R2I(GOLD_FIRST_BLOOD)) + " gold)") StartSound(gg_snd_firstblood) fb = true } // Spree or kill if spree[idpk] > 2 { StartSound( KS_Sound[spree[idpk]] ) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0.,"["+time+ "] "+pc[idpk]+GetPlayerName(pk)+ "|r"+ " pwned " + pc[idpd]+GetPlayerName(pd)+ "|r's" + " head for " + "|c00FFFF00" + I2S( R2I( gold ) ) + "|r gold! - " +ape[spree[idpk]]+ KS_Text[spree[idpk]]) else DisplayTextToPlayer( GetLocalPlayer( ), 0., 0., "["+time+ "] "+pc[idpk]+GetPlayerName(pk)+ "|r" + " pwned " + pc[idpd]+GetPlayerName(pd)+ "|r's" + " head for " + "|c00FFFF00" + I2S( R2I( gold ) ) + "|r gold!") } //End spree if spree[idpd] > 2 { SetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD, GetPlayerState( pk, PLAYER_STATE_RESOURCE_GOLD )+spree[idpd]*30) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0.,"["+time+ "] "+pc[idpk]+GetPlayerName(pk)+ "|r" + " has just ended "+pc[idpd]+GetPlayerName(pd)+ "|r's" + KS_Text[spree[idpd]]+ " streak for "+ "|c00FFFF00" + I2S( R2I(spree[idpd]*40 ) ) + "|r gold!") spree[idpd] = 0 } //Multi-kills if kill[idpk] > 1 { StartSound(SoundS[kill[idpk]]) DisplayTextToPlayer( GetLocalPlayer( ), 0., 0.,"["+time+ "] "+ pc[idpk]+GetPlayerName(pk)+ "|r" + TextS[kill[idpk]] ) TimerStart(KillTimer[idpk], 12., false, function Trig_KillHero_Timer ) } //Add Blood if GetRandomReal(0.,1.)>=.45 and GetOwningPlayer(k)!=Player(12) { SetPlayerState( pk, PLAYER_STATE_RESOURCE_LUMBER, GetPlayerState( pk, PLAYER_STATE_RESOURCE_LUMBER )+1) TT(pc[GetPlayerId(pk)]+ "+1",k) } flush locals } void InitTrig_KillHero( ) { gg_trg_KillHero = CreateTrigger( ) TriggerRegisterAnyUnitEventBJ( gg_trg_KillHero,EVENT_PLAYER_UNIT_DEATH) TriggerAddAction( gg_trg_KillHero, function Trig_KillHero_Actions ) TriggerAddCondition( gg_trg_KillHero,Condition( function KillHeroCond) ) }
Но опять та же хрень(Добавлено (03 Февраль 2012, 13:48:16) --------------------------------------------- UP