[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Форум » Программирование и WEB-дизайн » C# » Вопросы по c# (Помощь в програмировании)
Вопросы по c#
wmysterio
Администраторы
Скриптер
15.07.13 20:19
Offline
Случилось так, что c# стал одним из популярных языков программирования. Здесь вам могут дать ответы на многие вопросы. Обращаемся wink
Отредактировал KiLLeR96 - Вторник, 16.07.13, 22:47

Vital
Друзья
Скриптер
16.07.13 00:23
Offline
Начну, пожалуй, по GTA 4, правда.
Вот проблемка: не работает проверка на существование нацеленного актёра, игра постоянно выдаёт else, то есть, что актёра нету... Хотя это не так.

Код
private void MK(object sender, GTA.KeyEventArgs e)
         {
             if (e.Key == Keys.C && Game.isGameKeyPressed(GTA.GameKey.Aim) && !Player.Character.isInVehicle())
             {  
                 Ped trg = Player.GetTargetedPed();                
                  
                 if (Exists(trg))
                 {                     
                     mdl = trg.Model;
                     Player.Model = mdl;
                 }
                 else Game.DisplayText("You have no targeted ped");
             }
         }

И так и эдак пробовал, ничего не выходит... Что-то нелогичное связано с этим Exitst всегда.
2109: create_special_actor $VITAL in_front_of_computer

wmysterio
Администраторы
Скриптер
16.07.13 00:33
Offline
Vital, попробуй это условие:
Код
if ( trg.Exists() ) { /* ....... */ }

Vital
Друзья
Скриптер
16.07.13 00:35
Offline
wmysterio, хм, теперь вообще error in script.. Странная вещь.
2109: create_special_actor $VITAL in_front_of_computer

wmysterio
Администраторы
Скриптер
16.07.13 00:53
Offline
Vital, есть старый дедовский метод:
Код
if (trg != null) {
          /* ... */
}
У меня заработала такая проверка.

Vital
Друзья
Скриптер
16.07.13 13:59
Offline
wmysterio, всё равно выходит else... Полный код:

Код
using System;
using System.Windows.Forms;
using GTA;

namespace Model
{
     public class Model : Script
     {
         GTA.Model mdl;

         public Model()
         {
             this.KeyDown += new GTA.KeyEventHandler(this.MK);
         }

         private void MK(object sender, GTA.KeyEventArgs e)
         {
             if (e.Key == Keys.C && Game.isGameKeyPressed(GTA.GameKey.Aim) && !Player.Character.isInVehicle())
             {  
                 Ped trg = Player.GetTargetedPed();                
                 if (trg != null)
                 {                     
                     mdl = trg.Model;
                     Player.Model = mdl;
                 }
                 else Game.DisplayText("You have no targeted ped");
             }
         }

     }
}
2109: create_special_actor $VITAL in_front_of_computer

wmysterio
Администраторы
Скриптер
16.07.13 16:48
Offline
Vital, хм, у меня всё работает. Скин меняется:
Вот мой код:
Код
using System;
using System.Windows.Forms;
using GTA;

namespace Model {
       public class Model : Script {
           GTA.Model mdl;
             
           public Model() {
               Player.Character.Weapons.MP5.Ammo = 120;
               this.KeyDown += new GTA.KeyEventHandler(this.MK);
           }

           private void MK(object sender, GTA.KeyEventArgs e) {
               if (e.Key == Keys.C && Game.isGameKeyPressed(GTA.GameKey.Aim) && !Player.Character.isInVehicle()) {
                   Ped trg = Player.GetTargetedPed();
                   if (trg != null) {
                       mdl = trg.Model;
                       Player.Model = mdl;
                       Game.DisplayText("Ok");
                   } else
                       Game.DisplayText("You have no targeted ped");
               }
           }

       }
}
Добавил только сообшение, когда скин меняется и дал оружие в начале игры. Он начал меняться только тогда, когда я целился в педа с оружия
Прикрепления: 9228738.png(517Kb)

Vital
Друзья
Скриптер
16.07.13 17:44
Offline
wmysterio, вот это я и забыл smile Оказывается, прицел без оружия не работает, что странно.
P.S. Уже не по этой теме: как "закрыть" событие. Вот есть событие нажатия клавиши, которое выполняется постоянно, в отличие от простого public, а как его завершить? Что-то типа break?
2109: create_special_actor $VITAL in_front_of_computer

wmysterio
Администраторы
Скриптер
16.07.13 17:54
Offline
Vital, я не знаю как прям отключить событие от отработки, но можно просто не выполнять код события используя оператор return, поставив  условие. Вот простой пример:
Код
using System;
using System.Windows.Forms;
using GTA;

namespace Model {
         public class Model : Script {
             GTA.Model mdl;

             bool EventDisable = false;
                 
             public Model() {
                 Player.Character.Weapons.MP5.Ammo = 120;
                 this.KeyDown += new GTA.KeyEventHandler(this.MK);
             }

             private void MK(object sender, GTA.KeyEventArgs e) {
                 if (EventDisable) {
                     return;
                 }

                 if (e.Key == Keys.C && Game.isGameKeyPressed(GTA.GameKey.Aim) && !Player.Character.isInVehicle()) {
                     Ped trg = Player.GetTargetedPed();
                     if (trg != null) {
                         mdl = trg.Model;
                         Player.Model = mdl;
                         Game.DisplayText("Ok");
                         EventDisable = true;
                     } else
                         Game.DisplayText("You have no targeted ped");
                 }
             }

         }
}
Менять скин можно будет только 1 раз

Vital
Друзья
Скриптер
16.07.13 17:57
Offline
wmysterio, то есть скрипт сначала выполнит всё в public Model, потом перейдёт к событию, а после return вернётся в public? И тогда он снова выполнит всё, что там было, или просто завершится работа скрипта?
2109: create_special_actor $VITAL in_front_of_computer

wmysterio
Администраторы
Скриптер
16.07.13 18:04
Offline
Vital, нет, ruturn действует как в консоли - завершить приложение. То есть в нашем случаи он завершает обработку события, как и всех функций, но не удалит само событие. Так же как переменные, которые мы создаём, C# не удаляет их. Это делает уборщик .NET после завершения приложения.

Это как бы независимый модуль, который действует самостоятельно. Ему в качестве параметров постоянно будет входить событие, которое мы написали в главном потоке.

Как правило события используют для постоянного выполнения кода. Если нужно выполнить код один раз, то создают функцию, которая обрабатывается не как событие и вызывается с главного потока при необходимости.

Vital
Друзья
Скриптер
16.07.13 18:11
Offline
wmysterio, понятно, спасибо. Действительно, зачем делать событие, если можно сделать цикл repeat, к примеру, в главном потоке и он сам завершится. Я видел у тебя while (true), в нём, я так понимаю, тоже нужен Wait(0)?
2109: create_special_actor $VITAL in_front_of_computer

wmysterio
Администраторы
Скриптер
16.07.13 19:01
Offline
Vital, Да, как и в SannyBuilder нужна задержка в циклах. Без неё идёт зависание

Yurko_UA
Модераторы
Модератор
23.07.14 14:05
Offline
Привет! Решил занятся шарпом, программа насколько проста, что я без уроков с формами разобрался. Несколько вопросов:
1) Как перейти по линку через браузер по-умолчанию?
2) Как реализовать замену символов строки по примеру FXT Easy, Rus2Gxt Coder:?
   берется строка с richTextBox1, символы заменяются, строка уже с замененными символами вставляется в        richTextBox2.
3) Есть две радио-кнопки, как проверить, которая с них выбрана?

Добавлено (23.07.14, 13:05)
---------------------------------------------
Вообщем как перейти по линку, я уже понял, но никак не разберусь с переводчиком, нифига не заменяет


Код
private void button1_Click(object sender, EventArgs e)
         {
             string st = richTextBox1.Text;

             if (radioButton1.Checked)
             {
                  
                 st.Replace("А", "A").Replace("Б", "Ў").Replace("В", "B").Replace("Г", "F").Replace("Д", "D").Replace("Е", "E").Replace("Є", "Ґ").Replace("Ж", "G").Replace("З", "§").Replace("И", "N").Replace("І", "I").Replace("Ї", "Ё").Replace("Й", "©").Replace("К", "K").Replace("Л", "L").Replace("М", "M").Replace("Н", "H").Replace("О", "O").Replace("П", "Z").Replace("Р", "P").Replace("С", "C").Replace("Т", "T").Replace("У", "Y").Replace("Ф", "V").Replace("Х", "X").Replace("Ц", "Q").Replace("Ч", "Є").Replace("Ш", "W").Replace("Щ", "S").Replace("Ь", "J").Replace("Ю", "U").Replace("Я", "R").Replace("а", "A").Replace("б", "Ў").Replace("в", "B").Replace("г", "F").Replace("д", "D").Replace("е", "E").Replace("є", "Ґ").Replace("ж", "G").Replace("з", "§").Replace("и", "N").Replace("і", "I").Replace("ї", "Ё").Replace("й", "©").Replace("к", "K").Replace("л", "L").Replace("м", "M").Replace("н", "H").Replace("о", "O").Replace("п", "Z").Replace("р", "P").Replace("с", "C").Replace("т", "T").Replace("у", "Y").Replace("ф", "V").Replace("х", "X").Replace("ц", "Q").Replace("ч", "Є").Replace("ш", "W").Replace("щ", "S").Replace("ь", "J").Replace("ю", "U").Replace("я", "R");
             }
             else if(radioButton2.Checked)  
             {

                 st.Replace("A", "А").Replace("Ў", "Б").Replace("B", "В").Replace("F", "Г").Replace("D", "Д").Replace("E", "Е").Replace("Ґ", "Є").Replace("G", "Ж").Replace("§", "З").Replace("N", "И").Replace("I", "І").Replace("Ё", "Ї").Replace("©", "Й").Replace("K", "К").Replace("L", "Л").Replace("M", "М").Replace("H", "Н").Replace("O", "О").Replace("Z", "П").Replace("P", "Р").Replace("C", "С").Replace("T", "Т").Replace("Y", "У").Replace("V", "Ф").Replace("X", "Х").Replace("Q", "Ц").Replace("Є", "Ч").Replace("W", "Ш").Replace("S", "Щ").Replace("J", "Ь").Replace("U", "Ю").Replace("R", "Я");
             }

             richTextBox2.Clear();
             richTextBox2.AppendText(st);

             }

wmysterio
Администраторы
Скриптер
27.07.14 19:29
Offline
Цитата Yurko_UA ()
Как реализовать замену символов строки по примеру FXT Easy, Rus2Gxt Coder:? берется строка с richTextBox1, символы заменяются, строка уже с замененными символами вставляется в richTextBox2.
Замена происходит так:
Код
string st = "test by wmysterio";
st = st.Replace( "test", "created" );
//st => "created by wmysterio"
Если нужно просто перевести текст с поля1 в поле2, то
Код
private void button1_Click( object sender, EventArgs e ) {
string st = richTextBox1.Text;
st = st.Replace( "x", "y" );
richTextBox2.Text = st;
}

Цитата Yurko_UA ()
3) Есть две радио-кнопки, как проверить, которая с них выбрана?
Как минимум:
Код
if ( radioButton1.Checked ) {  
string s = "Выбрана первая";
}
if ( radioButton2.Checked ) {
string s = "Выбрана вторая";
}
Лучше всего подписаться на событие

Yurko_UA
Модераторы
Модератор
27.07.14 22:34
Offline
Спасибо, но я сам все давно решил. Завтра вьІложу програмку и сюда.

И завтра еще один вопросик задам.

wmysterio
Администраторы
Скриптер
28.07.14 11:16
Offline
Цитата Yurko_UA ()
Спасибо, но я сам все давно решил.
Хорошо. К сожалению только вчера смог ответить. Раньше не мог из-за отсутствия интернета.

Yurko_UA
Модераторы
Модератор
31.07.14 00:34
Offline
Как программно изменить текст кнопки и елементов MenuStrip'a?

wmysterio
Администраторы
Скриптер
31.07.14 11:55
Offline
Цитата Yurko_UA ()
Как программно изменить текст кнопки и елементов MenuStrip'a?
Самый простой вариант - кликнуть на элемент меню, посмотреть в "Свойства" и найти пункт "Name". Скопировать название и вставить в участок кода. Применить свойства "Text" к этому элементу. К примеру если у нас есть меню
Код
Файл -> Выход
Информация -> Тест
то можно програмно использовать:
Код
тестToolStripMenuItem.Text = "2";
И тогда получится
Код
Файл -> Выход
Информация -> 2
Другой метод таков: меню содержит коллекцию элементов меню. Мы можем менять названия через то-же свойство "Text":
Код
menuStrip1.Items[ 0 ].Text = "250";
Получится:
Код
250 -> Выход
Информация -> 2

Я пока не разобрался как менять имена в выпадающих пунктах кроме первого метода.

Yurko_UA
Модераторы
Модератор
31.07.14 12:17
Offline
Текст кнопки так же?

Форум » Программирование и WEB-дизайн » C# » Вопросы по c# (Помощь в програмировании)
Страница 1 из 212»
Поиск: