ГлавнаяБлогКарты Warcraft 3Гайды для первой ДотыГайды для Доты 2 [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Зарегистрированные пользователи не видят всплывающей рекламы
Страница 1 из 11
Модератор форума: XOPYC, Vanzer, Goodie 
Форум » Картостроение в Warcraft 3 » Наработки » GString - работа со строками
GString - работа со строками
Дата: Среда, 12.06.2013, 23:16 | Сообщение # 1
Генералиссимус
Модераторы
Сообщений: 2264
Награды: 9
Репутация: 70
Как и на XGM выложил, так и сюда выложу =)

Библиотека которая позволяет отслеживать события в чате, к примеру:
/exp xx
/godmode=on
Blablabla
Все это делает система GString
Код
library GString

//cJASS

///////////////////////////////////////
// by Goodie© 2013
//Инструкция по использованию
/////////////////////////////////////
//
// RegisterPlayerToChat
// Добавляет игрока в систему(аналог TriggerRegisterPlayerChatEvent...)
// Пример: RegisterPlayerToChat(player)
// RegisterPlayerToChat(Player(0))
// player - игрок
//
/////////////////////////////////////
//
// RegisterNewCmd
// Регистрирует новое событие чата в котором можно отследить какую то часть текста
// Пример: RegisterNewCmd(current_string,length,min,max,select_string,"namefunc")
// RegisterNewCmd("my_string",10,0,10,"my_string","my_func")
// RegisterNewCmd("my_string",10,10,12,"on","my_func")
// current_string - полное название слова которое должно отслеживаться в чате
// length - длина слова
// min,max,select_string - чем то схожа с SubString(string,start,end)
// "namefunc" - название функции
//
////////////////////////////////////
//
// FlushCmd
// Очищает заданное событие чата
// Пример: FlushCmd(current_string)
// FlushCmd("my string")
// current_string - полное название слова которое было задано для отслежки в чате
//
////////////////////////////////////
//
// FlushCmdEx
// Очищает заданное событие чата
// Пример: FlushCmd(box_id)
// FlushCmd(4)
// box_id - Номер ячейки события
//
////////////////////////////////////
//
// GetCmd_id
//
// Пример: GetCmd_id(current_string)
// GetCmd_id("my string")
// Вернет в integer номер ячейки
// current_string - полное название слова которое было задано для отслежки в чате
//
////////////////////////////////////
//
// GetFinishString
//
// Пример: GetFinishString(current_string)
// local string s = GetFinishString("my string")
// Вернет в string ваш отрезок текста который установлен в параметрах
// current_string - полное название слова которое было задано для отслежки в чате
//
///////////////////////////////////////
//
// GetFinishStringEx
//
// Пример: GetFinishString(box_id)
// local string s = GetFinishString(4)
// Вернет в string ваш отрезок текста который установлен в параметрах
// box_id - Номер ячейки события
//
///////////////////////////////////////

define
{
// call functions
RegisterPlayerToChat(p) = TriggerRegisterPlayerChatEvent(EventChatTrigger,p,"",false)
RegisterNewCmd(c1, a, b, c, c2, name_func) = EventChat.add_cmd(c1,a,b,c,c2,name_func)
FlushCmd(c1) = EventChat.flush_cmd(c1)
FlushCmdEx(c2) = EventChat.flush_cmdEx(c2)
GetCmd_id(c1) = EventChat.get_id(c1)
GetFinishString(c1) = EventChat.get_select(c1)
GetFinishStringEx(c1) = EventChat.get_selectEx(c1)
// Max numbers of boxes
private MAX_SIZE = 0x1000
private GSTRING_DEBUG = false // enable debug?
// Other...
private get_line(a,b,c) = (SubString(event_string,a,b) == c)
private event_chat(a) = (event_string == a)
private get_length(a) = (Length == a)
private next =data.id+=0x01
private prev =data.id-=0x01
private g_break = exitwhen true
private g_debug(s) =
{
#if (GSTRING_DEBUG==true)
BJDebugMsg(s)
#endif
}
}

trigger EventChatTrigger = CreateTrigger()
private StringData data
private string empty_string = ""

struct StringData
{
string current_string[MAX_SIZE] , select_string[MAX_SIZE]
int length[MAX_SIZE],min[MAX_SIZE] , max[MAX_SIZE]
string callfunc[MAX_SIZE]
static int id = 0x00
}

struct EventChat

static string event_string = null
static int Length = 0x00

static bool line(string c1,int a,int b,int c,string c2)
{ return (event_chat(c1) or get_length(a)) and (get_line(b,c,c2)) }

static bool condition()
{
event_string = GetEventPlayerChatString()
Length = StringLength(event_string)
int index = 0x00
do
{
if (line(data.current_string[index],\
data.length[index],\
data.min[index],\
data.max[index],\
data.select_string[index]))
{
if (data.callfunc[index] != empty_string)
{
ExecuteFunc(data.callfunc[index])
g_debug("|G_String Sys| - call in cell #" + I2S(index) + " - " + data.callfunc[index])
else
g_debug("|G_String Sys| - in cell #" + I2S(index) + " no function")
}
}
index+=0x01
}whilenot(index > data.id)
return false
}

static bool add_cmd(string c1,int a,int b,int c,string c2,string name_func)
{
if (data.id >= MAX_SIZE)
{
g_debug("|G_String Sys[ERROR]| - SIZE are full")
return false
else
data.current_string[data.id] = c1
data.select_string[data.id] = c2
data.length[data.id] = a
data.min[data.id] = b
data.max[data.id] = c
data.callfunc[data.id] = name_func
g_debug("|G_String Sys| - box #" + I2S(data.id))
next
}
return true
}

static bool flush_cmd(string c1)
{
int index = 0x00
do
{
if (data.current_string[index] == c1)
{
data.current_string[index] = empty_string
data.select_string[index] = empty_string
data.length[index] = 0x00
data.min[index] = 0x00
data.max[index] = 0x00
data.callfunc[index] = empty_string
g_debug("|G_String Sys| - " +c1 + " - flushed")
g_break
else
g_debug("|G_String Sys[ERROR]| - " + c1 + " has not data!")
g_break
return false
}
index+=0x01
}whilenot(index > data.id)
return true
}

static bool flush_cmdEx(int index)
{
if (data.current_string[index] != empty_string) and\
(data.length[index] != 0x00) and\
(data.min[index] != 0x00) and\
(data.max[index] != 0x00) and\
(data.select_string[index] != empty_string) and\
(data.callfunc[index] != empty_string)
{
data.current_string[index] = empty_string
data.select_string[index] = empty_string
data.length[index] = 0x00
data.min[index] = 0x00
data.max[index] = 0x00
data.callfunc[index] = empty_string
g_debug("|G_String Sys| - box #" + I2S(index) + " - flushed")
else
g_debug("|G_String Sys[ERROR]| - box #" + I2S(index) + " has not data!")
return false
}
return true
}

static int get_id(string c1)
{
int index = 0x00
do{if(data.current_string[index] == c1){g_break};index+=0x01}whilenot(index > data.id)
g_debug("|G_String Sys[| - box #" + I2S(index))
return index
}

static string get_selectEx(int index)
{
g_debug("|G_String Sys[| - box #" + I2S(index) + " - " + data.select_string[index])
return data.select_string[index]
}

static string get_select(string c1)
{
int index = 0x00
do{if(data.select_string[index] == c1){g_break};index+=0x01}whilenot(index > data.id)
return data.select_string[index]
}

static void onInit()
{
data = StringData.create()
TriggerAddCondition(EventChatTrigger,function thistype.condition)
}

endstruct

endlibrary


Тот кто владеет информацией, тот владеет миром.
 
Дата: Среда, 12.06.2013, 23:17 | Сообщение # 2
Генералиссимус
Модераторы
Сообщений: 1899
Награды: 1
Репутация: 36
я не понял что это ну и ладно)
 
Дата: Среда, 12.06.2013, 23:30 | Сообщение # 3
Генералиссимус
Модераторы
Сообщений: 2264
Награды: 9
Репутация: 70
Ну к примеру сколько вот триггеров ты создашь на 60 комманд, ну примерно 50
Эта система делает все в один триггер. Тебе остается лишь указать слова, и название функции которое будет вызываться после написания

Она используется в моей карте кстати теперь) Я ее сегодня написал)


Тот кто владеет информацией, тот владеет миром.
 
Дата: Четверг, 13.06.2013, 21:27 | Сообщение # 4
> /dev/null
Проверенные
Сообщений: 1282
Награды: 10
напиши что это не простой жасс, и таки да, где отступы? =(
 
Дата: Пятница, 14.06.2013, 00:50 | Сообщение # 5
Генералиссимус
Модераторы
Сообщений: 2264
Награды: 9
Репутация: 70
Mihahail,
Цитата Mihahail
напиши что это не простой жасс,

Цитата
library GString

//cJASS

не?)

Цитата
где отступы? =(

Отступы есть, а тут чет не пашут они =((

На те тут лучше смотрите =)


Тот кто владеет информацией, тот владеет миром.
 
Дата: Пятница, 14.06.2013, 01:50 | Сообщение # 6
> /dev/null
Проверенные
Сообщений: 1282
Награды: 10
Цитата (Goodie)
library GString //cJASS

Черт, не заметил =(
Пролистал быстренько код..
На кодпасте лучше всё выглядит)
 
Дата: Пятница, 14.06.2013, 18:17 | Сообщение # 7
Генералиссимус
Модераторы
Сообщений: 2264
Награды: 9
Репутация: 70
Mihahail, Планирую написать систему озвучки текста. Пишешь String2Voice(player forPlayer,string text) и тебе диктует текст. Для рпгшек интересно будет

Тот кто владеет информацией, тот владеет миром.
 
Дата: Пятница, 14.06.2013, 21:24 | Сообщение # 8
> /dev/null
Проверенные
Сообщений: 1282
Награды: 10
Goodie, это как? И мне кажется, что это останется не востребованным.
Если с нуля, с кучей звуковых файлов, то объем работ огромен(как и размер итоговой карты), а профита не много.
 
Дата: Суббота, 15.06.2013, 10:37 | Сообщение # 9
Генералиссимус
Модераторы
Сообщений: 2264
Награды: 9
Репутация: 70
Mihahail, Все будет чики пуки. Каждый звук буду сжимать и срезать ровно, вес одной буквы наверное будет малым.
Цитата (Mihahail)
Если с нуля

Конечно с нуля. Готовых заготовок я еше нигде не видел и не найду и звуков тоже нигде нет =( Где черпать звуки, я хз


Тот кто владеет информацией, тот владеет миром.
 
Форум » Картостроение в Warcraft 3 » Наработки » GString - работа со строками
Страница 1 из 11
Поиск: