Автор: Nikita54421: Дата: 03.20.2011
Мне очень охота у себя на сервере поставить свою команду помощи то есть типа стандартной @help
Думал попробую написать в начале сам :).Посмотрел приме стандартной команды помощи,ну в общем вот что смастерил.
/*==========================================
* @wro
*------------------------------------------*/
ACMD_FUNC(wro)
{
char buf[2048], w1[2048], w2[2048];
int i, gm_level;
FILE* fp;
nullpo_retr(-1, sd);
memset(buf, '\0', sizeof(buf));
if ((fp = fopen(wro_txt, "r")) != NULL) {
clif_displaymessage(fd, msg_txt(26)); // Help commands:
gm_level = pc_isGM(sd);
while(fgets(buf, sizeof(buf), fp) != NULL) {
if (buf[0] == '/' && buf[1] == '/')
continue;
for (i = 0; buf != '\0'; i++) {
if (buf == '\r' || buf == '\n') {
buf = '\0';
break;
}
}
if (sscanf(buf, "%2047[^:]:%2047[^\n]", w1, w2) < 2)
clif_displaymessage(fd, buf);
else if (gm_level >= atoi(w1))
clif_displaymessage(fd, w2);
}
fclose(fp);
} else {
clif_displaymessage(fd, msg_txt(27)); // File help.txt not found.
return -1;
}
return 0;
}
4>..\src\map\atcommand.c(9127): error C2065: wro_txt: необъявленный идентификатор
4>..\src\map\atcommand.c(9127): warning C4047: функция: "const char *" отличается по уровням косвенного обращения от "int"
4>..\src\map\atcommand.c(9127): warning C4024: fopen: различные типы для формального и фактического параметров 1
Автор: Nikita54421: Дата: 03.20.2011
Цитата nomn;36167:
ололо. в чем задача? переименовать @help или сделать другой функционал? вопроса не вижу.
Автор: Кеник: Дата: 03.20.2011
ТОгда стоит уточнить - что ты хочешь получить в итоге...
Автор: nomn: Дата: 03.20.2011
Цитата Кеник;36183:
ТОгда стоит уточнить - что ты хочешь получить в итоге...
Автор: Nikita54421: Дата: 03.21.2011
Цитата Кеник;36183:
ТОгда стоит уточнить - что ты хочешь получить в итоге...
// When @help or @h is typed when you are a gm, this is displayed for helping new gms understand gm commands.
help_txt: conf/help.txt
help2_txt: conf/help2.txt
wro.txt: conf/wro.txt <<<<вот
charhelp_txt: conf/charhelp.txt
Автор: Nikita54421: Дата: 03.21.2011
Если я не так излагаю суть своей идеи то извините!
Автор: Cole McCormick: Дата: 03.21.2011
Могбы переписать содержимое этих 2-х хелпов, и если уж так преспичило в сорцах название комманды поменять =) Такой нубский вопрос, а ты в аткоманд на прова добавлял её?
Автор: Nikita54421: Дата: 03.21.2011
Цитата Naota;36216:
Могбы переписать содержимое этих 2-х хелпов, и если уж так преспичило в сорцах название комманды поменять =) Такой нубский вопрос, а ты в аткоманд на прова добавлял её?
4>..\src\map\atcommand.c(9127): error C2065: wro_txt: необъявленный идентификатор
Автор: Gremlin: Дата: 03.21.2011
wro.txt: conf/wro.txt <<<<вот
wro_txt: conf/wro.txt <<<<вот
Автор: Nikita54421: Дата: 03.21.2011
Цитата Gremlin;36221]wro.txt: conf/wro.txt <<<<вот
попробуй поменять на
wro_txt: conf/wro.txt <<<<вот
char charhelp_txt[256:
= "conf/charhelp.txt";
char wro_txt[256] = "conf/wro.txt";
else
if (strcmpi(w1, "charhelp_txt") == 0)
strcpy(charhelp_txt, w2);
else
if (strcmpi(w1, "wro_txt") == 0)
strcpy(wro_txt, w2);
extern char charhelp_txt[];
extern char wro_txt[];
Автор: Mel9: Дата: 03.21.2011
Автор: Kill Spirit: Дата: 03.21.2011
Можно.
Вот тебе пример одной из команд, переделай броадкаст на клифмеседж
ACMD_FUNC(kami)
{
unsigned long color=0;
nullpo_retr(-1, sd);
memset(atcmd_output, '\0', sizeof(atcmd_output));
if(*(command + 5) != 'c' && *(command + 5) != 'C') {
if (!message || !*message) {
clif_displaymessage(fd, "Please, enter a message (usage: @kami ).");
return -1;
}
sscanf(message, "%199[^\n]", atcmd_output);
intif_broadcast(atcmd_output, strlen(atcmd_output) + 1, (*(command + 5) == 'b' || *(command + 5) == 'B') ? 0x10 : 0);
} else {
if(!message || !*message || (sscanf(message, "%lx %199[^\n]", &color, atcmd_output) < 2)) {
clif_displaymessage(fd, "Please, enter color and message (usage: @kamic ).");
return -1;
}
if(color > 0xFFFFFF) {
clif_displaymessage(fd, "Invalid color.");
return -1;
}
intif_broadcast2(atcmd_output, strlen(atcmd_output) + 1, color, 0x190, 12, 0, 0);
}
return 0;
}
Автор: Nikita54421: Дата: 03.22.2011
Цитата Kill Spirit;36245:
Можно.
Вот тебе пример одной из команд, переделай броадкаст на клифмеседж
Автор: Nikita54421: Дата: 04.15.2011
/*==========================================
* @wro
*------------------------------------------*/
ACMD_FUNC(wro)
{
char buf[2048], w1[2048], w2[2048];
int i, gm_level;
FILE* fp;
nullpo_retr(-1, sd);
memset(buf, '\0', sizeof(buf));
if ((fp = fopen(wro_txt, "r")) != NULL) {
clif_displaymessage(fd, msg_txt(26)); // Help commands:
gm_level = pc_isGM(sd);
while(fgets(buf, sizeof(buf), fp) != NULL) {
if (buf[0] == '/' && buf[1] == '/')
continue;
for (i = 0; buf != '\0'; i++) {
if (buf == '\r' || buf == '\n') {
buf = '\0';
break;
}
}
if (sscanf(buf, "%2047[^:]:%2047[^\n]", w1, w2) < 2)
clif_displaymessage(fd, buf);
else if (gm_level >= atoi(w1))
clif_displaymessage(fd, w2);
intif_broadcast2(buf,strlen(buf) + 1, 0xD20000, 0x190, 12, 0, 0);
}
fclose(fp);
} else {
clif_displaymessage(fd, msg_txt(27)); // File help.txt not found.
return -1;
}
return 0;
}
intif_broadcast2(buf,strlen(buf) + 1, 0xD20000, 0x190, 12,
if (sscanf(buf, "%2047[^:]:%2047[^\n]", w1, w2) < 2)
clif_displaymessage(fd, buf);
else if (gm_level >= atoi(w1))
clif_displaymessage(fd, w2);
Автор: Jarek: Дата: 04.15.2011
Наводка: А что по вашему делает clif_displaymessage ?
Автор: Nikita54421: Дата: 04.15.2011
Цитата Jarek;38806:
Наводка: А что по вашему делает clif_displaymessage ?
Автор: Nikita54421: Дата: 04.22.2011
Блин если я не достал всех:D,последний вопрос по теме:).
Вот что я намудрил:
ACMD_FUNC(wro)
{
char buf[2048], w1[2048], w2[2048];
int i, gm_level;
FILE* fp;
nullpo_retr(-1, sd);
memset(buf, '\0', sizeof(buf));
if ((fp = fopen(wro_txt, "r")) != NULL) {
intif_broadcast2("Команды сервера:",strlen("Команды сервера:"), 0xe70d41, 0x190, 12, 0, 0);
gm_level = pc_isGM(sd);
while(fgets(buf, sizeof(buf), fp) != NULL) {
if (buf[0] == '/' && buf[1] == '/')
continue;
for (i = 0; buf != '\0'; i++) {
if (buf == '\r' || buf == '\n') {
buf = '\0';
break;
}
}
if (sscanf(buf, "%2047[^:]:%2047[^\n]", w1, w2) < 2)
intif_broadcast2(buf,strlen(buf), 0x0de2e7, 0x190, 12, 0, 0);
else if (gm_level >= atoi(w1))
intif_broadcast2(w2,strlen(w2), 0x0de2e7, 0x190, 12, 0, 0);
}
fclose(fp);
} else {
clif_displaymessage(fd, msg_txt(27)); // File help.txt not found.
return -1;
}
return 0;
}
int intif_broadcast2(const char* mes, int len, unsigned long fontColor, short fontType, short fontSize, short fontAlign, short fontY)
{
// Send to the local players
if (fontColor == 0xFE000000) // This is main chat message [LuzZza]
clif_MainChatMessage(NULL, mes);
else
clif_broadcast2(NULL, mes, len, fontColor, fontType, fontSize, fontAlign, fontY, ALL_CLIENT);
if (CheckForCharServer())
return 0;
if (other_mapserver_count < 1)
return 0; //No need to send.
WFIFOHEAD(inter_fd, 16 + len);
WFIFOW(inter_fd,0) = 0x3000;
WFIFOW(inter_fd,2) = 16 + len;
WFIFOL(inter_fd,4) = fontColor;
WFIFOW(inter_fd,8) = fontType;
WFIFOW(inter_fd,10) = fontSize;
WFIFOW(inter_fd,12) = fontAlign;
WFIFOW(inter_fd,14) = fontY;
memcpy(WFIFOP(inter_fd,16), mes, len);
WFIFOSET(inter_fd, WFIFOW(inter_fd,2));
return 0;
}
Автор: imba: Дата: 04.22.2011
clif_broadcast2 - SELF
Автор: Nikita54421: Дата: 04.22.2011
Цитата imba;39599:
clif_broadcast2 - SELF
Автор: imba: Дата: 04.22.2011
В ф-ции ACMD_FUNC(wro):
intif_broadcast2(buf,strlen(buf), 0x0de2e7, 0x190, 12, 0, 0);
clif_broadcast2(&sd->bl,buf, strlen(buf) + 1, 0x0de2e7, 0x190, 12, 0, 0, SELF);
Автор: Nikita54421: Дата: 04.23.2011
Цитата imba;39607:
В ф-ции ACMD_FUNC(wro):
intif_broadcast2(buf,strlen(buf), 0x0de2e7, 0x190, 12, 0, 0);
На
clif_broadcast2(&sd->bl,buf, strlen(buf) + 1, 0x0de2e7, 0x190, 12, 0, 0, SELF);
И так заменить все вызовы ф-ции intif_broadcast2. Дошло?