Хоть это реализуеться довольно просто, всё же часто возникают такие вопросы. Эта система сделана для тупого копирования себе в карту, что бы новички могли использовать её в своей карте, а нормальные джасеры сократить время проводимое за компом, которое может уйти на написание чего то подобного.
Импорт:
1.Установите JNGP( Jass New Gen Pack ) 5d, если он не установлен вместе с AdicHelper. 2.Скопируйте триггер SelectHero и переменную PlayerStartRect. 3.Установите области появления. Как это сделать, вы можете увидеть в триггере Init.
Доп. функции :
SH_GetPlayerUnit (integer p ) - Возвращает героя, выбранного игроком под указанным номером. SH_AllPlayersClick ( boolean OnOf ) - Включает/выключает выбор героя для всех игроков.
SH_toPlayerClick ( integer p, boolean OnOf ) - То же самое, что и SH_AllPlayersClick, только для определённого игрока под указанным номером. SH_Repick ( integer p ) - Перевыбор героя для игрока под указанным номером. Предыдущий юнит удаляеться. Камера не куда не передвинется. SH_GetPlayerColorText ( player p , string s ) - Окрашивает текст в цвет указанного игрока. SH_MoveUnit( integer PlayerId , boolean b ) - Включить/выключить перемещения юнита игрока под указанным номером в стартовую область при выборе. Только не используйтеэту функции в триггере с событием юнит выбран. Это надо делать заранее.
library SH initializer Init { #include "cj_types_priv.j" #include "cj_typesEX_priv.j"
private boolean array flag private unit array Click private boolean array MoveUnitC
public void MoveUnit(integer PlayerId,boolean b) { MoveUnitC[PlayerId-1] = b }
public void Repick(integer Pid){ flag[Pid] = true if Click[Pid] != null {RemoveUnit(Click[Pid]);Click[Pid] = null} }
public unit GetPlayerUnit( integer p) { return Click[p] }
public void AllPlayersClick(boolean OnOf){int i = 0 ;do{flag[i] = OnOf}whilenot ++i==12}
public void toPlayerClick(integer p,boolean OnOf) {flag[p] = OnOf} public string GetPlayerColorText(player p,string s){ //Окрашивает текст в цвет указанного игрока. string color playercolor Pcolor = GetPlayerColor(p) if Pcolor == PLAYER_COLOR_RED { color = "|c00FF0000" + s +"|r"} //красный elseif Pcolor == PLAYER_COLOR_CYAN { color = "|c00004040"+ s +"|r"} //синий elseif Pcolor == PLAYER_COLOR_PURPLE { color = "|c008000FF"+ s +"|r"}//сине-зелёный elseif Pcolor == PLAYER_COLOR_YELLOW { color = "|c00FFFF80"+ s +"|r"}//жёлтый elseif Pcolor == PLAYER_COLOR_ORANGE { color = "|c00815307"+ s +"|r"}//оранжевый elseif Pcolor == PLAYER_COLOR_GREEN { color = "|c00008000"+ s +"|r"}//зелёный elseif Pcolor == PLAYER_COLOR_PINK { color = "|c00FF00FF"+ s +"|r"}//розовый elseif Pcolor == PLAYER_COLOR_LIGHT_GRAY { color = "|c00808080"+ s +"|r"}//серый elseif Pcolor == PLAYER_COLOR_LIGHT_BLUE { color = "|c000080FF"+ s +"|r"}//светло-синий elseif Pcolor == PLAYER_COLOR_AQUA { color = "|c00004040"+ s +"|r"}//тёмно-зелёный elseif Pcolor == PLAYER_COLOR_BROWN { color = "|c00804000"+ s +"|r"}//коричневый elseif Pcolor == ConvertPlayerColor(12) { color = "|c00000000"+ s +"|r"}//чёрный return color }
private void SelectHero_Actions () { unit u = GetTriggerUnit() int Pid = GetPlayerId(GetTriggerPlayer()) if Click[Pid] == null { Click[Pid] = u }elseif u == Click[Pid] { flag[Pid] = false SetUnitOwner(u,Player(Pid),true) int i = 0 do{DisplayTimedTextToPlayer(Player(i),0,0,10, GetPlayerColorText(Player(Pid),GetPlayerName(Player(Pid))) + " выбрал героя " + GetUnitName(u))}whilenot ++i==12 if MoveUnitC[Pid] { real x = GetRectCenterX(udg_PlayerStartRect[Pid+1]) , y = GetRectCenterY(udg_PlayerStartRect[Pid+1]) SetUnitPosition(u,x,y) x = GetWidgetX(u) ; y = GetWidgetY(u) if GetLocalPlayer() == Player(Pid) { PanCameraTo(x,y) ClearSelection() SelectUnit(u,t rue) } } }else{ Click[Pid] = u } u = null }
private void Init(){ trigger t = new trigger int i = 0 do{TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SELECTED,null); flag[i] = true; MoveUnitC[i] = true}whilenot ++i==12 TriggerAddCondition(t,Condition(function SelectHeroCond)) TriggerAddAction(t,function SelectHero_Actions) t = null } }
Сообщение отредактировал rixt7956 - Среда, 04 Мая 2011, 14:45:23
Dreii, На самом деле он намного проще чем обычный, и в 100 раз удобнее, к примеру сравни даже форму записи Jass
Code
function A takes unit u returns nothing local real x = GetRandomReal(0,1000) local real y = GetRandomReal(0,1000) call SetUnitPosition(u,x,y) endfunction
cJass
Code
nothing A (unit u) { real x = GetRandomReal(0,1000) , y = GetRandomReal(0,1000) SetUnitPosition(u,x,y) }
Ну, я два раза переписывал систему, Первый раз с таймерами и хэшем, потом решил их удалить. Просто мне намного удобней к примеру в место CreateTimer() или InitHashtable() или CreateTrigger() написать new timer или new hashtable или new trigger