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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
My CostumeVelue
ЭллесарДата: Среда, 22 Июля 2009, 03:37:35 | Сообщение # 1
DeMoN
Группа: Ветераны
Сообщений: 934
Награды: 1
Репутация: 210
Блокировки:
Решил сделать систему, позволяющие иметь ЮНИТУ (или предмету) множество переменных(integer,real,unit и тд) и СТРУКТУР созданым пользователем, система связанна на прямую с SetUnitUserData, и лучше если, вы используйте эту нароботку, SetUnitUserData не использовать. Опытные коддеры скажут, почему тебя не устраивает КеШ и ХеШ таблицы, отвечу - к ним нельзя привязать свои переменные созданные при помощи JNGP. так же в дальнейшим я буду юзать и эту систему совместно ХеШТаблицы. Вот собственно эта системка, сделал меньше чем за пару часов, но работает на ура. кто может, подскажите как её улучшить.

Code
struct Item
     item array I[12]
endstruct
struct Unit extends array [500]
     unit  UnitA
     integer Int
     real    Real1
     real    Real2
     Item    Items
endstruct
globals
     integer kolvo = 0
endglobals

function AddUnitS takes unit u returns nothing
     set kolvo = kolvo + 1
     set Unit[kolvo].UnitA = u
     call SetUnitUserData( u, kolvo )
endfunction
function RemoveUnitS takes unit u returns nothing
     local integer i = GetUnitUserData(u)
     local integer i2 = 0
//  

     set Unit[i].UnitA = Unit[kolvo].UnitA
     set Unit[i].Int = Unit[kolvo].Int
     set Unit[i].Real1 = Unit[kolvo].Real1
     set Unit[i].Real2 = Unit[kolvo].Real2
     loop
     exitwhen i2 > 12
     set Unit[i].Items.I[i2] = Unit[kolvo].Items.I[i2]
     set Unit[kolvo].Items.I[i2] = null
     set i2 = i2 + 1
     endloop
      
//  
     set Unit[kolvo].UnitA = null
     set Unit[kolvo].Int = 0
     set Unit[kolvo].Real1 = 0
     set Unit[kolvo].Real2 = 0
//
         set kolvo = kolvo - 1
endfunction

function Prinadl takes unit u returns boolean
     local boolean b = false
     local integer i = 0
     loop
     exitwhen i > kolvo
      if ( u == Unit[i].UnitA) then
       set b = true
      endif
     endloop
return b
endfunction
function GetUnit takes integer i returns unit
return Unit[i].UnitA
endfunction

Ну вот собсвенно, а теперь по частям.
__________________________________________________________________________________

Code

struct Item
     item array I[12]
endstruct

Вот собственно для чего эта системка, обычная структура, вмещает себя 12 предметов.
__________________________________________________________________________________
Code
struct Unit extends array [500]
     unit  UnitA
     integer Int
     real    Real1
     real    Real2
     Item    Items
endstruct

А вот какие параметры я привязываем к юниту: Целочисловую переменную, два реальных и замедте:

Code
    Item    Items

Привязал свой тип данных, в данном случае привязал массив из 12 предметов.

Code
[color=red]extends array [500][/color]

Массив из 500, это значит что в этом случае можно привязать данные к 500 юнитам, можно увеличить.

__________________________________________________________________________________

Чтобы юниту можно присвоить данные, нужно использовать функцию:

Code
function AddUnitS takes unit u returns nothing
     set kolvo = kolvo + 1
     set Unit[kolvo].UnitA = u
     call SetUnitUserData( u, kolvo )
endfunction

Чтобы убрать (если юнит уже не нужен):

Code
function RemoveUnitS takes unit u returns nothing
     local integer i = GetUnitUserData(u)
     local integer i2 = 0
//  

     set Unit[i].UnitA = Unit[kolvo].UnitA
     set Unit[i].Int = Unit[kolvo].Int
     set Unit[i].Real1 = Unit[kolvo].Real1
     set Unit[i].Real2 = Unit[kolvo].Real2
     loop
     exitwhen i2 > 12
     set Unit[i].Items.I[i2] = Unit[kolvo].Items.I[i2]
     set Unit[kolvo].Items.I[i2] = null
     set i2 = i2 + 1
     endloop
      
//  
     set Unit[kolvo].UnitA = null
     set Unit[kolvo].Int = 0
     set Unit[kolvo].Real1 = 0
     set Unit[kolvo].Real2 = 0
//
         set kolvo = kolvo - 1
endfunction

__________________________________________________________________________________

Функция, проверяет, принадлижит ли этот юнит к списку юнитов, которым привязанны данные.

Code
function Prinadl takes unit u returns boolean
     local boolean b = false
     local integer i = 0
     loop
     exitwhen i > kolvo
      if ( u == Unit[i].UnitA) then
       set b = true
      endif
     endloop
return b
endfunction

__________________________________________________________________________________

Собственно по номеру возращает юнита:

Code
function GetUnit takes integer i returns unit
return Unit[i].UnitA
endfunction

__________________________________________________________________________________

А теперь, если вам нужно "Прочитать" или изменить данные юнита используем:

Unit[GetUnitUserData(u)].Тип Данных

Пример:

local integer i = Unit[GetUnitUserData(u)].Int // берем данные
set Unit[GetUnitUserData(u)].Int = 20// присаиваем значение

С структурами также:

local item i = Unit[GetUnitUserData(u)].Items.I[5] // присваиваем к переменной, 5 предмет который присвоин к юниту.
set Unit[GetUnitUserData(u)].Items.I[2] = i // присваиваем к юниту предмет.

с JNGP я работаю только сегоднишинй день, жду ваших коментарий

для коректной работы скачайте Jass New Gen Pack

Добавлено (22-07-2009, 03:37)
---------------------------------------------
Модер, исправте название темы на My CostumeVаlue


база паролей: https://yadi.sk/d/mdDhWuvPcTSKw
бекап сайта от 26.12.2010 https://yadi.sk/d/L3xNpibbiHpYE
 

  • Страница 1 из 1
  • 1
Поиск:

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