[КОД] Отыгровка оружия / Система мульти-диалогов by MrGPro - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir, Phoenixxx_Czar  
[КОД] Отыгровка оружия / Система мульти-диалогов by MrGPro
MrGPro Дата: Пятница, 03.08.2018, 19:31 | Сообщение # 1
Боец
Сообщений: 202
Статус: Offline
Код так себе может кому пригодиться более-менее удобный.Моно было еще короче =D
Код

#SingleInstance force
#Persistent
#Include SAMPUDF.ahk
#IfWinActive GTA:SA:MP

global nw:=0 ; ключ против спама в чат одного текста несколько раз
global w ; ключ оружия
global sex :=  getsexbyskin(getPlayerSkinId())
;global sex :=  0 ; для тестировния без udf
global sex_index := 0 ; ключ загрузки переменных в масив (1-3)
global SexKey :=
(
"
povesel|повесел|повесела|
ubral|убрал|убралa|
dostal|достал|достала|
poloshil|положил|положила|
snjal|снял|сняла|
"
) ; текстовый массив слов формат переменная|муж|жен|

sex := getsexbyskin(getPlayerSkinId()) ; получаем пол по скину
Load_Tag_OfSex() ; загружаем в переменные нужные слова для жен или муж пола

; запуск в фоновом режиме (задержка 1сек)
SetTimer, RPChat_Gun, 1000
; или на выбор
; запуск через колесико мышки
$~WheelDown::
$~WheelUp::
gosub, RPChat_Gun
return

; лабел отыгровки в чат через функцию
RPChat_Gun:
if (getPlayerWeaponId())
Weapon_RP_LOAD(getPlayerWeaponId())
else
Weapon_RP_unLOAD(getPlayerWeaponId())
return

; функция загружает переменные значения полов
Load_Tag_OfSex()
{
    global
    loop, parse, SexKey, |, `n
    {
  sex_index+=1
  if (sex_index=1)
   key1 := A_LoopField
  If (sex=1 and sex_index = 2)
   %key1% := A_LoopField
  If (sex=2 and sex_index = 3)
   %key1% := A_LoopField
  If (sex_index=3)
   sex_index:=0
    }
}

; Отыгровка доставания оружия
Weapon_RP_LOAD(ByRef w)
{
    global
    if (w == 24) and (nw != 1)
  SendChat("/me быстрым движением руки " dostal " Desert Eagle из кобуры")    &    nw := 1
    if (w == 25) and (nw != 2)
  SendChat("/me быстрым движением руки " snajl " дробовик с правого плеча")    &    nw := 2
    if (w == 34) and (nw != 3)
  SendChat("/me быстрым движением руки " snjal " снайперскую винтовку с левого плеча")    &    nw := 3
    if (w == 30) and (nw != 4)
  SendChat("/me быстрым движением руки " snjal " автомат AK-47 с плеча")    &    nw := 4
    if (w == 31) and (nw != 5)
  SendChat("/me быстрым движением руки " snjal " карабин М4А1 с плеча")    &    nw := 5
    if (w == 29) and (nw != 6)
  SendChat("/me быстрым движением руки " snjal " пистолет-пулемет MP5 с правого плеча")    &    nw := 6
    if (w == 23) and (nw != 7)
  SendChat("/me быстрым движением руки " dostal " пистолет с глушителем из кобуры")    &    nw := 7
}

; Отыгровка спрятать оружие
Weapon_RP_unLOAD(ByRef w)
{
    global
    if (w != 24) and (nw = 1)
  SendChat("/me аккуратным движением руки " poloshil " Desert Eagle в кобуру")
    if (w != 25) and (nw = 2)
  SendChat("/me аккуратным движением руки " povesel " дробовик на правое плечо")
    if (w != 34) and (nw = 3)
  SendChat("/me аккуратным движением руки " povesel " снайперскую винтовку на левое плечо")
    if (w != 30) and (nw = 4)
  SendChat("/me аккуратным движением руки " povesel " автомат AK-47 на плечо")
    if (w != 31) and (nw = 5)
  SendChat("/me аккуратным движением руки " povesel " карабин М4А1 на плечо")
    if (w != 29) and (nw = 6)
  SendChat("/me аккуратным движением руки " povesel " пистолет-пулемет MP5 на правое плечо")
    if (w != 23) and (nw = 7)
  SendChat("/me аккуратным движением руки " ubral " пистолет с глушителем в кобуру")
    nw := 0
}


Метод #2

Код
#SingleInstance force
#Persistent
#Include SAMPUDF.ahk
#IfWinActive GTA:SA:MP
global sex := getsexbyskin(getPlayerSkinId()) ; ключ загрузки переменных из массива 0  / "" ошибка ; 1 муж; 2 жен;
;global sex :=  0 ; для тестировния без udf из массива 0  / "" ошибка ; 1 муж; 2 жен;
global SexTag := {povesel: "повесел|повесела", ubral: "убрал|убралa", dostal: "достал|достала", poloshil: "положил|положила", snjal: "снял|сняла"} ; массив ключей и значений муж|жен
TestKey := [] ; массив для наглядного тестирования функции (не обязательно можно удалить) ############ 1

; пример загрузки скинов с успехом или ошибкой
if (Load_Tag_OfSex2())
    MsgBox,,, Ok все загружено
else
    MsgBox,,, Плохо скин не известен

; наглядный пример загрузки ключа жен или муж слова через global sex := 0,1,2 на выбор (можно удалить)
for i, test in TestKey
{
    s:= % %test%
    MsgBox,,,    % "Ключ: " test " = " s
}

; запуск в фоновом режиме (задержка 1сек)
SetTimer, RPChat_Gun, 1000
; или на выбор
; запуск через колесико мышки
$~WheelDown::
$~WheelUp::
gosub, RPChat_Gun
return

; лабел отыгровки в чат через функцию
RPChat_Gun:
if (getPlayerWeaponId())
Weapon_RP_LOAD(getPlayerWeaponId())
else
Weapon_RP_unLOAD(getPlayerWeaponId())
return

Load_Tag_OfSex2()
{
    global
    For key, sexTags in SexTag
    {
  stats := 0
  If RegExMatch(SexTag[key], "((?<men>.*)[|](?<woman>.*))", tag_)
  {
   If (sex > 0)
   {
    if (sex=1) {
     %key% := tag_men
     TestKey[A_index] := key ; для наглядной загрузки (не обязательно можно удалить) ############ 1
    }
    if (sex=2)
    {
     %key% := tag_woman
     TestKey[A_index] := key ; для наглядной загрузки (не обязательно можно удалить) ############ 1
    }
    stats := true
   }
   else
    stats := false
  }
    }
    return stats
}

; Отыгровка доставания оружия
Weapon_RP_LOAD(ByRef w)
{
    global
    if (w == 24) and (nw != 1)
  SendChat("/me быстрым движением руки " dostal " Desert Eagle из кобуры")    &    nw := 1
    if (w == 25) and (nw != 2)
  SendChat("/me быстрым движением руки " snajl " дробовик с правого плеча")    &    nw := 2
    if (w == 34) and (nw != 3)
  SendChat("/me быстрым движением руки " snjal " снайперскую винтовку с левого плеча")    &    nw := 3
    if (w == 30) and (nw != 4)
  SendChat("/me быстрым движением руки " snjal " автомат AK-47 с плеча")    &    nw := 4
    if (w == 31) and (nw != 5)
  SendChat("/me быстрым движением руки " snjal " карабин М4А1 с плеча")    &    nw := 5
    if (w == 29) and (nw != 6)
  SendChat("/me быстрым движением руки " snjal " пистолет-пулемет MP5 с правого плеча")    &    nw := 6
    if (w == 23) and (nw != 7)
  SendChat("/me быстрым движением руки " dostal " пистолет с глушителем из кобуры")    &    nw := 7
}

; Отыгровка спрятать оружие
Weapon_RP_unLOAD(ByRef w)
{
    global
    if (w != 24) and (nw = 1)
  SendChat("/me аккуратным движением руки " poloshil " Desert Eagle в кобуру")
    if (w != 25) and (nw = 2)
  SendChat("/me аккуратным движением руки " povesel " дробовик на правое плечо")
    if (w != 34) and (nw = 3)
  SendChat("/me аккуратным движением руки " povesel " снайперскую винтовку на левое плечо")
    if (w != 30) and (nw = 4)
  SendChat("/me аккуратным движением руки " povesel " автомат AK-47 на плечо")
    if (w != 31) and (nw = 5)
  SendChat("/me аккуратным движением руки " povesel " карабин М4А1 на плечо")
    if (w != 29) and (nw = 6)
  SendChat("/me аккуратным движением руки " povesel " пистолет-пулемет MP5 на правое плечо")
    if (w != 23) and (nw = 7)
  SendChat("/me аккуратным движением руки " ubral " пистолет с глушителем в кобуру")
    nw := 0
}

ПРИМЕР: ПОСТРОЕНИЯ МУЛЬТИ-ДИАЛОГОВ С УПРАВЛЕНИЕ by MrGPro (реализовано пока для style 2 и 0)
* Управление мульти-комбо через клавиатуру, мышку, диалог.
* Возможность вернуться на все диалоги назад и на выход
* Переходы и возвраты через диалог
Код
#Include SAMPUDF.ahk
global sub_History := [] ; загружаем историю открытых диалогов
global Dialog := [2, "Нубчик(Dialog)", "Какуля(subMenu1)|Какаха(subMenu2)", "x", "close"] ; Нубчик(Dialog) - имя диалога ссылка на (Dialog)
global subMenu1 := [2, "Нубчик2(subMenu1)", "Какуля #2(subMenu)", "ok", "x"]
global subMenu := [0, "Нубчик3(subMenu)", "Какуля #3|Какаха #3", "x", ""]

F1::
DialogControl(Dialog)
return

subMenu2:
addChatMessage("Вы выбрали 2 пункт и вас кинуло на label: subMenu2")
return

DialogControl(theDialog)
{
    global
    new_theText := null
    press_theKey := null
    for index, Key in theDialog
    {
        if (index=1)
            theStyle := Key
        if (index=2)
            theCaption := Key
        if (index=3)
            theText := Key
        if (index=4)
            theButtonOne := Key
        if (index=5)
            theButtonTwo := Key
    }
    StringSplit, LineCode, theText, |,
    RegExMatch(theCaption, "(?<text>.*)\((?<cmd>.*)\)", CAPandCMD_)
    Loop, %LineCode0%
    {
        if (RegExMatch(LineCode%A_Index%, "(?<text>.*)\((?<cmd>.*)\)"))
            RegExMatch(LineCode%A_Index%, "(?<text>.*)\((?<cmd>.*)\)", TXTandCMD_)
        else
            RegExMatch(LineCode%A_Index%, "(?<text>.*)", TXTandCMD_)
        line_%A_Index% := % TXTandCMD_cmd
        if (new_theText)
            new_theText := % new_theText TXTandCMD_text "`n"
        else
            new_theText := % TXTandCMD_text "`n"
    }
    
    if (theButtonOne) and !(theButtonTwo)
        ShowDialog(theStyle, CAPandCMD_text, new_theText, theButtonOne)
    else if  (theButtonOne) and (theButtonTwo)
        ShowDialog(theStyle, CAPandCMD_text, new_theText, theButtonOne, theButtonTwo)
    while (isDialogOpen() and Time < 500)
    {
        if (A_TickCount - Time > 500)
        {
            Return
        }
        While((GetKeyState("Enter", "P") or GetKeyState("LButton", "P") or (isDialogButtonSelected() = 1 and GetKeyState("LButton", "P"))))
        {
            if (theStyle!=0)
                {
                    Sleep 100
                    selLine := % getDialogLineNumber()
                    theCheckCMD := % line_%selLine%
                    sub_History[%theCheckCMD%[2]] := CAPandCMD_cmd
                    if (%theCheckCMD%.MinIndex() = 1 and (%theCheckCMD%.MaxIndex() = 5 or %theCheckCMD%.MaxIndex() = 4))
                       DialogControl(%theCheckCMD%)
                    else
                    {
                        try
                        {
                        gosub, %theCheckCMD%  
                        }
                        catch
                        {
                            return 0
                        }
                    }
                }  
        }
        While(GetKeyState("Esc", "P"))
        {
            For key, value in sub_History
            {
                if (key == theCaption)
                {
                    if (%value%.MinIndex() = 1 and (%value%.MaxIndex() = 5 or %value%.MaxIndex() = 4))
                        DialogControl(%value%)
                    else
                    {
                        try
                        {
                            gosub, %value%
                        }
                        catch
                        {
                            return 0
                        }
                    }
                }
            }
        }
    }
}


Тебе помогли не забывай про благодарность >> тыкни репутацию
---------------------------------------͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏ -----------------------------------------------------
Зам.Администратора на проекте "DayZ Epoсh SPN" сервер Arma 2OA DayZ Epoch пиратка и лицензия


Сообщение отредактировал MrGPro - Четверг, 16.08.2018, 14:07
Andreyringo1 Дата: Пятница, 03.08.2018, 22:27 | Сообщение # 2
Новичок
Сообщений: 25
Статус: Offline
Когда в руках оружие, просто идёт флуд.

Сообщение отредактировал Andreyringo1 - Пятница, 03.08.2018, 22:35
MrGPro Дата: Пятница, 03.08.2018, 22:36 | Сообщение # 3
Боец
Сообщений: 202
Статус: Offline
Andreyringo1, исправил забыл убрать     nw := 0 при копировании одой функции

Тебе помогли не забывай про благодарность >> тыкни репутацию
---------------------------------------͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏ -----------------------------------------------------
Зам.Администратора на проекте "DayZ Epoсh SPN" сервер Arma 2OA DayZ Epoch пиратка и лицензия
CZAR Дата: Суббота, 04.08.2018, 00:42 | Сообщение # 4
Czar Of Scripts
Сообщений: 1373
Статус: Offline
MrGPro, что это за бред?
Код
global SexKey :=
(
"
povesel|повесел|повесела|
ubral|убрал|убралa|
dostal|достал|достала|
poloshil|положил|положила|
snjal|снял|сняла|
"
)

В курсе что у некоторых может не работать такой вариант записи?

А это что за прикольчик? Зачем два таймера?
Код
SetTimer, RPChat_Gun, 1000
SetTimer, RPChat_Gun, On





Я в ВК
Ушел в веб.

• Ничего не покупаю.
• Способы не проверяю.


У меня теперь новый домен, если ссылка не работает - напишите.

Гарант Cheat-Master:
*тема*

AHK
[S-RP] House Finder / House Teleporter
[SAMP] Online Counter
[S-RP] [For Event] Show Star
[S-RP] AntiCasino
[S-RP] [BOT] Auto Fisher + Auto Find Worm + Auto Cook
[S-RP] [BOT] /dance
Winner | Делаем розыгрыши среди участников темы.
SAMP-UDF
[AHK Урок] Выбор в диалогах мышкой и enter`ом
[SAMP] Быстрый ответ на СМС
[ERP] Помощник для адвоката
[DRP] FakeTime

Достижения:
- 26.02.2017
- 03.01.2018
- 26.05.2018
- 22.09.2018
- 04.04.2019
MrGPro Дата: Суббота, 04.08.2018, 11:40 | Сообщение # 5
Боец
Сообщений: 202
Статус: Offline
Phoenixxx_Czar,
Код
global SexKey :=
(
"
povesel|повесел|повесела|
ubral|убрал|убралa|
dostal|достал|достала|
poloshil|положил|положила|
snjal|снял|сняла|
"
)


это набросок код для визуального редактирования и быстрого добавления в код без создания лишних строк в коде с переменными (минимизировать код), с таймеров тупанул из-за того что еще С# изучаю а там в таймере задается с начало интервал где нужно, а следом активация.

И почему же не будет работать?
Код
В курсе что у некоторых может не работать такой вариант записи?


Метод 2 реализован через массив с ним что не так будет ?


Тебе помогли не забывай про благодарность >> тыкни репутацию
---------------------------------------͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏ -----------------------------------------------------
Зам.Администратора на проекте "DayZ Epoсh SPN" сервер Arma 2OA DayZ Epoch пиратка и лицензия
CZAR Дата: Суббота, 04.08.2018, 17:05 | Сообщение # 6
Czar Of Scripts
Сообщений: 1373
Статус: Offline
MrGPro, некоторые компиляторы не поддерживают такую запись sad
Все равно как-то это стремно все выглядит, проще в самой отыгровке делать (sex == 2 ? "а" : ""), как мне кажется.





Я в ВК
Ушел в веб.

• Ничего не покупаю.
• Способы не проверяю.


У меня теперь новый домен, если ссылка не работает - напишите.

Гарант Cheat-Master:
*тема*

AHK
[S-RP] House Finder / House Teleporter
[SAMP] Online Counter
[S-RP] [For Event] Show Star
[S-RP] AntiCasino
[S-RP] [BOT] Auto Fisher + Auto Find Worm + Auto Cook
[S-RP] [BOT] /dance
Winner | Делаем розыгрыши среди участников темы.
SAMP-UDF
[AHK Урок] Выбор в диалогах мышкой и enter`ом
[SAMP] Быстрый ответ на СМС
[ERP] Помощник для адвоката
[DRP] FakeTime

Достижения:
- 26.02.2017
- 03.01.2018
- 26.05.2018
- 22.09.2018
- 04.04.2019
JayscoreINC Дата: Воскресенье, 07.10.2018, 20:04 | Сообщение # 7
Любитель
Сообщений: 30
Статус: Offline
Не выходит из диалога по кнопке. (переходит на след. пункт)

Некоторые люди наслаждаются дождём, другие просто промокают.
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума