Просмотр полной версии : [Вопрос] Чат
Здравствуйте.
1. Возможно ли сделать так чтобы чат был на расстоянии, к примеру вы пишите в чат что то, а видят то что вы написал только те кто находятся более менее ближе к вам, или же расстояние по своему сделать)
2. Возможно ли сделать к примеру если вы пишите просто зажимая F6: Ты выходит текст на расстоянии ( из 1 - ого случая ), а если к примеру ввести (!) - то уже текст перейдет в общий чат и всё кто на сервере смогут увидеть что вы написали ( а не на расстоянии )
1. [R] Rick: Всем привет
2. (!) Rick: Всем привет
1.На работоспособность не проверял.
public OnPlayerText(playerid, text[])
{
SendMessages(playerid, text);
return 0;
}
stock SendMessages(i, text[])
{
new Float: t_pos_x, Float: t_pos_y, Float: t_pos_z,str[128];
GetPlayerPos(i, t_pos_x, t_pos_y, t_pos_z);
format(str, 128, "%s[%d]: %s", acInfo[i][acName], i, text);
foreach(new j:Player) if(IsPlayerInRangeOfPoint(j, 20.0, t_pos_x, t_pos_y, t_pos_z)) SendClientMessage(i,-1, str);
return 1;
}
Здравствуйте.
1. Возможно ли сделать так чтобы чат был на расстоянии, к примеру вы пишите в чат что то, а видят то что вы написал только те кто находятся более менее ближе к вам, или же расстояние по своему сделать)
2. Возможно ли сделать к примеру если вы пишите просто зажимая F6: Ты выходит текст на расстоянии ( из 1 - ого случая ), а если к примеру ввести (!) - то уже текст перейдет в общий чат и всё кто на сервере смогут увидеть что вы написали ( а не на расстоянии )
1. [R] Rick: Всем привет
2. (!) Rick: Всем привет
1.
public OnPlayerText(playerid, text[])
new string[256];
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string,sizeof string,"{FF8700}%s(%d): %s",sendername, playerid,text);
new Float:xpos,Float:ypos,Float:zpos;
GetPlayerPos(playerid,xpos,ypos,zpos);
for(new i=0;i<MAX_PLAYERS;i++){
if(IsPlayerInRangeOfPoint(i,50,xpos,ypos,zpos)) SendClientMessage(i,mescolor,string);
return false;
}
2.
Ко всем #define
#define fixchars(%1) for(new charfixloop=0;charfixloop<strlen(%1);charfixloop++)if(%1[charfixloop]<0)%1[charfixloop]+=256
В OnPlayerComm
fixchars(text);
if(text[0] == '!') {
new string[128];
GetPlayerName(playerid,string,sizeof(string));
format(string,sizeof(string),"Общий чат: %s(%d): %s",string,playerid,text[1]);
SendClientMessageToAll(COLOR_WHITE,string);
return 0;
}
- - - Добавлено - - -
Прошу прощения, ошибку допустил. Отредактирвоать, почему-то не могу
Вот это тоже в public OnPlayerText(playerid, text[])
fixchars(text);
if(text[0] == '!') {
new string[128];
GetPlayerName(playerid,string,sizeof(string));
format(string,sizeof(string),"Общий чат: %s(%d): %s",string,playerid,text[1]);
SendClientMessageToAll(COLOR_WHITE,string);
return 0;
}
Дёня,
D:\Ìîäû òðåáóåìûå, ñòàðûå\ñåðâåðà äëÿ [Gn_R]\gamemodes\modhost03.pwn(2606) : error 021: symbol already defined: "string"
D:\Ìîäû òðåáóåìûå, ñòàðûå\ñåðâåðà äëÿ [Gn_R]\gamemodes\modhost03.pwn(2613) : error 017: undefined symbol "mescolor"
D:\Ìîäû òðåáóåìûå, ñòàðûå\ñåðâåðà äëÿ [Gn_R]\gamemodes\modhost03.pwn(2617) : error 021: symbol already defined: "string"
D:\Ìîäû òðåáóåìûå, ñòàðûå\ñåðâåðà äëÿ [Gn_R]\gamemodes\modhost03.pwn(2618) : error 021: symbol already defined: "sendername"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
Пробуй мой:
public OnPlayerText(playerid, text[])
{
if(text[0] == "!")
{
new Float: t_pos_x, Float: t_pos_y, Float: t_pos_z,str[128],name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
GetPlayerPos(playerid, t_pos_x, t_pos_y, t_pos_z);
format(str, 128, "[!]%s[%d]: %s", name, playerid, text[1]);
for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerInRangeOfPoint(i, 20.0, t_pos_x, t_pos_y, t_pos_z)) SendClientMessageToAll(-1, str);
}
else
{
new Float: t_pos_x, Float: t_pos_y, Float: t_pos_z,str[128],name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
GetPlayerPos(playerid, t_pos_x, t_pos_y, t_pos_z);
format(str, 128, "[R]%s[%d]: %s", name, playerid, text);
for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerInRangeOfPoint(i, 20.0, t_pos_x, t_pos_y, t_pos_z)) SendClientMessage(i,-1, str);
}
return 0;
}
- - - Добавлено - - -
Ошибочка,вот исправил:
public OnPlayerText(playerid, text[])
{
new Float: t_pos_x, Float: t_pos_y, Float: t_pos_z,str[128],name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
GetPlayerPos(playerid, t_pos_x, t_pos_y, t_pos_z);
if(text[0] == "!")
{
format(str, 128, "[!]%s[%d]: %s", name, playerid, text[1]);
SendClientMessageToAll(-1, str);
}
else
{
format(str, 128, "[R]%s[%d]: %s", name, playerid, text);
for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerInRangeOfPoint(i, 20.0, t_pos_x, t_pos_y, t_pos_z)) SendClientMessage(i,-1, str);
}
return 0;
#ball
D:\Ìîäû òðåáóåìûå, ñòàðûå\ñåðâåðà äëÿ [Gn_R]\gamemodes\modhost03.pwn(2600) : error 033: array must be indexed (variable "-unknown-")
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
В конец мода:
stock SCMToAllInRangeOfPoint(const playerid, const Float: range, const text[])
{
new
str[144],
Float: p_pos_x,
Float: p_pos_y,
Float: p_pos_z,
i = GetMaxPlayers();
GetPlayerName(playerid, str, sizeof(str));
format(str, 144, "%s[%i]: %s", str, playerid, text);
do
{
--i;
if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i, range, p_pos_x, p_pos_y, p_pos_z))
SendClientMessage(i, -1, str);
}
while(i != 0);
}
Использование такое:
SCMToAllInRangeOfPoint(playerid, 10.0, text);
Londlem
Можно чутка по конкретнее?, вы создали сток, дали мне функцию для включения так сказать, но куда же её помещать? в OnplayerText ?, поместил, но почему то не работает.
A N D R E Y
06.08.2014, 06:05
Londlem
Можно чутка по конкретнее?, вы создали сток, дали мне функцию для включения так сказать, но куда же её помещать? в OnplayerText ?, поместил, но почему то не работает.
Зачем кидать в паблик, когда надо кидать в конец мода?
Зачем кидать в паблик, когда надо кидать в конец мода?
Вы меня не так поняли, я закинул сток в конец мода, но а функцию SCMToAllInRangeOfPoint(playerid, 10.0, text); незнал куда кидать . Не нужно позорить меня, тем что я как будто вообще нечего в скриптинге не понимаю. Это вы не поняли о чём идет речь.
Вы меня не так поняли, я закинул сток в конец мода, но а функцию SCMToAllInRangeOfPoint(playerid, 10.0, text); незнал куда кидать . Не нужно позорить меня, тем что я как будто вообще нечего в скриптинге не понимаю. Это вы не поняли о чём идет речь.
SCMToAllInRangeOfPoint(playerid, 10.0, text);
SCMToAllInRangeOfPoint - название функции
playerid - параметр,ид игрока для кого будет использоваться данная функция.
10.0 - расстояние,на котором будет виден текст
text - параметр с текстом,который будет выводиться игрокам.
Кидаете в OnplayerText
SCMToAllInRangeOfPoint(playerid, 10.0, text);
Можете данную функцию использовать где захотите,главное передать ид игрока,расстояние и текст.
Вы тоже слегка не допоняли, я же сказал что я "незнал куда кидать". Значит потом узнал), ну всё же спасибо за объяснение.
Пробуй мой:
public OnPlayerText(playerid, text[])
{
if(text[0] == "!")
{
new Float: t_pos_x, Float: t_pos_y, Float: t_pos_z,str[128],name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
GetPlayerPos(playerid, t_pos_x, t_pos_y, t_pos_z);
format(str, 128, "[!]%s[%d]: %s", name, playerid, text[1]);
for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerInRangeOfPoint(i, 20.0, t_pos_x, t_pos_y, t_pos_z)) SendClientMessageToAll(-1, str);
}
else
{
new Float: t_pos_x, Float: t_pos_y, Float: t_pos_z,str[128],name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
GetPlayerPos(playerid, t_pos_x, t_pos_y, t_pos_z);
format(str, 128, "[R]%s[%d]: %s", name, playerid, text);
for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerInRangeOfPoint(i, 20.0, t_pos_x, t_pos_y, t_pos_z)) SendClientMessage(i,-1, str);
}
return 0;
}
- - - Добавлено - - -
Ошибочка,вот исправил:
public OnPlayerText(playerid, text[])
{
new Float: t_pos_x, Float: t_pos_y, Float: t_pos_z,str[128],name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
GetPlayerPos(playerid, t_pos_x, t_pos_y, t_pos_z);
if(text[0] == "!")
{
format(str, 128, "[!]%s[%d]: %s", name, playerid, text[1]);
SendClientMessageToAll(-1, str);
}
else
{
format(str, 128, "[R]%s[%d]: %s", name, playerid, text);
for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerInRangeOfPoint(i, 20.0, t_pos_x, t_pos_y, t_pos_z)) SendClientMessage(i,-1, str);
}
return 0;
D:\Ìîäû òðåáóåìûå, ñòàðûå\ñåðâåðà äëÿ [Gn_R]\gamemodes\modhost03.pwn(2601) : error 033: array must be indexed (variable "-unknown-")
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
Старую функцию на эту замените:
stock SCMToAllInRangeOfPoint(const playerid, const bool: v, const text[])
{
new
str[144],
p_name[MAX_PLAYER_NAME + 1],
i = GetMaxPlayers();
GetPlayerName(playerid, p_name, sizeof(p_name));
do
{
if(IsPlayerConnected(--i))
{
format(str, 144, "[%c] %s[%i]: %s", v ? ('!') : ('R'), p_name, playerid, text);
SendClientMessage(i, -1, str);
}
}
while(i != 0);
}
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot