dutub
offline
Опыт:
518Активность: |
CJass Оптимизация
((код
library DialogMod initializer Init {
trigger DialogMod = CreateTrigger() trigger DialogModEvent = CreateTrigger() dialog MainDialog button array MainDialogBtn Mods Flags
boolean MRandom = false boolean MBoss = false integer ModsCount = 0 ==============================================================================================
============================================================================================== nothing Init() { TriggerRegisterTimerEventSingle(DialogMod, 0.10) TriggerAddAction(DialogMod, function Dialog.Create) } ============================================================================================== ============================================================================================== struct Dialog { static nothing Create() { MainDialog = DialogCreate() if MRandom { MainDialogBtn[0] = DialogAddButtonBJ(MainDialog, "Случайные герои: да") ModsCount++ } else { MainDialogBtn[0] = DialogAddButtonBJ(MainDialog, "Случайные герои: нет") } if MBoss { MainDialogBtn[1] = DialogAddButtonBJ(MainDialog, "Ивент Босс: да") ModsCount++ } else { MainDialogBtn[1] = DialogAddButtonBJ(MainDialog, "Ивент Босс: нет") } MainDialogBtn[2] = DialogAddButtonBJ(MainDialog, "Начать игру!") DialogDisplayBJ(true, MainDialog, Player(0)) TriggerRegisterDialogEventBJ(DialogModEvent, MainDialog) TriggerAddAction(DialogModEvent, function Dialog.CheckClick) } static nothing CheckClick() { if GetClickedButtonBJ() == MainDialogBtn[0] { DialogDestroy(MainDialog) if MRandom { MRandom = false } else { MRandom = true } Dialog.Create() } if GetClickedButtonBJ() == MainDialogBtn[1] { DialogDestroy(MainDialog) if MBoss { MBoss = false } else { MBoss = true } Dialog.Create() } if GetClickedButtonBJ() == MainDialogBtn[2] { DialogDestroy(MainDialog) DestroyTrigger(DialogMod) DestroyTrigger(DialogModEvent) Dialog.Mods() } } static nothing Mods() { if ModsCount > 1 { DisplayTextToForce(GetPlayersAll(), "Хост выбрал следующие моды:") } else { DisplayTextToForce(GetPlayersAll(), "Хост не выбрал ни одного мода.") } if MRandom { DisplayTextToForce(GetPlayersAll(), " -Случайные герои") } if MBoss { DisplayTextToForce(GetPlayersAll(), " -Ивент Босс") } } } } )) Можно ли писать на cjass, как пишу я? Или есть утечки? Отредактировано Nekit1234007, 04.12.2010 в 12:09. |
04.12.2010, 11:26 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
spellwerk
offline
Опыт:
4,869Активность: |
Код:
замени на обычные |
04.12.2010, 11:36 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dutub
offline
Опыт:
518Активность: |
Spy_, т.е
Код:
так? |
04.12.2010, 11:45 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
XOR
offline
Опыт:
38,284Активность: |
ты не используешь нативки, а убогую оболочку, созданную близзард для использования в гуи. нажмите ctrl и кликни на функцию, будет показана вся функция. |
04.12.2010, 11:53 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dutub
offline
Опыт:
518Активность: |
DisplayTimedTextToPlayer
TriggerRegisterDialogEvent DialogDisplay GetClickedButton DialogAddButton Я так понял это нативки?! |
04.12.2010, 11:58 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nekit1234007
offline
Опыт:
11,916Активность: |
Кликни на них с ctrl'ом. |
04.12.2010, 12:02 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dutub
offline
Опыт:
518Активность: |
кликнул:
native DisplayTimedTextToPlayer takes player toPlayer, real x, real y, real duration, string message returns nothing |
04.12.2010, 12:03 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
да
ScorpioT1000 добавил: если ты в карте не собираешься изменять blizzard.j - вполне можно использовать и BJ |
04.12.2010, 13:29 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dutub
offline
Опыт:
518Активность: |
Что лучше использовать:
1. MultiboardSetItemValueBJ 2. Код:
|
04.12.2010, 14:42 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nekit1234007
offline
Опыт:
11,916Активность: |
Очень хреновое использование ооп, в данном случае неоправдано. А бж пользоваться не надо.
Nekit1234007 добавил: т.е. совать ооп везде не надо. |
04.12.2010, 14:45 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dutub
offline
Опыт:
518Активность: |
Nekit1234007, Про Объектно-ориентированное программирование не спрашивал...
Значит лучше 2 использовать? |
04.12.2010, 14:46 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nekit1234007
offline
Опыт:
11,916Активность: |
Нет, лучше третий вариант, которого у тебя нет, но должен быть.
Nekit1234007 добавил: Не надо забивать гвозди микроскопом. |
04.12.2010, 14:48 | #12
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dutub
offline
Опыт:
518Активность: |
Nekit1234007, тогда покажи 3 вариант, если не затруднит.
Я даж представить себе не могу его. |
04.12.2010, 14:50 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nekit1234007
offline
Опыт:
11,916Активность: |
((код
multiboard mb
void SetItemValue(integer col, integer row, string value) { local multiboarditem mi = MultiboardGetItem(mb, row, col) MultiboardSetItemValue(mi, value) MultiboardReleaseItem(mi) mi = null } )) Например. |
04.12.2010, 15:31 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
тогда уж
итп |
04.12.2010, 18:24 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dutub
offline
Опыт:
518Активность: |
Эхх я неправильно объяснил...
Я просто хотел узнать про функцию, а не про структуру и прочее... В структуре Multiboard еще много методов... Всем спасибо, все советы взял на заметку. Тему можно прикрыть. |
04.12.2010, 18:28 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
всегда юзай нативки, но иногда встречаются BJ, которые содержат в себе много реализации и мне, как истинному кодеру, иногда лень это всё самому писать и я юзаю их ) |
04.12.2010, 18:49 | #17
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dutub
offline
Опыт:
518Активность: |
((код
library Multiboard initializer MBInit
{ private trigger MBTrigger = CreateTrigger() private trigger MBEventTrigger = CreateTrigger() private integer array PlayerKills private integer array PlayerDeaths private integer PlayersInGame = 0 private integer array PlayerInGame ================================================================ private nothing MBInit () { TriggerRegisterTimerEvent(MBTrigger, 0.1, false) TriggerAddAction(MBTrigger, function Multiboard.Create) integer i = 1 loop { TriggerRegisterPlayerUnitEvent(MBEventTrigger, Player(i), EVENT_PLAYER_UNIT_DEATH, null) i ++ exitwhen i > PlayersInGame } TriggerAddAction(MBEventTrigger, function Multiboard.Event) } ================================================================ struct Multiboard { private static multiboard mb private static integer RowCount = 0 public static nothing Create () { Multiboard.mb = CreateMultiboard() Multiboard.GetPlayersInGame() Multiboard.RowCount = PlayersInGame + 1 Multiboard.SetStyle() Multiboard.SetDefaultValues() MultiboardDisplay(Multiboard.mb, true) } public static nothing GetPlayersInGame () { integer i = 0 integer j = 1 loop { if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING { PlayersInGame ++ PlayerInGame[j] = i j ++ } i ++ exitwhen i > 5 } } private static nothing SetStyle () { MultiboardSetColumnCount(Multiboard.mb, 3) MultiboardSetRowCount(Multiboard.mb, PlayersInGame+1) MultiboardSetItemsStyle(Multiboard.mb, true, false) integer i = 0 loop { Multiboard.SetWidth(0, i, 70) Multiboard.SetWidth(1, i, 40) Multiboard.SetWidth(2, i, 40) i ++ exitwhen i > Multiboard.RowCount } } private static nothing SetDefaultValues () { Multiboard.SetValue(0, 0, "|c00FFFF00"+"Игрок") Multiboard.SetValue(1, 0, "|c00FFFF00"+"Убийств") Multiboard.SetValue(2, 0, "|c00FFFF00"+"Смертей") integer i = 1 loop { PlayerKills[i] = 0 PlayerDeaths[i] = 0 Multiboard.SetValue(0, i, GetPlayerName(Player(PlayerInGame[i]))) Multiboard.SetValue(1, i, " "+I2S(PlayerKills[i])) Multiboard.SetValue(2, i, " "+I2S(PlayerDeaths[i])) i ++ exitwhen i > PlayersInGame } } private static nothing SetValue (integer col, integer row, string value) { multiboarditem mi = MultiboardGetItem(Multiboard.mb, row, col) MultiboardSetItemValue(mi, value) } private static nothing SetWidth (integer col, integer row, real width) { multiboarditem mi = MultiboardGetItem(Multiboard.mb, row, col) MultiboardSetItemWidth(mi, width/1000) } ====== public static nothing Event () { integer i = 1 loop { if GetOwningPlayer(GetKillingUnit()) == Player(PlayerInGame[i]) { PlayerKills[i] ++ UpdateKills() } if GetOwningPlayer(GetDyingUnit()) == Player(PlayerInGame[i]) { PlayerDeaths[i] ++ UpdateDeaths() } i ++ exitwhen i > PlayersInGame } } private static nothing UpdateKills () { integer i = 1 loop { Multiboard.SetValue(1, i, " "+I2S(PlayerKills[i])) i ++ exitwhen i > PlayersInGame } } private static nothing UpdateDeaths () { integer i = 1 loop { Multiboard.SetValue(2, i, " "+I2S(PlayerDeaths[i])) i ++ exitwhen i > PlayersInGame } } } } )) Есть ли утечки в данном коде? |
07.12.2010, 20:59 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nekit1234007
offline
Опыт:
11,916Активность: |
В SetWidth и в SetValue не удаляешь multiboarditem.
FYI: для структур есть метод onInit. |
07.12.2010, 21:10 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dutub
offline
Опыт:
518Активность: |
Nekit1234007, mi = null?! А смысл использовать onInit? |
07.12.2010, 21:14 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|